@shutootaki/gwm
Version:
git worktree manager CLI
87 lines • 3.67 kB
JavaScript
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
import { useState } from 'react';
import { Text, Box } from 'ink';
import { execSync, spawnSync } from 'child_process';
import { WorktreeSelector } from './WorktreeSelector.js';
import { formatErrorForDisplay } from '../utils/index.js';
import { escapeShellArg } from '../utils/shell.js';
export const WorktreeGo = ({ query, openCode = false, openCursor = false, }) => {
const [error, setError] = useState(null);
const [success, setSuccess] = useState(null);
const handleSelect = (worktree) => {
if (openCode) {
try {
// codeコマンドが存在するかチェック
execSync('which code', { stdio: 'ignore' });
// VS Codeでディレクトリを開く(適切にエスケープ)
execSync(`code ${escapeShellArg(worktree.path)}`, { stdio: 'inherit' });
setSuccess(`Opened ${worktree.branch} in Editor`);
setTimeout(() => process.exit(0), 1000);
}
catch (err) {
if (err instanceof Error && err.message.includes('which code')) {
setError('Editor command "code" not found. Please install Editor and add it to your PATH.');
}
else {
setError(formatErrorForDisplay(err));
}
}
}
else if (openCursor) {
try {
// cursor コマンドが存在するかチェック
execSync('which cursor', { stdio: 'ignore' });
execSync(`cursor ${escapeShellArg(worktree.path)}`, {
stdio: 'inherit',
});
setSuccess(`Opened ${worktree.branch} in Cursor`);
setTimeout(() => process.exit(0), 1000);
}
catch (err) {
if (err instanceof Error && err.message.includes('which cursor')) {
setError('Cursor command "cursor" not found. Please install Cursor and add it to your PATH.');
}
else {
setError(formatErrorForDisplay(err));
}
}
}
else {
// サブシェルを起動して選択したディレクトリへ移動
try {
const userShell = process.env.SHELL ||
(process.platform === 'win32'
? process.env.COMSPEC || 'cmd.exe'
: '/bin/bash');
spawnSync(userShell, {
cwd: worktree.path,
stdio: 'inherit',
env: process.env,
});
}
catch (err) {
setError(formatErrorForDisplay(err));
}
finally {
process.exit(0);
}
}
};
const handleCancel = () => {
// Exit without output
process.exit(0);
};
const placeholderText = openCode
? 'Select a worktree to open in VS Code:'
: openCursor
? 'Select a worktree to open in Cursor:'
: 'Select a worktree to go to:';
if (success) {
return (_jsx(Box, { children: _jsxs(Text, { color: "green", children: ["\u2713 ", success] }) }));
}
if (error) {
return (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["\u2717 Error: ", error] }) }));
}
return (_jsx(WorktreeSelector, { onSelect: handleSelect, onCancel: handleCancel, initialQuery: query, placeholder: placeholderText }));
};
//# sourceMappingURL=WorktreeGo.js.map