@mcadam/worktree 1.2.0 → 1.3.0
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAuGA,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAuGA,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FlF"}
|
package/dist/commands/create.js
CHANGED
|
@@ -5,7 +5,7 @@ import { execa } from 'execa';
|
|
|
5
5
|
import fs from 'fs-extra';
|
|
6
6
|
import ora from 'ora';
|
|
7
7
|
import { configManager } from '../config/manager.js';
|
|
8
|
-
import { createWorktree } from '../utils/git.js';
|
|
8
|
+
import { createWorktree, setupSubmodulesForBranch } from '../utils/git.js';
|
|
9
9
|
import { createWorktreeName } from '../utils/sanitize.js';
|
|
10
10
|
import { initCommand } from './init.js';
|
|
11
11
|
async function isWorktreeClean(gitRoot) {
|
|
@@ -106,6 +106,14 @@ export async function createCommand(branch, gitRoot) {
|
|
|
106
106
|
spinner.start('Creating worktree...');
|
|
107
107
|
await createWorktree(config.basePath, worktreeName, branch, gitRoot);
|
|
108
108
|
spinner.succeed('Worktree created');
|
|
109
|
+
spinner.start('Setting up submodules...');
|
|
110
|
+
const submodulePaths = await setupSubmodulesForBranch(worktreePath, branch);
|
|
111
|
+
if (submodulePaths.length > 0) {
|
|
112
|
+
spinner.succeed(`Set up ${submodulePaths.length} submodule${submodulePaths.length === 1 ? '' : 's'}`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
spinner.info('No submodules found');
|
|
116
|
+
}
|
|
109
117
|
// Copy .env file if configured
|
|
110
118
|
if (config.envPath) {
|
|
111
119
|
spinner.start('Copying environment file...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/git.d.ts
CHANGED
|
@@ -10,6 +10,9 @@ export interface Worktree {
|
|
|
10
10
|
isPRMerged?: boolean;
|
|
11
11
|
}
|
|
12
12
|
export declare function createWorktree(basePath: string, worktreeName: string, branchName: string, gitRoot: string): Promise<void>;
|
|
13
|
+
export declare function checkoutBranch(branchName: string, gitRoot: string): Promise<void>;
|
|
14
|
+
export declare function listSubmodulePaths(gitRoot: string): Promise<string[]>;
|
|
15
|
+
export declare function setupSubmodulesForBranch(gitRoot: string, branchName: string): Promise<string[]>;
|
|
13
16
|
export declare function listWorktrees(gitRoot: string): Promise<Worktree[]>;
|
|
14
17
|
export declare function removeWorktree(worktreePath: string, gitRoot: string): Promise<void>;
|
|
15
18
|
export declare function getAllBranches(gitRoot: string): Promise<string[]>;
|
package/dist/utils/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAiBD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BvF;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgB3E;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAwBnB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAqDxE;AAED,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzF;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASvE"}
|
package/dist/utils/git.js
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { execa } from 'execa';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
async function fetchRemoteBranch(branchName, gitRoot) {
|
|
5
|
+
await execa('git', ['fetch', 'origin', `${branchName}:refs/remotes/origin/${branchName}`], {
|
|
6
|
+
cwd: gitRoot,
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
async function hasLocalBranch(branchName, gitRoot) {
|
|
6
10
|
try {
|
|
7
|
-
await execa('git', ['rev-parse', '--verify', branchName], { cwd: gitRoot });
|
|
11
|
+
await execa('git', ['rev-parse', '--verify', `refs/heads/${branchName}`], { cwd: gitRoot });
|
|
12
|
+
return true;
|
|
8
13
|
}
|
|
9
14
|
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function createWorktree(basePath, worktreeName, branchName, gitRoot) {
|
|
19
|
+
const worktreePath = path.join(basePath, worktreeName);
|
|
20
|
+
if (!(await hasLocalBranch(branchName, gitRoot))) {
|
|
10
21
|
// Branch doesn't exist locally, check remote
|
|
11
22
|
try {
|
|
12
|
-
await
|
|
13
|
-
await execa('git', ['worktree', 'add', worktreePath, `origin/${branchName}`], {
|
|
23
|
+
await fetchRemoteBranch(branchName, gitRoot);
|
|
24
|
+
await execa('git', ['worktree', 'add', '-b', branchName, worktreePath, `origin/${branchName}`], {
|
|
14
25
|
cwd: gitRoot,
|
|
15
26
|
});
|
|
16
27
|
return;
|
|
@@ -24,6 +35,56 @@ export async function createWorktree(basePath, worktreeName, branchName, gitRoot
|
|
|
24
35
|
// Branch exists locally
|
|
25
36
|
await execa('git', ['worktree', 'add', worktreePath, branchName], { cwd: gitRoot });
|
|
26
37
|
}
|
|
38
|
+
export async function checkoutBranch(branchName, gitRoot) {
|
|
39
|
+
let hasRemoteBranch = false;
|
|
40
|
+
try {
|
|
41
|
+
await fetchRemoteBranch(branchName, gitRoot);
|
|
42
|
+
hasRemoteBranch = true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// The submodule may not have a same-named remote branch; fall back to local/current commit.
|
|
46
|
+
}
|
|
47
|
+
if (await hasLocalBranch(branchName, gitRoot)) {
|
|
48
|
+
await execa('git', ['checkout', branchName], { cwd: gitRoot });
|
|
49
|
+
if (hasRemoteBranch) {
|
|
50
|
+
await execa('git', ['pull', '--ff-only', 'origin', branchName], { cwd: gitRoot });
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (hasRemoteBranch) {
|
|
55
|
+
await execa('git', ['checkout', '-b', branchName, `origin/${branchName}`], { cwd: gitRoot });
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Create new branch from the currently checked-out commit
|
|
59
|
+
await execa('git', ['checkout', '-b', branchName], { cwd: gitRoot });
|
|
60
|
+
}
|
|
61
|
+
export async function listSubmodulePaths(gitRoot) {
|
|
62
|
+
const gitmodulesPath = path.join(gitRoot, '.gitmodules');
|
|
63
|
+
if (!(await fs.pathExists(gitmodulesPath))) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
const { stdout } = await execa('git', ['config', '--file', '.gitmodules', '--get-regexp', 'path'], { cwd: gitRoot });
|
|
67
|
+
return stdout
|
|
68
|
+
.split('\n')
|
|
69
|
+
.map((line) => line.trim().match(/^[^\s]+\s+(.+)$/)?.[1])
|
|
70
|
+
.filter((submodulePath) => Boolean(submodulePath));
|
|
71
|
+
}
|
|
72
|
+
export async function setupSubmodulesForBranch(gitRoot, branchName) {
|
|
73
|
+
const submodulePaths = await listSubmodulePaths(gitRoot);
|
|
74
|
+
if (submodulePaths.length === 0) {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
await execa('git', ['submodule', 'update', '--init', '--recursive'], { cwd: gitRoot });
|
|
78
|
+
const checkedOutSubmodulePaths = [];
|
|
79
|
+
for (const submodulePath of submodulePaths) {
|
|
80
|
+
const absoluteSubmodulePath = path.resolve(gitRoot, submodulePath);
|
|
81
|
+
await checkoutBranch(branchName, absoluteSubmodulePath);
|
|
82
|
+
checkedOutSubmodulePaths.push(submodulePath);
|
|
83
|
+
const nestedSubmodulePaths = await setupSubmodulesForBranch(absoluteSubmodulePath, branchName);
|
|
84
|
+
checkedOutSubmodulePaths.push(...nestedSubmodulePaths.map((nestedSubmodulePath) => path.join(submodulePath, nestedSubmodulePath)));
|
|
85
|
+
}
|
|
86
|
+
return checkedOutSubmodulePaths;
|
|
87
|
+
}
|
|
27
88
|
export async function listWorktrees(gitRoot) {
|
|
28
89
|
try {
|
|
29
90
|
const { stdout } = await execa('git', ['worktree', 'list', '--porcelain'], { cwd: gitRoot });
|
package/dist/utils/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcadam/worktree",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "A CLI tool for managing Git worktrees across multiple repositories",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"type": "module",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"engines": {
|
|
62
62
|
"node": ">=18.0.0"
|
|
63
63
|
},
|
|
64
|
-
"packageManager": "pnpm@
|
|
64
|
+
"packageManager": "pnpm@11.1.3",
|
|
65
65
|
"files": [
|
|
66
66
|
"dist",
|
|
67
67
|
"bin"
|