sync-worktrees 1.7.4 → 1.7.5

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.
Files changed (31) hide show
  1. package/dist/constants.d.ts +54 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +66 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/errors/index.d.ts +51 -0
  6. package/dist/errors/index.d.ts.map +1 -0
  7. package/dist/errors/index.js +119 -0
  8. package/dist/errors/index.js.map +1 -0
  9. package/dist/services/git.service.d.ts.map +1 -1
  10. package/dist/services/git.service.js +49 -40
  11. package/dist/services/git.service.js.map +1 -1
  12. package/dist/services/path-resolution.service.d.ts +7 -0
  13. package/dist/services/path-resolution.service.d.ts.map +1 -0
  14. package/dist/services/path-resolution.service.js +58 -0
  15. package/dist/services/path-resolution.service.js.map +1 -0
  16. package/dist/services/worktree-metadata.service.d.ts +12 -0
  17. package/dist/services/worktree-metadata.service.d.ts.map +1 -1
  18. package/dist/services/worktree-metadata.service.js +162 -3
  19. package/dist/services/worktree-metadata.service.js.map +1 -1
  20. package/dist/services/worktree-status.service.d.ts +28 -0
  21. package/dist/services/worktree-status.service.d.ts.map +1 -0
  22. package/dist/services/worktree-status.service.js +229 -0
  23. package/dist/services/worktree-status.service.js.map +1 -0
  24. package/dist/services/worktree-sync.service.d.ts.map +1 -1
  25. package/dist/services/worktree-sync.service.js +6 -10
  26. package/dist/services/worktree-sync.service.js.map +1 -1
  27. package/dist/utils/lfs-error.d.ts +6 -0
  28. package/dist/utils/lfs-error.d.ts.map +1 -1
  29. package/dist/utils/lfs-error.js +16 -14
  30. package/dist/utils/lfs-error.js.map +1 -1
  31. package/package.json +1 -1
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PathResolutionService = void 0;
37
+ const path = __importStar(require("path"));
38
+ class PathResolutionService {
39
+ sanitizeBranchName(branchName) {
40
+ return branchName.replace(/\//g, "-").replace(/[^a-zA-Z0-9_-]/g, "_");
41
+ }
42
+ normalizeWorktreePath(worktreePath, worktreeBaseDir) {
43
+ const relativePath = path.relative(worktreeBaseDir, worktreePath);
44
+ if (relativePath.startsWith("..") || path.isAbsolute(relativePath)) {
45
+ throw new Error(`Worktree path '${worktreePath}' is outside base directory '${worktreeBaseDir}'`);
46
+ }
47
+ return relativePath;
48
+ }
49
+ isPathInsideBaseDir(targetPath, baseDir) {
50
+ const relative = path.relative(baseDir, targetPath);
51
+ return !relative.startsWith("..") && !path.isAbsolute(relative);
52
+ }
53
+ extractBranchFromWorktreePath(worktreePath, worktreeBaseDir) {
54
+ return this.normalizeWorktreePath(worktreePath, worktreeBaseDir);
55
+ }
56
+ }
57
+ exports.PathResolutionService = PathResolutionService;
58
+ //# sourceMappingURL=path-resolution.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-resolution.service.js","sourceRoot":"","sources":["../../src/services/path-resolution.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,MAAa,qBAAqB;IAChC,kBAAkB,CAAC,UAAkB;QACnC,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IAED,qBAAqB,CAAC,YAAoB,EAAE,eAAuB;QACjE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAClE,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,gCAAgC,eAAe,GAAG,CAAC,CAAC;QACpG,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,mBAAmB,CAAC,UAAkB,EAAE,OAAe;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,6BAA6B,CAAC,YAAoB,EAAE,eAAuB;QACzE,OAAO,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;CACF;AArBD,sDAqBC"}
@@ -1,10 +1,22 @@
1
1
  import type { SyncMetadata } from "../types/sync-metadata";
2
2
  export declare class WorktreeMetadataService {
3
+ /**
4
+ * Gets the internal worktree directory name from a worktree path.
5
+ * Git uses the basename of the worktree path as the internal directory name.
6
+ * For example: /worktrees/fix/test-branch -> test-branch (not fix/test-branch)
7
+ */
8
+ private getWorktreeDirectoryName;
3
9
  getMetadataPath(bareRepoPath: string, worktreeName: string): Promise<string>;
10
+ getMetadataPathFromWorktreePath(bareRepoPath: string, worktreePath: string): Promise<string>;
4
11
  saveMetadata(bareRepoPath: string, worktreeName: string, metadata: SyncMetadata): Promise<void>;
5
12
  loadMetadata(bareRepoPath: string, worktreeName: string): Promise<SyncMetadata | null>;
13
+ loadMetadataFromPath(bareRepoPath: string, worktreePath: string): Promise<SyncMetadata | null>;
6
14
  deleteMetadata(bareRepoPath: string, worktreeName: string): Promise<void>;
15
+ deleteMetadataFromPath(bareRepoPath: string, worktreePath: string): Promise<void>;
7
16
  updateLastSync(bareRepoPath: string, worktreeName: string, commit: string, action?: "created" | "updated" | "fetched"): Promise<void>;
17
+ updateLastSyncFromPath(bareRepoPath: string, worktreePath: string, commit: string, action?: "created" | "updated" | "fetched", defaultBranch?: string): Promise<void>;
8
18
  createInitialMetadata(bareRepoPath: string, worktreeName: string, commit: string, upstreamBranch: string, parentBranch: string, parentCommit: string): Promise<void>;
19
+ createInitialMetadataFromPath(bareRepoPath: string, worktreePath: string, commit: string, upstreamBranch: string, parentBranch: string, parentCommit: string): Promise<void>;
20
+ validateMetadata(metadata: SyncMetadata): Promise<boolean>;
9
21
  }
10
22
  //# sourceMappingURL=worktree-metadata.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/worktree-metadata.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,qBAAa,uBAAuB;IAC5B,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5E,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/F,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAYtF,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAazE,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACpD,OAAO,CAAC,IAAI,CAAC;IA2BV,qBAAqB,CACzB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;CAoBjB"}
1
+ {"version":3,"file":"worktree-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/worktree-metadata.service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,qBAAa,uBAAuB;IAClC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAI1B,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5E,+BAA+B,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5F,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/F,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAYtF,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAoD9F,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAazE,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajF,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACpD,OAAO,CAAC,IAAI,CAAC;IA0BV,sBAAsB,CAC1B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACrD,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IAqEV,qBAAqB,CACzB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAqBV,6BAA6B,CACjC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAsBV,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;CAejE"}
@@ -32,16 +32,34 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  exports.WorktreeMetadataService = void 0;
37
40
  const fs = __importStar(require("fs/promises"));
38
41
  const path = __importStar(require("path"));
42
+ const simple_git_1 = __importDefault(require("simple-git"));
43
+ const constants_1 = require("../constants");
39
44
  class WorktreeMetadataService {
45
+ /**
46
+ * Gets the internal worktree directory name from a worktree path.
47
+ * Git uses the basename of the worktree path as the internal directory name.
48
+ * For example: /worktrees/fix/test-branch -> test-branch (not fix/test-branch)
49
+ */
50
+ getWorktreeDirectoryName(worktreePath) {
51
+ return path.basename(worktreePath);
52
+ }
40
53
  async getMetadataPath(bareRepoPath, worktreeName) {
41
54
  // Git stores worktree metadata in .git/worktrees/[worktree-name]/
42
55
  // We'll store our metadata alongside Git's metadata
43
56
  return path.join(bareRepoPath, ".git", "worktrees", worktreeName, "sync-metadata.json");
44
57
  }
58
+ async getMetadataPathFromWorktreePath(bareRepoPath, worktreePath) {
59
+ // Extract the worktree directory name (basename) that Git actually uses
60
+ const worktreeDirName = this.getWorktreeDirectoryName(worktreePath);
61
+ return this.getMetadataPath(bareRepoPath, worktreeDirName);
62
+ }
45
63
  async saveMetadata(bareRepoPath, worktreeName, metadata) {
46
64
  const metadataPath = await this.getMetadataPath(bareRepoPath, worktreeName);
47
65
  // Ensure directory exists
@@ -60,6 +78,52 @@ class WorktreeMetadataService {
60
78
  return null;
61
79
  }
62
80
  }
81
+ async loadMetadataFromPath(bareRepoPath, worktreePath) {
82
+ const metadataPath = await this.getMetadataPathFromWorktreePath(bareRepoPath, worktreePath);
83
+ try {
84
+ const content = await fs.readFile(metadataPath, "utf-8");
85
+ const metadata = JSON.parse(content);
86
+ if (!(await this.validateMetadata(metadata))) {
87
+ console.warn(`Corrupted metadata for ${worktreePath}, treating as missing`);
88
+ return null;
89
+ }
90
+ return metadata;
91
+ }
92
+ catch {
93
+ // Fallback: try loading from old path (using branch name with slashes)
94
+ // This handles migration from the old broken path structure
95
+ try {
96
+ const branchName = path.basename(worktreePath);
97
+ // Check if branch name might have had slashes (parent dir would exist)
98
+ const parentDir = path.dirname(worktreePath);
99
+ const possibleBranchWithSlash = path.join(path.basename(parentDir), branchName);
100
+ // Try the old path with potential slash in branch name
101
+ const oldPath = path.join(bareRepoPath, ".git", "worktrees", possibleBranchWithSlash, "sync-metadata.json");
102
+ const content = await fs.readFile(oldPath, "utf-8");
103
+ const metadata = JSON.parse(content);
104
+ if (!(await this.validateMetadata(metadata))) {
105
+ console.warn(`Corrupted metadata at old path ${oldPath}, treating as missing`);
106
+ return null;
107
+ }
108
+ // Migrate to new path
109
+ await this.saveMetadata(bareRepoPath, this.getWorktreeDirectoryName(worktreePath), metadata);
110
+ // Clean up old path
111
+ try {
112
+ await fs.unlink(oldPath);
113
+ // Try to remove empty parent directory
114
+ await fs.rm(path.dirname(oldPath), { recursive: false, force: true });
115
+ }
116
+ catch {
117
+ // Ignore cleanup errors
118
+ }
119
+ return metadata;
120
+ }
121
+ catch {
122
+ // Return null if file doesn't exist or can't be parsed
123
+ return null;
124
+ }
125
+ }
126
+ }
63
127
  async deleteMetadata(bareRepoPath, worktreeName) {
64
128
  const metadataPath = await this.getMetadataPath(bareRepoPath, worktreeName);
65
129
  try {
@@ -72,6 +136,18 @@ class WorktreeMetadataService {
72
136
  }
73
137
  }
74
138
  }
139
+ async deleteMetadataFromPath(bareRepoPath, worktreePath) {
140
+ const metadataPath = await this.getMetadataPathFromWorktreePath(bareRepoPath, worktreePath);
141
+ try {
142
+ await fs.unlink(metadataPath);
143
+ }
144
+ catch (error) {
145
+ // Ignore errors if file doesn't exist
146
+ if (error.code !== "ENOENT") {
147
+ throw error;
148
+ }
149
+ }
150
+ }
75
151
  async updateLastSync(bareRepoPath, worktreeName, commit, action = "updated") {
76
152
  const existing = await this.loadMetadata(bareRepoPath, worktreeName);
77
153
  if (!existing) {
@@ -82,17 +158,68 @@ class WorktreeMetadataService {
82
158
  // Update metadata
83
159
  existing.lastSyncCommit = commit;
84
160
  existing.lastSyncDate = new Date().toISOString();
85
- // Add to history (limit to last 10 entries)
86
161
  existing.syncHistory.push({
87
162
  date: existing.lastSyncDate,
88
163
  commit,
89
164
  action,
90
165
  });
91
- if (existing.syncHistory.length > 10) {
92
- existing.syncHistory = existing.syncHistory.slice(-10);
166
+ if (existing.syncHistory.length > constants_1.METADATA_CONSTANTS.MAX_HISTORY_ENTRIES) {
167
+ existing.syncHistory = existing.syncHistory.slice(-constants_1.METADATA_CONSTANTS.MAX_HISTORY_ENTRIES);
93
168
  }
94
169
  await this.saveMetadata(bareRepoPath, worktreeName, existing);
95
170
  }
171
+ async updateLastSyncFromPath(bareRepoPath, worktreePath, commit, action = "updated", defaultBranch) {
172
+ const worktreeDirName = this.getWorktreeDirectoryName(worktreePath);
173
+ const existing = await this.loadMetadataFromPath(bareRepoPath, worktreePath);
174
+ if (!existing) {
175
+ console.warn(`No metadata found for worktree ${worktreeDirName}`);
176
+ console.log(` Attempting to create initial metadata...`);
177
+ try {
178
+ const worktreeGit = (0, simple_git_1.default)(worktreePath);
179
+ const currentCommit = await worktreeGit.revparse(["HEAD"]);
180
+ const branchSummary = await worktreeGit.branch();
181
+ const actualBranchName = branchSummary.current;
182
+ if (!actualBranchName) {
183
+ throw new Error("Could not determine current branch name");
184
+ }
185
+ let upstreamBranch = `origin/${actualBranchName}`;
186
+ try {
187
+ const configuredUpstream = await worktreeGit.raw([
188
+ "rev-parse",
189
+ "--abbrev-ref",
190
+ `${actualBranchName}@{upstream}`,
191
+ ]);
192
+ if (configuredUpstream.trim()) {
193
+ upstreamBranch = configuredUpstream.trim();
194
+ }
195
+ }
196
+ catch {
197
+ // No configured upstream, use constructed value
198
+ }
199
+ const parentBranch = defaultBranch || "main";
200
+ await this.createInitialMetadataFromPath(bareRepoPath, worktreePath, currentCommit.trim(), upstreamBranch, parentBranch, currentCommit.trim());
201
+ console.log(` ✅ Created metadata for ${worktreeDirName}`);
202
+ return;
203
+ }
204
+ catch (error) {
205
+ console.error(` ❌ Failed to create metadata: ${error}`);
206
+ throw error;
207
+ }
208
+ }
209
+ // Update metadata
210
+ existing.lastSyncCommit = commit;
211
+ existing.lastSyncDate = new Date().toISOString();
212
+ existing.syncHistory.push({
213
+ date: existing.lastSyncDate,
214
+ commit,
215
+ action,
216
+ });
217
+ if (existing.syncHistory.length > constants_1.METADATA_CONSTANTS.MAX_HISTORY_ENTRIES) {
218
+ existing.syncHistory = existing.syncHistory.slice(-constants_1.METADATA_CONSTANTS.MAX_HISTORY_ENTRIES);
219
+ }
220
+ // Save using the directory name
221
+ await this.saveMetadata(bareRepoPath, worktreeDirName, existing);
222
+ }
96
223
  async createInitialMetadata(bareRepoPath, worktreeName, commit, upstreamBranch, parentBranch, parentCommit) {
97
224
  const metadata = {
98
225
  lastSyncCommit: commit,
@@ -112,6 +239,38 @@ class WorktreeMetadataService {
112
239
  };
113
240
  await this.saveMetadata(bareRepoPath, worktreeName, metadata);
114
241
  }
242
+ async createInitialMetadataFromPath(bareRepoPath, worktreePath, commit, upstreamBranch, parentBranch, parentCommit) {
243
+ const worktreeDirName = this.getWorktreeDirectoryName(worktreePath);
244
+ const metadata = {
245
+ lastSyncCommit: commit,
246
+ lastSyncDate: new Date().toISOString(),
247
+ upstreamBranch,
248
+ createdFrom: {
249
+ branch: parentBranch,
250
+ commit: parentCommit,
251
+ },
252
+ syncHistory: [
253
+ {
254
+ date: new Date().toISOString(),
255
+ commit,
256
+ action: "created",
257
+ },
258
+ ],
259
+ };
260
+ await this.saveMetadata(bareRepoPath, worktreeDirName, metadata);
261
+ }
262
+ async validateMetadata(metadata) {
263
+ if (!metadata.lastSyncCommit || !metadata.lastSyncDate || !metadata.upstreamBranch) {
264
+ return false;
265
+ }
266
+ if (!/^[0-9a-f]+$/i.test(metadata.lastSyncCommit)) {
267
+ return false;
268
+ }
269
+ if (Number.isNaN(new Date(metadata.lastSyncDate).getTime())) {
270
+ return false;
271
+ }
272
+ return true;
273
+ }
115
274
  }
116
275
  exports.WorktreeMetadataService = WorktreeMetadataService;
117
276
  //# sourceMappingURL=worktree-metadata.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-metadata.service.js","sourceRoot":"","sources":["../../src/services/worktree-metadata.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worktree-metadata.service.js","sourceRoot":"","sources":["../../src/services/worktree-metadata.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface WorktreeStatusResult {
2
+ isClean: boolean;
3
+ hasUnpushedCommits: boolean;
4
+ hasStashedChanges: boolean;
5
+ hasOperationInProgress: boolean;
6
+ hasModifiedSubmodules: boolean;
7
+ upstreamGone: boolean;
8
+ canRemove: boolean;
9
+ reasons: string[];
10
+ }
11
+ export declare class WorktreeStatusService {
12
+ private readonly config;
13
+ constructor(config?: {
14
+ skipLfs?: boolean;
15
+ });
16
+ checkWorktreeStatus(worktreePath: string): Promise<boolean>;
17
+ getFullWorktreeStatus(worktreePath: string): Promise<WorktreeStatusResult>;
18
+ hasUnpushedCommits(worktreePath: string, lastSyncCommit?: string): Promise<boolean>;
19
+ hasUpstreamGone(worktreePath: string): Promise<boolean>;
20
+ hasStashedChanges(worktreePath: string): Promise<boolean>;
21
+ hasModifiedSubmodules(worktreePath: string): Promise<boolean>;
22
+ hasOperationInProgress(worktreePath: string): Promise<boolean>;
23
+ validateWorktreeForRemoval(worktreePath: string): Promise<void>;
24
+ private isDetachedHead;
25
+ private resolveGitDir;
26
+ private createGitInstance;
27
+ }
28
+ //# sourceMappingURL=worktree-status.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-status.service.d.ts","sourceRoot":"","sources":["../../src/services/worktree-status.service.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,OAAO,CAAC;IAChC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO;IAEzD,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3D,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA8B1E,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BnF,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCvD,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYzD,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7D,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4B9D,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQvD,cAAc;YASd,aAAa;IAwB3B,OAAO,CAAC,iBAAiB;CAI1B"}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.WorktreeStatusService = void 0;
40
+ const fs = __importStar(require("fs/promises"));
41
+ const path = __importStar(require("path"));
42
+ const simple_git_1 = __importDefault(require("simple-git"));
43
+ const constants_1 = require("../constants");
44
+ const errors_1 = require("../errors");
45
+ const lfs_error_1 = require("../utils/lfs-error");
46
+ class WorktreeStatusService {
47
+ config;
48
+ constructor(config = {}) {
49
+ this.config = config;
50
+ }
51
+ async checkWorktreeStatus(worktreePath) {
52
+ const worktreeGit = this.createGitInstance(worktreePath);
53
+ const status = await worktreeGit.status();
54
+ return status.isClean();
55
+ }
56
+ async getFullWorktreeStatus(worktreePath) {
57
+ const isClean = await this.checkWorktreeStatus(worktreePath);
58
+ const hasUnpushedCommits = await this.hasUnpushedCommits(worktreePath);
59
+ const hasStashedChanges = await this.hasStashedChanges(worktreePath);
60
+ const hasOperationInProgress = await this.hasOperationInProgress(worktreePath);
61
+ const hasModifiedSubmodules = await this.hasModifiedSubmodules(worktreePath);
62
+ const upstreamGone = await this.hasUpstreamGone(worktreePath);
63
+ const reasons = [];
64
+ if (!isClean)
65
+ reasons.push("uncommitted changes");
66
+ if (hasUnpushedCommits)
67
+ reasons.push("unpushed commits");
68
+ if (hasStashedChanges)
69
+ reasons.push("stashed changes");
70
+ if (hasOperationInProgress)
71
+ reasons.push("operation in progress");
72
+ if (hasModifiedSubmodules)
73
+ reasons.push("modified submodules");
74
+ const canRemove = isClean && !hasUnpushedCommits && !hasStashedChanges && !hasOperationInProgress && !hasModifiedSubmodules;
75
+ return {
76
+ isClean,
77
+ hasUnpushedCommits,
78
+ hasStashedChanges,
79
+ hasOperationInProgress,
80
+ hasModifiedSubmodules,
81
+ upstreamGone,
82
+ canRemove,
83
+ reasons,
84
+ };
85
+ }
86
+ async hasUnpushedCommits(worktreePath, lastSyncCommit) {
87
+ const worktreeGit = this.createGitInstance(worktreePath);
88
+ try {
89
+ if (await this.isDetachedHead(worktreeGit)) {
90
+ return false;
91
+ }
92
+ const branchSummary = await worktreeGit.branch();
93
+ const currentBranch = branchSummary.current;
94
+ if (lastSyncCommit) {
95
+ try {
96
+ const newCommitsResult = await worktreeGit.raw(["rev-list", "--count", `${lastSyncCommit}..HEAD`]);
97
+ const newCommitsCount = parseInt(newCommitsResult.trim(), 10);
98
+ return newCommitsCount > 0;
99
+ }
100
+ catch {
101
+ // Fall through to regular check
102
+ }
103
+ }
104
+ const result = await worktreeGit.raw(["rev-list", "--count", currentBranch, "--not", "--remotes"]);
105
+ const unpushedCount = parseInt(result.trim(), 10);
106
+ return unpushedCount > 0;
107
+ }
108
+ catch (error) {
109
+ console.error(`Error checking unpushed commits: ${error}`);
110
+ return false;
111
+ }
112
+ }
113
+ async hasUpstreamGone(worktreePath) {
114
+ const worktreeGit = this.createGitInstance(worktreePath);
115
+ try {
116
+ if (await this.isDetachedHead(worktreeGit)) {
117
+ return false;
118
+ }
119
+ const branchSummary = await worktreeGit.branch();
120
+ const currentBranch = branchSummary.current;
121
+ const upstream = await worktreeGit.raw(["rev-parse", "--abbrev-ref", `${currentBranch}@{upstream}`]);
122
+ const remoteBranches = await worktreeGit.branch(["-r"]);
123
+ return !remoteBranches.all.includes(upstream.trim());
124
+ }
125
+ catch (error) {
126
+ const errorMessage = (0, lfs_error_1.getErrorMessage)(error);
127
+ if (errorMessage.includes("fatal: no upstream configured") ||
128
+ errorMessage.includes("no upstream configured for branch") ||
129
+ errorMessage.includes("fatal: ambiguous argument") ||
130
+ errorMessage.includes("unknown revision or path")) {
131
+ return false;
132
+ }
133
+ console.error(`Unexpected error checking upstream status for ${worktreePath}: ${errorMessage}`);
134
+ return false;
135
+ }
136
+ }
137
+ async hasStashedChanges(worktreePath) {
138
+ const worktreeGit = this.createGitInstance(worktreePath);
139
+ try {
140
+ const stashList = await worktreeGit.stashList();
141
+ return stashList.total > 0;
142
+ }
143
+ catch (error) {
144
+ console.error(`Error checking stash: ${error}`);
145
+ return true; // Conservative: assume unsafe to delete
146
+ }
147
+ }
148
+ async hasModifiedSubmodules(worktreePath) {
149
+ const worktreeGit = this.createGitInstance(worktreePath);
150
+ try {
151
+ const result = await worktreeGit.raw(["submodule", "status"]);
152
+ const lines = result.split("\n").filter((line) => line.trim());
153
+ for (const line of lines) {
154
+ const firstChar = line.charAt(0);
155
+ if (firstChar === "+" || firstChar === "-") {
156
+ return true;
157
+ }
158
+ }
159
+ return false;
160
+ }
161
+ catch {
162
+ return false;
163
+ }
164
+ }
165
+ async hasOperationInProgress(worktreePath) {
166
+ try {
167
+ const gitDir = await this.resolveGitDir(worktreePath);
168
+ const operationFiles = [
169
+ constants_1.GIT_OPERATIONS.MERGE_HEAD,
170
+ constants_1.GIT_OPERATIONS.CHERRY_PICK_HEAD,
171
+ constants_1.GIT_OPERATIONS.REVERT_HEAD,
172
+ constants_1.GIT_OPERATIONS.BISECT_LOG,
173
+ constants_1.GIT_OPERATIONS.REBASE_MERGE,
174
+ constants_1.GIT_OPERATIONS.REBASE_APPLY,
175
+ ];
176
+ for (const file of operationFiles) {
177
+ try {
178
+ await fs.access(path.join(gitDir, file));
179
+ return true;
180
+ }
181
+ catch {
182
+ continue;
183
+ }
184
+ }
185
+ return false;
186
+ }
187
+ catch {
188
+ return false;
189
+ }
190
+ }
191
+ async validateWorktreeForRemoval(worktreePath) {
192
+ const status = await this.getFullWorktreeStatus(worktreePath);
193
+ if (!status.canRemove) {
194
+ throw new errors_1.WorktreeNotCleanError(worktreePath, status.reasons);
195
+ }
196
+ }
197
+ async isDetachedHead(worktreeGit) {
198
+ try {
199
+ const branchSummary = await worktreeGit.branch();
200
+ return !branchSummary.current || branchSummary.detached;
201
+ }
202
+ catch {
203
+ return true;
204
+ }
205
+ }
206
+ async resolveGitDir(worktreePath) {
207
+ const gitPath = path.join(worktreePath, constants_1.PATH_CONSTANTS.GIT_DIR);
208
+ try {
209
+ const stat = await fs.stat(gitPath);
210
+ if (stat.isFile()) {
211
+ const content = await fs.readFile(gitPath, "utf-8");
212
+ const gitdirMatch = content.match(/^gitdir:\s*(.+)$/m);
213
+ if (gitdirMatch) {
214
+ return path.resolve(worktreePath, gitdirMatch[1].trim());
215
+ }
216
+ }
217
+ return gitPath;
218
+ }
219
+ catch (error) {
220
+ throw new errors_1.GitOperationError("resolve-git-dir", `Failed to resolve .git directory for ${worktreePath}`, error instanceof Error ? error : undefined);
221
+ }
222
+ }
223
+ createGitInstance(worktreePath) {
224
+ const git = (0, simple_git_1.default)(worktreePath);
225
+ return this.config.skipLfs ? git.env({ GIT_LFS_SKIP_SMUDGE: "1" }) : git;
226
+ }
227
+ }
228
+ exports.WorktreeStatusService = WorktreeStatusService;
229
+ //# sourceMappingURL=worktree-status.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-status.service.js","sourceRoot":"","sources":["../../src/services/worktree-status.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-sync.service.d.ts","sourceRoot":"","sources":["../../src/services/worktree-sync.service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,UAAU,CAAa;gBAEX,MAAM,EAAE,MAAM;IAI5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YA2Hb,kBAAkB;YAoBlB,iBAAiB;YAmDjB,mBAAmB;YA6BnB,uBAAuB;YAiGvB,0BAA0B;YA2C1B,oBAAoB;YA2BpB,eAAe;CA+C9B"}
1
+ {"version":3,"file":"worktree-sync.service.d.ts","sourceRoot":"","sources":["../../src/services/worktree-sync.service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,UAAU,CAAa;gBAEX,MAAM,EAAE,MAAM;IAI5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAmHb,kBAAkB;YAoBlB,iBAAiB;YAmDjB,mBAAmB;YA6BnB,uBAAuB;YAiGvB,0BAA0B;YA2C1B,oBAAoB;YA2BpB,eAAe;CA+C9B"}