worktree-add 2.0.0 → 2.0.2
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/README.md +5 -2
- package/dist/cli/cleanup-worktree.d.ts +2 -1
- package/dist/cli/cleanup-worktree.d.ts.map +1 -1
- package/dist/cli/cleanup-worktree.js +51 -4
- package/dist/cli/cleanup-worktree.js.map +1 -1
- package/dist/cli/plan-branch-cleanup.d.ts +17 -0
- package/dist/cli/plan-branch-cleanup.d.ts.map +1 -0
- package/dist/cli/plan-branch-cleanup.js +19 -0
- package/dist/cli/plan-branch-cleanup.js.map +1 -0
- package/dist/cli/run-worktree-add.d.ts.map +1 -1
- package/dist/cli/run-worktree-add.js +4 -7
- package/dist/cli/run-worktree-add.js.map +1 -1
- package/dist/git/create-worktree.d.ts +15 -1
- package/dist/git/create-worktree.d.ts.map +1 -1
- package/dist/git/create-worktree.js +48 -33
- package/dist/git/create-worktree.js.map +1 -1
- package/dist/git/delete-created-branch.d.ts +3 -0
- package/dist/git/delete-created-branch.d.ts.map +1 -0
- package/dist/git/delete-created-branch.js +6 -0
- package/dist/git/delete-created-branch.js.map +1 -0
- package/dist/git/git.d.ts +3 -0
- package/dist/git/git.d.ts.map +1 -1
- package/dist/git/git.js +12 -0
- package/dist/git/git.js.map +1 -1
- package/dist/git/parse-branch-config.d.ts +4 -0
- package/dist/git/parse-branch-config.d.ts.map +1 -0
- package/dist/git/parse-branch-config.js +17 -0
- package/dist/git/parse-branch-config.js.map +1 -0
- package/dist/git/restore-branch-config.d.ts +3 -0
- package/dist/git/restore-branch-config.d.ts.map +1 -0
- package/dist/git/restore-branch-config.js +30 -0
- package/dist/git/restore-branch-config.js.map +1 -0
- package/dist/worktree/untracked-file-copy.d.ts.map +1 -1
- package/dist/worktree/untracked-file-copy.js +18 -0
- package/dist/worktree/untracked-file-copy.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -20,7 +20,8 @@ Running `worktree-add <branch>` from inside a repo:
|
|
|
20
20
|
- or creates a tracking branch from `origin/<branch>`
|
|
21
21
|
- or creates a new branch from the current `HEAD` (only when the branch does not exist on `origin/`, or when you pass `--offline` and `origin/` can’t be reached)
|
|
22
22
|
7. Copies untracked / ignored files into the new worktree, skipping heavy stuff
|
|
23
|
-
(`node_modules`, `dist`, `.next`, caches, virtualenvs, etc.)
|
|
23
|
+
(`node_modules`, `dist`, `.next`, caches, virtualenvs, etc.) and sockets and
|
|
24
|
+
FIFOs, which can't be copied.
|
|
24
25
|
8. Detects your package manager and installs dependencies with lockfile‑safe flags
|
|
25
26
|
(`npm ci`, `pnpm install --frozen-lockfile`, `yarn install --immutable`, etc.).
|
|
26
27
|
9. If the project uses Next.js and supports it, runs `next typegen`.
|
|
@@ -28,9 +29,11 @@ Running `worktree-add <branch>` from inside a repo:
|
|
|
28
29
|
|
|
29
30
|
Your original checkout is left untouched.
|
|
30
31
|
|
|
32
|
+
If a later step fails or you interrupt the run, the tool removes the new worktree. Once the worktree is removed, it also deletes the branch if this run created it (from `HEAD` or from `origin/<branch>`) and the branch still points at the commit it was created at. Its `branch.<branch>.*` config goes back to what it was before the run: the tracking settings the run added are removed, and any values you had set are kept. A branch that existed before the run, gained commits, or is checked out in another worktree is kept.
|
|
33
|
+
|
|
31
34
|
## Requirements
|
|
32
35
|
|
|
33
|
-
- Node.js ≥ 24.
|
|
36
|
+
- Node.js ≥ 24.15.0
|
|
34
37
|
- Git with `git worktree` support
|
|
35
38
|
- Git credentials configured for `origin/` (the tool is non-interactive and won’t prompt for authentication)
|
|
36
39
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { StatusLogger } from "../output/create-status-logger.js";
|
|
2
|
-
|
|
2
|
+
import type { CreatedWorktree } from "../git/create-worktree.js";
|
|
3
|
+
export declare function cleanupWorktree(worktree: CreatedWorktree, logger: StatusLogger, reason: string): void;
|
|
3
4
|
//# sourceMappingURL=cleanup-worktree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup-worktree.d.ts","sourceRoot":"","sources":["../../src/cli/cleanup-worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"cleanup-worktree.d.ts","sourceRoot":"","sources":["../../src/cli/cleanup-worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAiB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAkDhF,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GACb,IAAI,CAcN"}
|
|
@@ -1,12 +1,59 @@
|
|
|
1
|
+
import { deleteCreatedBranch } from "../git/delete-created-branch.js";
|
|
2
|
+
import { extractDiagnosticLine } from "../git/extract-diagnostic-line.js";
|
|
3
|
+
import { resolveCommit } from "../git/git.js";
|
|
1
4
|
import { removeWorktree } from "../git/remove-worktree.js";
|
|
2
|
-
|
|
3
|
-
|
|
5
|
+
import { restoreBranchConfig } from "../git/restore-branch-config.js";
|
|
6
|
+
import { findWorktreeByBranchName } from "../git/worktree-discovery.js";
|
|
7
|
+
import { planBranchCleanup } from "./plan-branch-cleanup.js";
|
|
8
|
+
function restoreCreatedBranchConfig(branch, logger) {
|
|
4
9
|
try {
|
|
5
|
-
|
|
10
|
+
restoreBranchConfig(branch.name, branch.preexistingConfig);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
const preexistingValues = branch.preexistingConfig.size === 0
|
|
14
|
+
? ""
|
|
15
|
+
: ` Its values before this run: ${JSON.stringify(Object.fromEntries(branch.preexistingConfig))}`;
|
|
16
|
+
logger.warn(`Failed to restore the config of branch '${branch.name}': ${extractDiagnosticLine(error)}.${preexistingValues}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function cleanupCreatedBranch(branch, logger) {
|
|
20
|
+
try {
|
|
21
|
+
const plan = planBranchCleanup({
|
|
22
|
+
createdBranch: branch,
|
|
23
|
+
currentCommit: resolveCommit(branch.ref),
|
|
24
|
+
checkedOutAt: findWorktreeByBranchName(branch.name),
|
|
25
|
+
});
|
|
26
|
+
switch (plan.action) {
|
|
27
|
+
case "delete": {
|
|
28
|
+
deleteCreatedBranch(branch);
|
|
29
|
+
logger.warn(`Deleted branch '${branch.name}', which this run created.`);
|
|
30
|
+
restoreCreatedBranchConfig(branch, logger);
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
case "keep": {
|
|
34
|
+
logger.warn(plan.message);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case "none": {
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
logger.warn(`Failed to delete branch '${branch.name}': ${extractDiagnosticLine(error)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function cleanupWorktree(worktree, logger, reason) {
|
|
47
|
+
logger.warn(`Cleaning up worktree at ${JSON.stringify(worktree.directory)} ${reason}.`);
|
|
48
|
+
try {
|
|
49
|
+
removeWorktree(worktree.directory);
|
|
6
50
|
}
|
|
7
51
|
catch (cleanupError) {
|
|
8
52
|
const cleanupMessage = cleanupError instanceof Error ? cleanupError.message : String(cleanupError);
|
|
9
|
-
logger.warn(`Failed to clean up worktree at ${JSON.stringify(
|
|
53
|
+
logger.warn(`Failed to clean up worktree at ${JSON.stringify(worktree.directory)}: ${cleanupMessage}`);
|
|
54
|
+
}
|
|
55
|
+
if (worktree.createdBranch !== undefined) {
|
|
56
|
+
cleanupCreatedBranch(worktree.createdBranch, logger);
|
|
10
57
|
}
|
|
11
58
|
}
|
|
12
59
|
//# sourceMappingURL=cleanup-worktree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup-worktree.js","sourceRoot":"","sources":["../../src/cli/cleanup-worktree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cleanup-worktree.js","sourceRoot":"","sources":["../../src/cli/cleanup-worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CreatedBranch } from "../git/create-worktree.js";
|
|
2
|
+
interface PlanBranchCleanupInput {
|
|
3
|
+
readonly createdBranch: CreatedBranch;
|
|
4
|
+
readonly currentCommit: string | undefined;
|
|
5
|
+
readonly checkedOutAt: string | undefined;
|
|
6
|
+
}
|
|
7
|
+
type BranchCleanupPlan = {
|
|
8
|
+
readonly action: "delete";
|
|
9
|
+
} | {
|
|
10
|
+
readonly action: "keep";
|
|
11
|
+
readonly message: string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly action: "none";
|
|
14
|
+
};
|
|
15
|
+
export declare function planBranchCleanup({ createdBranch, currentCommit, checkedOutAt, }: PlanBranchCleanupInput): BranchCleanupPlan;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=plan-branch-cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-branch-cleanup.d.ts","sourceRoot":"","sources":["../../src/cli/plan-branch-cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED,KAAK,iBAAiB,GAClB;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhC,wBAAgB,iBAAiB,CAAC,EAChC,aAAa,EACb,aAAa,EACb,YAAY,GACb,EAAE,sBAAsB,GAAG,iBAAiB,CAiB5C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function planBranchCleanup({ createdBranch, currentCommit, checkedOutAt, }) {
|
|
2
|
+
if (currentCommit === undefined) {
|
|
3
|
+
return { action: "none" };
|
|
4
|
+
}
|
|
5
|
+
if (checkedOutAt !== undefined) {
|
|
6
|
+
return {
|
|
7
|
+
action: "keep",
|
|
8
|
+
message: `Keeping branch '${createdBranch.name}' because it is checked out at ${JSON.stringify(checkedOutAt)}.`,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
if (currentCommit !== createdBranch.commit) {
|
|
12
|
+
return {
|
|
13
|
+
action: "keep",
|
|
14
|
+
message: `Keeping branch '${createdBranch.name}' because it no longer points at the commit this run created it at.`,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return { action: "delete" };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=plan-branch-cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-branch-cleanup.js","sourceRoot":"","sources":["../../src/cli/plan-branch-cleanup.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,iBAAiB,CAAC,EAChC,aAAa,EACb,aAAa,EACb,YAAY,GACW;IACvB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,mBAAmB,aAAa,CAAC,IAAI,kCAAkC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG;SAChH,CAAC;IACJ,CAAC;IACD,IAAI,aAAa,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;QAC3C,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,mBAAmB,aAAa,CAAC,IAAI,qEAAqE;SACpH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-worktree-add.d.ts","sourceRoot":"","sources":["../../src/cli/run-worktree-add.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-worktree-add.d.ts","sourceRoot":"","sources":["../../src/cli/run-worktree-add.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAqG1F"}
|
|
@@ -22,12 +22,12 @@ export async function runWorktreeAdd(branchRaw, options) {
|
|
|
22
22
|
const interactive = options.interactive ?? false;
|
|
23
23
|
const assumeYes = options.yes ?? false;
|
|
24
24
|
const context = resolveWorktreeContext(branchRaw);
|
|
25
|
-
let
|
|
25
|
+
let createdWorktree;
|
|
26
26
|
const cleanupIfNeeded = (reason) => {
|
|
27
|
-
if (
|
|
27
|
+
if (createdWorktree === undefined) {
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
|
-
cleanupWorktree(
|
|
30
|
+
cleanupWorktree(createdWorktree, logger, reason);
|
|
31
31
|
};
|
|
32
32
|
const unregisterSigintHandler = registerSigintHandler({
|
|
33
33
|
destinationDirectory: context.destinationDirectory,
|
|
@@ -74,14 +74,11 @@ export async function runWorktreeAdd(branchRaw, options) {
|
|
|
74
74
|
}
|
|
75
75
|
// Only treat origin as existing when confirmed; "unknown" remains false.
|
|
76
76
|
const remoteBranchExists = remoteStatus.status === "exists";
|
|
77
|
-
createWorktree(context.branch, context.destinationDirectory, {
|
|
77
|
+
createdWorktree = createWorktree(context.branch, context.destinationDirectory, {
|
|
78
78
|
remoteBranchExists,
|
|
79
79
|
dryRun,
|
|
80
80
|
logger,
|
|
81
81
|
});
|
|
82
|
-
if (!dryRun) {
|
|
83
|
-
worktreeCreated = true;
|
|
84
|
-
}
|
|
85
82
|
await copyUntrackedFiles(context.repoRoot, context.destinationDirectory, {
|
|
86
83
|
dryRun,
|
|
87
84
|
logger,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-worktree-add.js","sourceRoot":"","sources":["../../src/cli/run-worktree-add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"run-worktree-add.js","sourceRoot":"","sources":["../../src/cli/run-worktree-add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import type { StatusLogger } from "../output/create-status-logger.js";
|
|
2
|
+
import type { BranchConfig } from "./parse-branch-config.js";
|
|
3
|
+
export interface CreatedBranch {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly ref: string;
|
|
6
|
+
readonly commit: string;
|
|
7
|
+
/** `git worktree add -b` keeps `branch.<name>.*` config that predates the branch. */
|
|
8
|
+
readonly preexistingConfig: BranchConfig;
|
|
9
|
+
}
|
|
10
|
+
export interface CreatedWorktree {
|
|
11
|
+
readonly directory: string;
|
|
12
|
+
/** Undefined unless this run created the branch and it still sat at its start point. */
|
|
13
|
+
readonly createdBranch: CreatedBranch | undefined;
|
|
14
|
+
}
|
|
15
|
+
/** Returns what was created, or undefined on a dry run. */
|
|
2
16
|
export declare function createWorktree(branch: string, destinationDirectory: string, options?: {
|
|
3
17
|
remoteBranchExists?: boolean;
|
|
4
18
|
dryRun?: boolean;
|
|
5
19
|
logger?: StatusLogger;
|
|
6
|
-
}):
|
|
20
|
+
}): CreatedWorktree | undefined;
|
|
7
21
|
//# sourceMappingURL=create-worktree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-worktree.d.ts","sourceRoot":"","sources":["../../src/git/create-worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"create-worktree.d.ts","sourceRoot":"","sources":["../../src/git/create-worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAUtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,QAAQ,CAAC,iBAAiB,EAAE,YAAY,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;CACnD;AAuDD,2DAA2D;AAC3D,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE;IACR,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,GACA,eAAe,GAAG,SAAS,CA+B7B"}
|
|
@@ -1,25 +1,14 @@
|
|
|
1
1
|
import { fallbackStatusLogger } from "../output/create-status-logger.js";
|
|
2
|
-
import { git, localBranchExists, normalizeBranchName, remoteBranchExists } from "./git.js";
|
|
2
|
+
import { git, localBranchExists, normalizeBranchName, readBranchConfig, remoteBranchExists, resolveCommit, } from "./git.js";
|
|
3
3
|
import { extractDiagnosticLine } from "./extract-diagnostic-line.js";
|
|
4
|
-
|
|
5
|
-
options.logger.step(`${options.dryRun ? "Would run " : ""}git ${args.join(" ")}`);
|
|
6
|
-
if (options.dryRun) {
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
git(...args);
|
|
10
|
-
};
|
|
11
|
-
export function createWorktree(branch, destinationDirectory, options) {
|
|
12
|
-
const logger = options?.logger ?? fallbackStatusLogger;
|
|
13
|
-
const dryRun = options?.dryRun ?? false;
|
|
14
|
-
const normalized = normalizeBranchName(branch);
|
|
4
|
+
function selectWorktreeAddCommand(normalized, destinationDirectory, remoteBranchExistsHint) {
|
|
15
5
|
if (localBranchExists(normalized)) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
return;
|
|
6
|
+
return {
|
|
7
|
+
args: ["worktree", "add", "--", destinationDirectory, `refs/heads/${normalized}`],
|
|
8
|
+
newBranchStartPoint: undefined,
|
|
9
|
+
};
|
|
21
10
|
}
|
|
22
|
-
let branchExistsOnOrigin =
|
|
11
|
+
let branchExistsOnOrigin = remoteBranchExistsHint;
|
|
23
12
|
if (branchExistsOnOrigin === undefined) {
|
|
24
13
|
try {
|
|
25
14
|
branchExistsOnOrigin = remoteBranchExists(normalized);
|
|
@@ -30,21 +19,47 @@ export function createWorktree(branch, destinationDirectory, options) {
|
|
|
30
19
|
}
|
|
31
20
|
}
|
|
32
21
|
if (branchExistsOnOrigin) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
22
|
+
return {
|
|
23
|
+
args: [
|
|
24
|
+
"worktree",
|
|
25
|
+
"add",
|
|
26
|
+
"--track",
|
|
27
|
+
"-b",
|
|
28
|
+
normalized,
|
|
29
|
+
"--",
|
|
30
|
+
destinationDirectory,
|
|
31
|
+
`origin/${normalized}`,
|
|
32
|
+
],
|
|
33
|
+
newBranchStartPoint: `refs/remotes/origin/${normalized}`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
args: ["worktree", "add", "-b", normalized, "--", destinationDirectory],
|
|
38
|
+
newBranchStartPoint: "HEAD",
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Returns what was created, or undefined on a dry run. */
|
|
42
|
+
export function createWorktree(branch, destinationDirectory, options) {
|
|
43
|
+
const logger = options?.logger ?? fallbackStatusLogger;
|
|
44
|
+
const dryRun = options?.dryRun ?? false;
|
|
45
|
+
const normalized = normalizeBranchName(branch);
|
|
46
|
+
const command = selectWorktreeAddCommand(normalized, destinationDirectory, options?.remoteBranchExists);
|
|
47
|
+
logger.step(`${dryRun ? "Would run " : ""}git ${command.args.join(" ")}`);
|
|
48
|
+
if (dryRun) {
|
|
49
|
+
return undefined;
|
|
44
50
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
// Resolved before the add: a post-checkout hook can commit onto the new branch during it.
|
|
52
|
+
const startCommit = command.newBranchStartPoint === undefined
|
|
53
|
+
? undefined
|
|
54
|
+
: resolveCommit(command.newBranchStartPoint);
|
|
55
|
+
const preexistingConfig = startCommit === undefined ? new Map() : readBranchConfig(normalized);
|
|
56
|
+
git(...command.args);
|
|
57
|
+
const ref = `refs/heads/${normalized}`;
|
|
58
|
+
return {
|
|
59
|
+
directory: destinationDirectory,
|
|
60
|
+
createdBranch: startCommit !== undefined && resolveCommit(ref) === startCommit
|
|
61
|
+
? { name: normalized, ref, commit: startCommit, preexistingConfig }
|
|
62
|
+
: undefined,
|
|
63
|
+
};
|
|
49
64
|
}
|
|
50
65
|
//# sourceMappingURL=create-worktree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-worktree.js","sourceRoot":"","sources":["../../src/git/create-worktree.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"create-worktree.js","sourceRoot":"","sources":["../../src/git/create-worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-created-branch.d.ts","sourceRoot":"","sources":["../../src/git/delete-created-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAG/D"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { git } from "./git.js";
|
|
2
|
+
export function deleteCreatedBranch(branch) {
|
|
3
|
+
// The expected old value makes the delete fail if the branch moved after it was read.
|
|
4
|
+
git("update-ref", "-d", branch.ref, branch.commit);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=delete-created-branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-created-branch.js","sourceRoot":"","sources":["../../src/git/delete-created-branch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,UAAU,mBAAmB,CAAC,MAAqB;IACvD,sFAAsF;IACtF,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/git/git.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BranchConfig } from "./parse-branch-config.js";
|
|
1
2
|
export declare function git(...arguments_: [...string[], {
|
|
2
3
|
cwd?: string;
|
|
3
4
|
}] | string[]): string;
|
|
@@ -5,6 +6,8 @@ export declare function normalizeBranchName(name: string): string;
|
|
|
5
6
|
export declare function localBranchExists(branch: string): boolean;
|
|
6
7
|
export declare function remoteBranchExists(branch: string): boolean;
|
|
7
8
|
export declare function fetchOriginBranch(branch: string): void;
|
|
9
|
+
export declare function resolveCommit(revision: string): string | undefined;
|
|
10
|
+
export declare function readBranchConfig(branchName: string): BranchConfig;
|
|
8
11
|
export declare function getLocalBranchHead(branch: string): string | undefined;
|
|
9
12
|
export declare function getRemoteBranchHead(branch: string): string | undefined;
|
|
10
13
|
export declare function getAheadBehindCounts(localHead: string, remoteHead: string): {
|
package/dist/git/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/git/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/git/git.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,wBAAgB,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CA0BrF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAQzD;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAK1D;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAItD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMlE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAEjE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOrE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOtE;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CASnC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOvD;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAItD;AAeD,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI/D"}
|
package/dist/git/git.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
import * as fs from "node:fs/promises";
|
|
3
3
|
import * as readline from "node:readline/promises";
|
|
4
|
+
import { parseBranchConfig } from "./parse-branch-config.js";
|
|
4
5
|
export function git(...arguments_) {
|
|
5
6
|
let cwd;
|
|
6
7
|
let gitArguments;
|
|
@@ -58,6 +59,17 @@ export function fetchOriginBranch(branch) {
|
|
|
58
59
|
const refspec = `+refs/heads/${normalized}:refs/remotes/origin/${normalized}`;
|
|
59
60
|
git("fetch", "origin", "--", refspec);
|
|
60
61
|
}
|
|
62
|
+
export function resolveCommit(revision) {
|
|
63
|
+
try {
|
|
64
|
+
return git("rev-parse", "--verify", "--quiet", `${revision}^{commit}`);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function readBranchConfig(branchName) {
|
|
71
|
+
return parseBranchConfig(git("config", "--local", "--null", "--list"), branchName);
|
|
72
|
+
}
|
|
61
73
|
export function getLocalBranchHead(branch) {
|
|
62
74
|
try {
|
|
63
75
|
const normalized = normalizeBranchName(branch);
|
package/dist/git/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/git/git.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/git/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Values per `branch.<name>.<variable>` key, in file order. */
|
|
2
|
+
export type BranchConfig = ReadonlyMap<string, readonly string[]>;
|
|
3
|
+
export declare function parseBranchConfig(nullListOutput: string, branchName: string): BranchConfig;
|
|
4
|
+
//# sourceMappingURL=parse-branch-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-branch-config.d.ts","sourceRoot":"","sources":["../../src/git/parse-branch-config.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAe1F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function parseBranchConfig(nullListOutput, branchName) {
|
|
2
|
+
const prefix = `branch.${branchName}.`;
|
|
3
|
+
const config = new Map();
|
|
4
|
+
for (const entry of nullListOutput.split("\0")) {
|
|
5
|
+
const newline = entry.indexOf("\n");
|
|
6
|
+
const key = newline === -1 ? entry : entry.slice(0, newline);
|
|
7
|
+
// Variable names contain no dot, so a dotted remainder belongs to a longer branch name.
|
|
8
|
+
if (!key.startsWith(prefix) || key.slice(prefix.length).includes(".")) {
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
// A key written without `=` is an implicit boolean true.
|
|
12
|
+
const value = newline === -1 ? "true" : entry.slice(newline + 1);
|
|
13
|
+
config.set(key, [...(config.get(key) ?? []), value]);
|
|
14
|
+
}
|
|
15
|
+
return config;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=parse-branch-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-branch-config.js","sourceRoot":"","sources":["../../src/git/parse-branch-config.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,iBAAiB,CAAC,cAAsB,EAAE,UAAkB;IAC1E,MAAM,MAAM,GAAG,UAAU,UAAU,GAAG,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7D,wFAAwF;QACxF,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtE,SAAS;QACX,CAAC;QACD,yDAAyD;QACzD,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore-branch-config.d.ts","sourceRoot":"","sources":["../../src/git/restore-branch-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY,GAAG,IAAI,CA0B7F"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from "node:util";
|
|
2
|
+
import { git, readBranchConfig } from "./git.js";
|
|
3
|
+
export function restoreBranchConfig(branchName, preexistingConfig) {
|
|
4
|
+
const currentConfig = readBranchConfig(branchName);
|
|
5
|
+
if (preexistingConfig.size === 0) {
|
|
6
|
+
if (currentConfig.size > 0) {
|
|
7
|
+
// The same removal `git branch -D` performs.
|
|
8
|
+
git("config", "--local", "--remove-section", `branch.${branchName}`);
|
|
9
|
+
}
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
// `--track` replaces or appends to tracking keys that predate the branch.
|
|
13
|
+
for (const key of new Set([...currentConfig.keys(), ...preexistingConfig.keys()])) {
|
|
14
|
+
const preexistingValues = preexistingConfig.get(key) ?? [];
|
|
15
|
+
if (isDeepStrictEqual(currentConfig.get(key) ?? [], preexistingValues)) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const [firstValue, ...otherValues] = preexistingValues;
|
|
19
|
+
if (firstValue === undefined) {
|
|
20
|
+
git("config", "--local", "--unset-all", key);
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
// `--replace-all` swaps the values in one write, so a failure never leaves the key unset.
|
|
24
|
+
git("config", "--local", "--replace-all", key, firstValue);
|
|
25
|
+
for (const value of otherValues) {
|
|
26
|
+
git("config", "--local", "--add", key, value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=restore-branch-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore-branch-config.js","sourceRoot":"","sources":["../../src/git/restore-branch-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,iBAA+B;IACrF,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,iBAAiB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,6CAA6C;YAC7C,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,UAAU,UAAU,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO;IACT,CAAC;IACD,0EAA0E;IAC1E,KAAK,MAAM,GAAG,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,iBAAiB,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACvE,SAAS;QACX,CAAC;QACD,MAAM,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,GAAG,iBAAiB,CAAC;QACvD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,0FAA0F;QAC1F,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"untracked-file-copy.d.ts","sourceRoot":"","sources":["../../src/worktree/untracked-file-copy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"untracked-file-copy.d.ts","sourceRoot":"","sources":["../../src/worktree/untracked-file-copy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAkBtE,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAE,GACpD,OAAO,CAAC,IAAI,CAAC,CA6Ff"}
|
|
@@ -5,6 +5,16 @@ import { git } from "../git/git.js";
|
|
|
5
5
|
import { fallbackStatusLogger } from "../output/create-status-logger.js";
|
|
6
6
|
import { isGeneratedPath } from "./is-generated-path.js";
|
|
7
7
|
const hasErrorCode = (error, ...codes) => error instanceof Error && "code" in error && codes.includes(String(error.code));
|
|
8
|
+
// Nested clones are copied whole, and fs.cp throws on their sockets (Git's fsmonitor) and FIFOs.
|
|
9
|
+
function describeUncopyableFile(stats) {
|
|
10
|
+
if (stats.isSocket()) {
|
|
11
|
+
return "socket";
|
|
12
|
+
}
|
|
13
|
+
if (stats.isFIFO()) {
|
|
14
|
+
return "FIFO";
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
8
18
|
export async function copyUntrackedFiles(repoRoot, destinationDirectory, options) {
|
|
9
19
|
const logger = options?.logger ?? fallbackStatusLogger;
|
|
10
20
|
const dryRun = options?.dryRun ?? false;
|
|
@@ -64,6 +74,14 @@ export async function copyUntrackedFiles(repoRoot, destinationDirectory, options
|
|
|
64
74
|
force: false,
|
|
65
75
|
mode: constants.COPYFILE_EXCL,
|
|
66
76
|
verbatimSymlinks: true,
|
|
77
|
+
filter: async (source) => {
|
|
78
|
+
const uncopyableFile = describeUncopyableFile(await fs.lstat(source));
|
|
79
|
+
if (uncopyableFile === undefined) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
logger.detail(`Skipped ${path.relative(repoRoot, source)} (${uncopyableFile}).`);
|
|
83
|
+
return false;
|
|
84
|
+
},
|
|
67
85
|
});
|
|
68
86
|
}
|
|
69
87
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"untracked-file-copy.js","sourceRoot":"","sources":["../../src/worktree/untracked-file-copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"untracked-file-copy.js","sourceRoot":"","sources":["../../src/worktree/untracked-file-copy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "worktree-add",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Create a Git worktree next to your current repo for a branch, copy useful local files, install deps, and open it in your apps.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@j4k/oxlint-config": "^2.11.0",
|
|
62
62
|
"@total-typescript/ts-reset": "^0.6.1",
|
|
63
|
-
"@types/node": "^
|
|
63
|
+
"@types/node": "^24.0.0",
|
|
64
64
|
"@vitest/coverage-v8": "^4.1.8",
|
|
65
65
|
"conventional-changelog-conventionalcommits": "^9.3.1",
|
|
66
66
|
"fta-check": "^1.5.4",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"vitest": "^4.1.8"
|
|
75
75
|
},
|
|
76
76
|
"engines": {
|
|
77
|
-
"node": ">=24.
|
|
77
|
+
"node": ">=24.15.0"
|
|
78
78
|
},
|
|
79
79
|
"packageManager": "pnpm@11.22.0"
|
|
80
80
|
}
|