@camaradesuk/git-worktree-tools 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +259 -0
- package/dist/cli/cleanpr.d.ts +13 -0
- package/dist/cli/cleanpr.d.ts.map +1 -0
- package/dist/cli/cleanpr.js +441 -0
- package/dist/cli/cleanpr.js.map +1 -0
- package/dist/cli/lswt.d.ts +11 -0
- package/dist/cli/lswt.d.ts.map +1 -0
- package/dist/cli/lswt.js +313 -0
- package/dist/cli/lswt.js.map +1 -0
- package/dist/cli/newpr.d.ts +11 -0
- package/dist/cli/newpr.d.ts.map +1 -0
- package/dist/cli/newpr.js +888 -0
- package/dist/cli/newpr.js.map +1 -0
- package/dist/cli/wtlink.d.ts +15 -0
- package/dist/cli/wtlink.d.ts.map +1 -0
- package/dist/cli/wtlink.js +124 -0
- package/dist/cli/wtlink.js.map +1 -0
- package/dist/e2e/cli.e2e.test.d.ts +2 -0
- package/dist/e2e/cli.e2e.test.d.ts.map +1 -0
- package/dist/e2e/cli.e2e.test.js +215 -0
- package/dist/e2e/cli.e2e.test.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/git.integration.test.d.ts +2 -0
- package/dist/integration/git.integration.test.d.ts.map +1 -0
- package/dist/integration/git.integration.test.js +333 -0
- package/dist/integration/git.integration.test.js.map +1 -0
- package/dist/lib/colors.d.ts +59 -0
- package/dist/lib/colors.d.ts.map +1 -0
- package/dist/lib/colors.js +145 -0
- package/dist/lib/colors.js.map +1 -0
- package/dist/lib/colors.test.d.ts +2 -0
- package/dist/lib/colors.test.d.ts.map +1 -0
- package/dist/lib/colors.test.js +69 -0
- package/dist/lib/colors.test.js.map +1 -0
- package/dist/lib/config.d.ts +58 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +91 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/config.test.d.ts +2 -0
- package/dist/lib/config.test.d.ts.map +1 -0
- package/dist/lib/config.test.js +84 -0
- package/dist/lib/config.test.js.map +1 -0
- package/dist/lib/constants.d.ts +37 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +37 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/errors.d.ts +88 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +112 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/errors.test.d.ts +2 -0
- package/dist/lib/errors.test.d.ts.map +1 -0
- package/dist/lib/errors.test.js +117 -0
- package/dist/lib/errors.test.js.map +1 -0
- package/dist/lib/git.d.ts +224 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +524 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/git.test.d.ts +2 -0
- package/dist/lib/git.test.d.ts.map +1 -0
- package/dist/lib/git.test.js +402 -0
- package/dist/lib/git.test.js.map +1 -0
- package/dist/lib/github.d.ts +82 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +254 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/github.test.d.ts +2 -0
- package/dist/lib/github.test.d.ts.map +1 -0
- package/dist/lib/github.test.js +258 -0
- package/dist/lib/github.test.js.map +1 -0
- package/dist/lib/prompts.d.ts +39 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +213 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/prompts.test.d.ts +2 -0
- package/dist/lib/prompts.test.d.ts.map +1 -0
- package/dist/lib/prompts.test.js +250 -0
- package/dist/lib/prompts.test.js.map +1 -0
- package/dist/lib/state-detection.d.ts +65 -0
- package/dist/lib/state-detection.d.ts.map +1 -0
- package/dist/lib/state-detection.js +186 -0
- package/dist/lib/state-detection.js.map +1 -0
- package/dist/lib/state-detection.test.d.ts +2 -0
- package/dist/lib/state-detection.test.d.ts.map +1 -0
- package/dist/lib/state-detection.test.js +164 -0
- package/dist/lib/state-detection.test.js.map +1 -0
- package/dist/lib/wtlink/index.d.ts +5 -0
- package/dist/lib/wtlink/index.d.ts.map +1 -0
- package/dist/lib/wtlink/index.js +7 -0
- package/dist/lib/wtlink/index.js.map +1 -0
- package/dist/lib/wtlink/link-configs.d.ts +10 -0
- package/dist/lib/wtlink/link-configs.d.ts.map +1 -0
- package/dist/lib/wtlink/link-configs.js +411 -0
- package/dist/lib/wtlink/link-configs.js.map +1 -0
- package/dist/lib/wtlink/link-configs.test.d.ts +2 -0
- package/dist/lib/wtlink/link-configs.test.d.ts.map +1 -0
- package/dist/lib/wtlink/link-configs.test.js +179 -0
- package/dist/lib/wtlink/link-configs.test.js.map +1 -0
- package/dist/lib/wtlink/main-menu.d.ts +2 -0
- package/dist/lib/wtlink/main-menu.d.ts.map +1 -0
- package/dist/lib/wtlink/main-menu.js +149 -0
- package/dist/lib/wtlink/main-menu.js.map +1 -0
- package/dist/lib/wtlink/manage-manifest.d.ts +9 -0
- package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -0
- package/dist/lib/wtlink/manage-manifest.js +1262 -0
- package/dist/lib/wtlink/manage-manifest.js.map +1 -0
- package/dist/lib/wtlink/validate-manifest.d.ts +6 -0
- package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -0
- package/dist/lib/wtlink/validate-manifest.js +51 -0
- package/dist/lib/wtlink/validate-manifest.js.map +1 -0
- package/dist/lib/wtlink/validate-manifest.test.d.ts +2 -0
- package/dist/lib/wtlink/validate-manifest.test.d.ts.map +1 -0
- package/dist/lib/wtlink/validate-manifest.test.js +115 -0
- package/dist/lib/wtlink/validate-manifest.test.js.map +1 -0
- package/package.json +84 -0
package/dist/lib/git.js
ADDED
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { DEFAULT_REMOTE, DEFAULT_BASE_BRANCH } from './constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Shell-escape a string for use in a command
|
|
6
|
+
*/
|
|
7
|
+
function shellEscape(str) {
|
|
8
|
+
// If string contains spaces or special chars, wrap in quotes and escape internal quotes
|
|
9
|
+
if (/[\s"'\\]/.test(str)) {
|
|
10
|
+
return `"${str.replace(/["\\]/g, '\\$&')}"`;
|
|
11
|
+
}
|
|
12
|
+
return str;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Execute a git command and return output
|
|
16
|
+
*/
|
|
17
|
+
export function exec(args, options = {}) {
|
|
18
|
+
const escapedArgs = args.map(shellEscape);
|
|
19
|
+
const cmd = `git ${escapedArgs.join(' ')}`;
|
|
20
|
+
const execOptions = {
|
|
21
|
+
encoding: 'utf8',
|
|
22
|
+
cwd: options.cwd,
|
|
23
|
+
stdio: options.silent ? 'pipe' : ['pipe', 'pipe', 'pipe'],
|
|
24
|
+
};
|
|
25
|
+
try {
|
|
26
|
+
const result = execSync(cmd, execOptions);
|
|
27
|
+
// Use trimEnd to preserve leading whitespace (significant in git status output)
|
|
28
|
+
return result.trimEnd();
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (error instanceof Error && 'stderr' in error) {
|
|
32
|
+
const stderr = error.stderr;
|
|
33
|
+
if (stderr) {
|
|
34
|
+
throw new Error(`Git command failed: ${cmd}\n${stderr.toString()}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Execute a git command, returning null on failure instead of throwing
|
|
42
|
+
*/
|
|
43
|
+
export function execSafe(args, options = {}) {
|
|
44
|
+
try {
|
|
45
|
+
return exec(args, { ...options, silent: true });
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get the root directory of the current git repository
|
|
53
|
+
*/
|
|
54
|
+
export function getRepoRoot(cwd) {
|
|
55
|
+
const result = exec(['rev-parse', '--show-toplevel'], { cwd, silent: true });
|
|
56
|
+
// Normalize path for cross-platform compatibility
|
|
57
|
+
return path.normalize(result);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get repository name from remote URL or directory name
|
|
61
|
+
*/
|
|
62
|
+
export function getRepoName(repoRoot) {
|
|
63
|
+
const remoteUrl = execSafe(['remote', 'get-url', 'origin'], { cwd: repoRoot });
|
|
64
|
+
if (remoteUrl) {
|
|
65
|
+
// Extract repo name from SSH or HTTPS URL
|
|
66
|
+
// git@github.com:org/repo.git -> repo
|
|
67
|
+
// https://github.com/org/repo.git -> repo
|
|
68
|
+
const match = remoteUrl.match(/[/:]([^/]+?)(?:\.git)?$/);
|
|
69
|
+
if (match) {
|
|
70
|
+
return match[1];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Fall back to directory name
|
|
74
|
+
return path.basename(repoRoot);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the current branch name, or null if detached HEAD
|
|
78
|
+
*/
|
|
79
|
+
export function getCurrentBranch(cwd) {
|
|
80
|
+
const result = exec(['rev-parse', '--abbrev-ref', 'HEAD'], { cwd, silent: true });
|
|
81
|
+
return result === 'HEAD' ? null : result;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if in detached HEAD state
|
|
85
|
+
*/
|
|
86
|
+
export function isDetachedHead(cwd) {
|
|
87
|
+
return getCurrentBranch(cwd) === null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the current commit SHA
|
|
91
|
+
*/
|
|
92
|
+
export function getHeadCommit(cwd) {
|
|
93
|
+
return exec(['rev-parse', 'HEAD'], { cwd, silent: true });
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get short commit SHA
|
|
97
|
+
*/
|
|
98
|
+
export function getShortCommit(cwd, ref = 'HEAD') {
|
|
99
|
+
return exec(['rev-parse', '--short', ref], { cwd, silent: true });
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if a remote exists
|
|
103
|
+
*/
|
|
104
|
+
export function hasRemote(remote = DEFAULT_REMOTE, cwd) {
|
|
105
|
+
const result = execSafe(['remote', 'get-url', remote], { cwd });
|
|
106
|
+
return result !== null;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Fetch from remote
|
|
110
|
+
*/
|
|
111
|
+
export function fetch(remote = DEFAULT_REMOTE, cwd) {
|
|
112
|
+
exec(['fetch', remote], { cwd, silent: true });
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get the commit SHA of a ref
|
|
116
|
+
*/
|
|
117
|
+
export function getRefCommit(ref, cwd) {
|
|
118
|
+
return execSafe(['rev-parse', ref], { cwd });
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Determine commit relationship to base branch
|
|
122
|
+
*/
|
|
123
|
+
export function getCommitRelationship(baseBranch = DEFAULT_BASE_BRANCH, cwd) {
|
|
124
|
+
const remote = DEFAULT_REMOTE;
|
|
125
|
+
const baseRef = `${remote}/${baseBranch}`;
|
|
126
|
+
const headCommit = getHeadCommit(cwd);
|
|
127
|
+
const baseCommit = getRefCommit(baseRef, cwd);
|
|
128
|
+
if (!baseCommit) {
|
|
129
|
+
// Base branch doesn't exist, assume divergent
|
|
130
|
+
return 'divergent';
|
|
131
|
+
}
|
|
132
|
+
if (headCommit === baseCommit) {
|
|
133
|
+
return 'same';
|
|
134
|
+
}
|
|
135
|
+
// Check if HEAD is an ancestor of base (already merged)
|
|
136
|
+
const isAncestor = execSafe(['merge-base', '--is-ancestor', 'HEAD', baseRef], { cwd });
|
|
137
|
+
if (isAncestor !== null) {
|
|
138
|
+
return 'ancestor';
|
|
139
|
+
}
|
|
140
|
+
// Check if base is an ancestor of HEAD (we're ahead)
|
|
141
|
+
const baseIsAncestor = execSafe(['merge-base', '--is-ancestor', baseRef, 'HEAD'], { cwd });
|
|
142
|
+
if (baseIsAncestor !== null) {
|
|
143
|
+
return 'ahead';
|
|
144
|
+
}
|
|
145
|
+
// Check if HEAD is behind base
|
|
146
|
+
const mergeBase = execSafe(['merge-base', 'HEAD', baseRef], { cwd });
|
|
147
|
+
if (mergeBase === headCommit) {
|
|
148
|
+
return 'behind';
|
|
149
|
+
}
|
|
150
|
+
return 'divergent';
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get list of commits ahead of base
|
|
154
|
+
*/
|
|
155
|
+
export function getCommitsAhead(baseBranch = DEFAULT_BASE_BRANCH, cwd) {
|
|
156
|
+
const remote = DEFAULT_REMOTE;
|
|
157
|
+
const baseRef = `${remote}/${baseBranch}`;
|
|
158
|
+
const result = execSafe(['rev-list', `${baseRef}..HEAD`, '--oneline'], { cwd });
|
|
159
|
+
if (!result) {
|
|
160
|
+
return [];
|
|
161
|
+
}
|
|
162
|
+
return result.split('\n').filter(Boolean);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get working tree status
|
|
166
|
+
*/
|
|
167
|
+
export function getWorkingTreeStatus(cwd) {
|
|
168
|
+
const status = exec(['status', '--porcelain'], { cwd, silent: true });
|
|
169
|
+
if (!status) {
|
|
170
|
+
return 'clean';
|
|
171
|
+
}
|
|
172
|
+
const lines = status.split('\n').filter(Boolean);
|
|
173
|
+
let hasStaged = false;
|
|
174
|
+
let hasUnstaged = false;
|
|
175
|
+
for (const line of lines) {
|
|
176
|
+
const indexStatus = line[0];
|
|
177
|
+
const worktreeStatus = line[1];
|
|
178
|
+
// Staged changes: first char is not ' ' or '?'
|
|
179
|
+
if (indexStatus !== ' ' && indexStatus !== '?') {
|
|
180
|
+
hasStaged = true;
|
|
181
|
+
}
|
|
182
|
+
// Unstaged changes: second char is not ' ' or untracked files
|
|
183
|
+
if (worktreeStatus !== ' ' || indexStatus === '?') {
|
|
184
|
+
hasUnstaged = true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (hasStaged && hasUnstaged) {
|
|
188
|
+
return 'both';
|
|
189
|
+
}
|
|
190
|
+
else if (hasStaged) {
|
|
191
|
+
return 'staged_only';
|
|
192
|
+
}
|
|
193
|
+
else if (hasUnstaged) {
|
|
194
|
+
return 'unstaged_only';
|
|
195
|
+
}
|
|
196
|
+
return 'clean';
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get staged files
|
|
200
|
+
*/
|
|
201
|
+
export function getStagedFiles(cwd) {
|
|
202
|
+
const result = execSafe(['diff', '--cached', '--name-only'], { cwd });
|
|
203
|
+
if (!result) {
|
|
204
|
+
return [];
|
|
205
|
+
}
|
|
206
|
+
return result.split('\n').filter(Boolean);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get unstaged files (modified + untracked)
|
|
210
|
+
*/
|
|
211
|
+
export function getUnstagedFiles(cwd) {
|
|
212
|
+
const status = exec(['status', '--porcelain'], { cwd, silent: true });
|
|
213
|
+
if (!status) {
|
|
214
|
+
return [];
|
|
215
|
+
}
|
|
216
|
+
const files = [];
|
|
217
|
+
const lines = status.split('\n').filter(Boolean);
|
|
218
|
+
for (const line of lines) {
|
|
219
|
+
const worktreeStatus = line[1];
|
|
220
|
+
const indexStatus = line[0];
|
|
221
|
+
// Unstaged changes or untracked files
|
|
222
|
+
if (worktreeStatus !== ' ' || indexStatus === '?') {
|
|
223
|
+
// Extract filename (starts at position 3)
|
|
224
|
+
files.push(line.substring(3));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return files;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get git status output (for display)
|
|
231
|
+
*/
|
|
232
|
+
export function getStatusOutput(cwd) {
|
|
233
|
+
return exec(['status', '--porcelain'], { cwd, silent: true });
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* List all worktrees
|
|
237
|
+
*/
|
|
238
|
+
export function listWorktrees(cwd) {
|
|
239
|
+
const result = exec(['worktree', 'list', '--porcelain'], { cwd, silent: true });
|
|
240
|
+
if (!result) {
|
|
241
|
+
return [];
|
|
242
|
+
}
|
|
243
|
+
const worktrees = [];
|
|
244
|
+
let current = {};
|
|
245
|
+
for (const line of result.split('\n')) {
|
|
246
|
+
if (line.startsWith('worktree ')) {
|
|
247
|
+
if (current.path) {
|
|
248
|
+
worktrees.push(current);
|
|
249
|
+
}
|
|
250
|
+
current = {
|
|
251
|
+
path: line.substring(9),
|
|
252
|
+
branch: null,
|
|
253
|
+
commit: '',
|
|
254
|
+
isMain: false,
|
|
255
|
+
isBare: false,
|
|
256
|
+
isLocked: false,
|
|
257
|
+
isPrunable: false,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
else if (line.startsWith('HEAD ')) {
|
|
261
|
+
current.commit = line.substring(5);
|
|
262
|
+
}
|
|
263
|
+
else if (line.startsWith('branch ')) {
|
|
264
|
+
// refs/heads/branch-name -> branch-name
|
|
265
|
+
current.branch = line.substring(7).replace('refs/heads/', '');
|
|
266
|
+
}
|
|
267
|
+
else if (line === 'bare') {
|
|
268
|
+
current.isBare = true;
|
|
269
|
+
current.isMain = true;
|
|
270
|
+
}
|
|
271
|
+
else if (line === 'locked') {
|
|
272
|
+
current.isLocked = true;
|
|
273
|
+
}
|
|
274
|
+
else if (line === 'prunable') {
|
|
275
|
+
current.isPrunable = true;
|
|
276
|
+
}
|
|
277
|
+
else if (line === '' && current.path) {
|
|
278
|
+
// Empty line marks end of entry
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Don't forget the last entry
|
|
282
|
+
if (current.path) {
|
|
283
|
+
worktrees.push(current);
|
|
284
|
+
}
|
|
285
|
+
// Mark the first non-bare worktree as main
|
|
286
|
+
const firstNonBare = worktrees.find((w) => !w.isBare);
|
|
287
|
+
if (firstNonBare) {
|
|
288
|
+
firstNonBare.isMain = true;
|
|
289
|
+
}
|
|
290
|
+
return worktrees;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Find the main worktree
|
|
294
|
+
*/
|
|
295
|
+
export function getMainWorktree(cwd) {
|
|
296
|
+
const worktrees = listWorktrees(cwd);
|
|
297
|
+
return worktrees.find((w) => w.isMain && !w.isBare) || null;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Check if current directory is a worktree (not main)
|
|
301
|
+
*/
|
|
302
|
+
export function isWorktree(cwd) {
|
|
303
|
+
const repoRoot = getRepoRoot(cwd);
|
|
304
|
+
const worktrees = listWorktrees(cwd);
|
|
305
|
+
const current = worktrees.find((w) => path.normalize(w.path) === path.normalize(repoRoot));
|
|
306
|
+
return current ? !current.isMain : false;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Add a new worktree
|
|
310
|
+
*/
|
|
311
|
+
export function addWorktree(worktreePath, branch, options = {}) {
|
|
312
|
+
const args = ['worktree', 'add'];
|
|
313
|
+
if (options.createBranch) {
|
|
314
|
+
args.push('-b', branch);
|
|
315
|
+
args.push(worktreePath);
|
|
316
|
+
if (options.startPoint) {
|
|
317
|
+
args.push(options.startPoint);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
args.push(worktreePath, branch);
|
|
322
|
+
}
|
|
323
|
+
exec(args, { cwd: options.cwd });
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Remove a worktree
|
|
327
|
+
*/
|
|
328
|
+
export function removeWorktree(worktreePath, options = {}) {
|
|
329
|
+
const args = ['worktree', 'remove'];
|
|
330
|
+
if (options.force) {
|
|
331
|
+
args.push('--force');
|
|
332
|
+
}
|
|
333
|
+
args.push(worktreePath);
|
|
334
|
+
exec(args, { cwd: options.cwd });
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Prune worktrees
|
|
338
|
+
*/
|
|
339
|
+
export function pruneWorktrees(cwd) {
|
|
340
|
+
exec(['worktree', 'prune'], { cwd });
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Create a new branch
|
|
344
|
+
*/
|
|
345
|
+
export function createBranch(name, startPoint, cwd) {
|
|
346
|
+
const args = ['branch', name];
|
|
347
|
+
if (startPoint) {
|
|
348
|
+
args.push(startPoint);
|
|
349
|
+
}
|
|
350
|
+
exec(args, { cwd });
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Delete a branch
|
|
354
|
+
*/
|
|
355
|
+
export function deleteBranch(name, options = {}) {
|
|
356
|
+
const flag = options.force ? '-D' : '-d';
|
|
357
|
+
exec(['branch', flag, name], { cwd: options.cwd });
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Checkout a branch or commit
|
|
361
|
+
*/
|
|
362
|
+
export function checkout(ref, cwd) {
|
|
363
|
+
exec(['checkout', ref], { cwd });
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Stage files
|
|
367
|
+
*/
|
|
368
|
+
export function add(paths = '.', cwd) {
|
|
369
|
+
const pathList = Array.isArray(paths) ? paths : [paths];
|
|
370
|
+
exec(['add', ...pathList], { cwd });
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Create a commit
|
|
374
|
+
*/
|
|
375
|
+
export function commit(options, cwd) {
|
|
376
|
+
const args = ['commit'];
|
|
377
|
+
if (options.all) {
|
|
378
|
+
args.push('-a');
|
|
379
|
+
}
|
|
380
|
+
if (options.allowEmpty) {
|
|
381
|
+
args.push('--allow-empty');
|
|
382
|
+
}
|
|
383
|
+
args.push('-m', options.message);
|
|
384
|
+
exec(args, { cwd });
|
|
385
|
+
// Return the new commit SHA
|
|
386
|
+
return getHeadCommit(cwd);
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Push to remote
|
|
390
|
+
*/
|
|
391
|
+
export function push(options = {}, cwd) {
|
|
392
|
+
const args = ['push'];
|
|
393
|
+
if (options.setUpstream) {
|
|
394
|
+
args.push('-u');
|
|
395
|
+
}
|
|
396
|
+
if (options.force) {
|
|
397
|
+
args.push('--force');
|
|
398
|
+
}
|
|
399
|
+
if (options.remote) {
|
|
400
|
+
args.push(options.remote);
|
|
401
|
+
}
|
|
402
|
+
if (options.branch) {
|
|
403
|
+
args.push(options.branch);
|
|
404
|
+
}
|
|
405
|
+
exec(args, { cwd });
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Stash changes
|
|
409
|
+
* Returns stash reference if created, null if nothing to stash
|
|
410
|
+
*/
|
|
411
|
+
export function stash(options = {}, cwd) {
|
|
412
|
+
const args = ['stash', 'push'];
|
|
413
|
+
if (options.keepIndex) {
|
|
414
|
+
args.push('--keep-index');
|
|
415
|
+
}
|
|
416
|
+
if (options.includeUntracked) {
|
|
417
|
+
args.push('--include-untracked');
|
|
418
|
+
}
|
|
419
|
+
if (options.message) {
|
|
420
|
+
args.push('-m', options.message);
|
|
421
|
+
}
|
|
422
|
+
const result = exec(args, { cwd });
|
|
423
|
+
// Check if anything was stashed
|
|
424
|
+
if (result.includes('No local changes to save')) {
|
|
425
|
+
return null;
|
|
426
|
+
}
|
|
427
|
+
// Return stash reference
|
|
428
|
+
return 'stash@{0}';
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Apply stashed changes
|
|
432
|
+
*/
|
|
433
|
+
export function stashApply(stashRef = 'stash@{0}', cwd) {
|
|
434
|
+
exec(['stash', 'apply', stashRef], { cwd });
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Drop a stash entry
|
|
438
|
+
*/
|
|
439
|
+
export function stashDrop(stashRef = 'stash@{0}', cwd) {
|
|
440
|
+
exec(['stash', 'drop', stashRef], { cwd });
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Pop stashed changes (apply + drop)
|
|
444
|
+
*/
|
|
445
|
+
export function stashPop(stashRef = 'stash@{0}', cwd) {
|
|
446
|
+
exec(['stash', 'pop', stashRef], { cwd });
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Get commit log
|
|
450
|
+
*/
|
|
451
|
+
export function getLog(range, options = {}) {
|
|
452
|
+
const args = ['log', '--oneline'];
|
|
453
|
+
if (options.format) {
|
|
454
|
+
args.push(`--format=${options.format}`);
|
|
455
|
+
}
|
|
456
|
+
if (options.maxCount) {
|
|
457
|
+
args.push(`-n${options.maxCount}`);
|
|
458
|
+
}
|
|
459
|
+
args.push(range);
|
|
460
|
+
const result = execSafe(args, { cwd: options.cwd });
|
|
461
|
+
if (!result) {
|
|
462
|
+
return [];
|
|
463
|
+
}
|
|
464
|
+
return result.split('\n').filter(Boolean);
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Check if a branch exists locally
|
|
468
|
+
*/
|
|
469
|
+
export function branchExists(name, cwd) {
|
|
470
|
+
const result = execSafe(['rev-parse', '--verify', `refs/heads/${name}`], { cwd });
|
|
471
|
+
return result !== null;
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Check if a branch exists on remote
|
|
475
|
+
*/
|
|
476
|
+
export function remoteBranchExists(name, remote = DEFAULT_REMOTE, cwd) {
|
|
477
|
+
const result = execSafe(['rev-parse', '--verify', `refs/remotes/${remote}/${name}`], { cwd });
|
|
478
|
+
return result !== null;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Check if git is installed and accessible
|
|
482
|
+
*/
|
|
483
|
+
export function checkGitInstalled() {
|
|
484
|
+
try {
|
|
485
|
+
execSync('git --version', { stdio: 'pipe' });
|
|
486
|
+
return true;
|
|
487
|
+
}
|
|
488
|
+
catch {
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Get the main worktree root (not the current worktree).
|
|
494
|
+
* Useful when you need to access files that should be in the main worktree
|
|
495
|
+
* regardless of which worktree you're currently in.
|
|
496
|
+
*/
|
|
497
|
+
export function getMainWorktreeRoot(cwd) {
|
|
498
|
+
// Get the common git directory (shared across all worktrees)
|
|
499
|
+
const commonDir = execSafe(['rev-parse', '--git-common-dir'], { cwd });
|
|
500
|
+
if (!commonDir) {
|
|
501
|
+
// Fallback to current repo root
|
|
502
|
+
return getRepoRoot(cwd);
|
|
503
|
+
}
|
|
504
|
+
const commonDirPath = path.resolve(commonDir);
|
|
505
|
+
// If git-common-dir returns ".git", we're in the main worktree
|
|
506
|
+
if (path.basename(commonDirPath) === '.git') {
|
|
507
|
+
return path.dirname(commonDirPath);
|
|
508
|
+
}
|
|
509
|
+
// Otherwise, we're in a linked worktree
|
|
510
|
+
// The common dir is like: /main-worktree/.git/worktrees/feature-branch
|
|
511
|
+
// We need to go up to .git, then to parent directory
|
|
512
|
+
const gitDir = commonDirPath.includes('/worktrees/') || commonDirPath.includes('\\worktrees\\')
|
|
513
|
+
? path.dirname(path.dirname(commonDirPath)) // .git/worktrees/name → .git
|
|
514
|
+
: commonDirPath;
|
|
515
|
+
return path.dirname(gitDir);
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Check if a file is ignored by git
|
|
519
|
+
*/
|
|
520
|
+
export function isGitIgnored(filePath, cwd) {
|
|
521
|
+
const result = execSafe(['check-ignore', filePath], { cwd });
|
|
522
|
+
return result !== null && result.trim().length > 0;
|
|
523
|
+
}
|
|
524
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.test.d.ts","sourceRoot":"","sources":["../../src/lib/git.test.ts"],"names":[],"mappings":""}
|