@monotykamary/localterm-server 2.27.0 → 2.27.1
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":"worktree-sweep.d.ts","sourceRoot":"","sources":["../../src/utils/worktree-sweep.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree-sweep.d.ts","sourceRoot":"","sources":["../../src/utils/worktree-sweep.ts"],"names":[],"mappings":"AAiEA,eAAO,MAAM,mBAAmB,GAC9B,KAAK,MAAM,EACX,MAAK,MAAmB,EACxB,iBAAgB,CAAC,YAAY,EAAE,MAAM,KAAK,OAAqB,KAC9D,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAkC/B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { WORKTREE_SWEEP_BATCH_LIMIT, WORKTREE_SWEEP_MAX_AGE_DAYS } from "../constants.js";
|
|
3
|
+
import { WORKTREE_SWEEP_BATCH_LIMIT, WORKTREE_SWEEP_MAX_AGE_DAYS, REPO_MARKER_FILENAME, } from "../constants.js";
|
|
4
4
|
import { WORKTREES_PARENT_DIR, listGitWorktrees } from "../git-worktrees.js";
|
|
5
5
|
import { runGit } from "./run-git.js";
|
|
6
6
|
const MS_PER_DAY_MS = 24 * 60 * 60 * 1000;
|
|
@@ -31,12 +31,33 @@ const worktreeAgeMs = (worktreePath, now) => {
|
|
|
31
31
|
return null;
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
+
// After a worktree is removed its project folder may be left holding only the
|
|
35
|
+
// repo-id marker — the sweep just took the last worktree, so the folder is dead
|
|
36
|
+
// weight. Reap it, but only when nothing else remains: a kept sibling worktree
|
|
37
|
+
// or any file the user dropped in must never be deleted. The folder is always
|
|
38
|
+
// this repo's own project folder (the parent of an auto-created worktree), so
|
|
39
|
+
// there's no cross-repo risk.
|
|
40
|
+
const reapEmptyProjectFolder = (worktreePath) => {
|
|
41
|
+
const projectFolder = path.dirname(worktreePath);
|
|
42
|
+
if (projectFolder === WORKTREES_PARENT_DIR)
|
|
43
|
+
return;
|
|
44
|
+
let entries;
|
|
45
|
+
try {
|
|
46
|
+
entries = fs.readdirSync(projectFolder);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (!entries.every((entry) => entry === REPO_MARKER_FILENAME))
|
|
52
|
+
return;
|
|
53
|
+
fs.rmSync(projectFolder, { recursive: true, force: true });
|
|
54
|
+
};
|
|
34
55
|
// Removes stale, clean, auto-created worktrees so the shared worktrees dir
|
|
35
56
|
// doesn't accumulate orphans. Returns the paths actually removed. The current
|
|
36
57
|
// and main worktrees are never eligible; a dirty, too-new, or shell-occupied
|
|
37
58
|
// worktree is skipped silently. Never throws — a worktree that fails to remove
|
|
38
59
|
// is simply not in the returned list, so a sweep never breaks the list view
|
|
39
|
-
// that triggered it.
|
|
60
|
+
// that triggered it. A project folder emptied by the sweep is reaped too.
|
|
40
61
|
export const sweepStaleWorktrees = async (cwd, now = Date.now(), isWorktreeBusy = () => false) => {
|
|
41
62
|
const cutoff = WORKTREE_SWEEP_MAX_AGE_DAYS * MS_PER_DAY_MS;
|
|
42
63
|
let worktrees;
|
|
@@ -66,8 +87,10 @@ export const sweepStaleWorktrees = async (cwd, now = Date.now(), isWorktreeBusy
|
|
|
66
87
|
if (!(await isClean(worktree.path)))
|
|
67
88
|
continue;
|
|
68
89
|
const result = await runGit(cwd, ["worktree", "remove", worktree.path]);
|
|
69
|
-
if (result.exitCode === 0)
|
|
90
|
+
if (result.exitCode === 0) {
|
|
70
91
|
removed.push(worktree.path);
|
|
92
|
+
reapEmptyProjectFolder(worktree.path);
|
|
93
|
+
}
|
|
71
94
|
}
|
|
72
95
|
return { removed };
|
|
73
96
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-sweep.js","sourceRoot":"","sources":["../../src/utils/worktree-sweep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"worktree-sweep.js","sourceRoot":"","sources":["../../src/utils/worktree-sweep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C,yEAAyE;AACzE,gFAAgF;AAChF,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,0EAA0E;AAC1E,MAAM,aAAa,GAAG,CAAC,YAAoB,EAAW,EAAE;IACtD,MAAM,mBAAmB,GAAG,GAAG,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjE,OAAO,YAAY,KAAK,oBAAoB,IAAI,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,EAAE,YAAoB,EAAoB,EAAE;IAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9E,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,YAAoB,EAAE,GAAW,EAAiB,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvC,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,8BAA8B;AAC9B,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAAQ,EAAE;IAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,aAAa,KAAK,oBAAoB;QAAE,OAAO;IACnD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,oBAAoB,CAAC;QAAE,OAAO;IACtE,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,GAAW,EACX,MAAc,IAAI,CAAC,GAAG,EAAE,EACxB,iBAAoD,GAAG,EAAE,CAAC,KAAK,EAC/B,EAAE;IAClC,MAAM,MAAM,GAAG,2BAA2B,GAAG,aAAa,CAAC;IAE3D,IAAI,SAAS,CAAC;IACd,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACzC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,IAAI,0BAA0B;YAAE,MAAM;QACxD,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,SAAS;YAAE,SAAS;QACpD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAE5C,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,MAAM;YAAE,SAAS;QAE3C,wEAAwE;QACxE,uEAAuE;QACvE,kCAAkC;QAClC,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAE5C,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAE,SAAS;QAE9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5B,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC"}
|