@cerbur/clutch-dsh-worktree 0.1.7 → 0.1.8
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 +28 -8
- package/README.zh.md +21 -3
- package/lib/client/WorktreeSurface.d.ts.map +1 -1
- package/lib/client/WorktreeSurface.js +24 -8
- package/lib/client/WorktreeSurface.js.map +1 -1
- package/lib/client/locales.d.ts +12 -0
- package/lib/client/locales.d.ts.map +1 -1
- package/lib/client/locales.js +12 -0
- package/lib/client/locales.js.map +1 -1
- package/lib/client/worktree-context.js +1 -1
- package/lib/client/worktree-context.js.map +1 -1
- package/lib/client/worktree-error-copy.d.ts.map +1 -1
- package/lib/client/worktree-error-copy.js +8 -0
- package/lib/client/worktree-error-copy.js.map +1 -1
- package/lib/client/worktree-session.d.ts.map +1 -1
- package/lib/client/worktree-session.js +3 -1
- package/lib/client/worktree-session.js.map +1 -1
- package/lib/client/worktree-surface-rows.d.ts.map +1 -1
- package/lib/client/worktree-surface-rows.js +7 -0
- package/lib/client/worktree-surface-rows.js.map +1 -1
- package/lib/client.js +47 -11
- package/lib/client.js.map +1 -1
- package/lib/contract/index.d.ts +6 -2
- package/lib/contract/index.d.ts.map +1 -1
- package/lib/contract/index.js +4 -0
- package/lib/contract/index.js.map +1 -1
- package/lib/host/dsh-read-adapter.d.ts +1 -0
- package/lib/host/dsh-read-adapter.d.ts.map +1 -1
- package/lib/host/dsh-read-adapter.js +6 -0
- package/lib/host/dsh-read-adapter.js.map +1 -1
- package/lib/host/service.d.ts +2 -0
- package/lib/host/service.d.ts.map +1 -1
- package/lib/host/service.js +6 -1
- package/lib/host/service.js.map +1 -1
- package/lib/host/worktree-permission-manager.d.ts.map +1 -1
- package/lib/host/worktree-permission-manager.js +3 -1
- package/lib/host/worktree-permission-manager.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/manage/manager-context.d.ts +2 -0
- package/lib/manage/manager-context.d.ts.map +1 -1
- package/lib/manage/manager-worktrees.d.ts +5 -0
- package/lib/manage/manager-worktrees.d.ts.map +1 -1
- package/lib/manage/manager-worktrees.js +125 -37
- package/lib/manage/manager-worktrees.js.map +1 -1
- package/lib/manage/manager.d.ts +20 -0
- package/lib/manage/manager.d.ts.map +1 -1
- package/lib/manage/manager.js +91 -13
- package/lib/manage/manager.js.map +1 -1
- package/lib/manage/types.d.ts +9 -1
- package/lib/manage/types.d.ts.map +1 -1
- package/lib/provider/git.d.ts +37 -9
- package/lib/provider/git.d.ts.map +1 -1
- package/lib/provider/git.js +162 -61
- package/lib/provider/git.js.map +1 -1
- package/lib/provider/index.d.ts +5 -1
- package/lib/provider/index.d.ts.map +1 -1
- package/lib/provider/index.js +4 -0
- package/lib/provider/index.js.map +1 -1
- package/lib/provider/mutation-lock.d.ts +37 -0
- package/lib/provider/mutation-lock.d.ts.map +1 -0
- package/lib/provider/mutation-lock.js +270 -0
- package/lib/provider/mutation-lock.js.map +1 -0
- package/lib/provider/mutation-token.d.ts +8 -0
- package/lib/provider/mutation-token.d.ts.map +1 -0
- package/lib/provider/mutation-token.js +20 -0
- package/lib/provider/mutation-token.js.map +1 -0
- package/lib/provider/repository-fingerprint.d.ts +8 -0
- package/lib/provider/repository-fingerprint.d.ts.map +1 -0
- package/lib/provider/repository-fingerprint.js +13 -0
- package/lib/provider/repository-fingerprint.js.map +1 -0
- package/lib/provider/sidecar-persistence.d.ts +7 -3
- package/lib/provider/sidecar-persistence.d.ts.map +1 -1
- package/lib/provider/sidecar-persistence.js +118 -44
- package/lib/provider/sidecar-persistence.js.map +1 -1
- package/lib/provider/sidecar-schema.d.ts +1 -1
- package/lib/provider/sidecar-schema.d.ts.map +1 -1
- package/lib/provider/sidecar-schema.js +140 -8
- package/lib/provider/sidecar-schema.js.map +1 -1
- package/lib/provider/sidecar.d.ts +3 -1
- package/lib/provider/sidecar.d.ts.map +1 -1
- package/lib/provider/sidecar.js +6 -1
- package/lib/provider/sidecar.js.map +1 -1
- package/lib/provider/subprocess.d.ts +37 -0
- package/lib/provider/subprocess.d.ts.map +1 -0
- package/lib/provider/subprocess.js +319 -0
- package/lib/provider/subprocess.js.map +1 -0
- package/lib/provider/transaction.d.ts +65 -0
- package/lib/provider/transaction.d.ts.map +1 -0
- package/lib/provider/transaction.js +1011 -0
- package/lib/provider/transaction.js.map +1 -0
- package/lib/provider/types.d.ts +98 -7
- package/lib/provider/types.d.ts.map +1 -1
- package/lib/provider/types.js +1 -1
- package/lib/provider/types.js.map +1 -1
- package/lib/typert.host.js +29 -25
- package/lib/typert.remote-client.d.ts +2 -2
- package/lib/typert.remote-client.d.ts.map +1 -1
- package/lib/typert.remote-client.js +29 -25
- package/package.json +3 -1
package/lib/provider/git.js
CHANGED
|
@@ -1,59 +1,34 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { realpath } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import {
|
|
3
|
+
import { GitCommandError, runGit, } from './subprocess.js';
|
|
4
4
|
import { WorktreeProviderError, providerError } from './types.js';
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
stdout;
|
|
13
|
-
stderr;
|
|
14
|
-
exitCode;
|
|
15
|
-
constructor(args, cwd, stdout, stderr, exitCode) {
|
|
16
|
-
super(stderr || stdout || `git exited with ${String(exitCode)}`);
|
|
17
|
-
this.name = 'GitCommandError';
|
|
18
|
-
this.args = args;
|
|
19
|
-
this.cwd = cwd;
|
|
20
|
-
this.stdout = stdout;
|
|
21
|
-
this.stderr = stderr;
|
|
22
|
-
this.exitCode = exitCode;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/*
|
|
26
|
-
* 所有 Git 调用都使用参数数组和配置好的 executable,不经过 shell;因此路径或分支中的 shell
|
|
27
|
-
* 元字符不会被解释。参数的业务合法性仍由上层 Manage 校验。
|
|
28
|
-
*
|
|
29
|
-
* Every Git call uses an argument vector and a configured executable without a
|
|
30
|
-
* shell, so shell metacharacters in paths or branches are never evaluated.
|
|
31
|
-
* Semantic validation of those values remains the responsibility of Manage.
|
|
32
|
-
*/
|
|
33
|
-
async function runGit(args, cwd, executable) {
|
|
34
|
-
try {
|
|
35
|
-
const result = await execFile(executable, [...args], {
|
|
36
|
-
cwd,
|
|
37
|
-
encoding: 'utf8',
|
|
38
|
-
maxBuffer: 4 * 1024 * 1024,
|
|
39
|
-
});
|
|
40
|
-
return { stdout: result.stdout, stderr: result.stderr };
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
const commandError = error;
|
|
44
|
-
throw new GitCommandError(args, cwd, commandError.stdout ?? '', commandError.stderr ?? '', commandError.code ?? null);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
5
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
6
|
+
const DEFAULT_GRACE_MS = 1_000;
|
|
7
|
+
const DEFAULT_CLEANUP_TIMEOUT_MS = 5_000;
|
|
8
|
+
const DEFAULT_MAX_OUTPUT_BYTES = 4 * 1024 * 1024;
|
|
9
|
+
const MAX_TIMEOUT_MS = 2_147_483_647;
|
|
10
|
+
const MAX_GRACE_MS = 2_147_483_647;
|
|
11
|
+
const MAX_DIAGNOSTIC_BYTES = 32 * 1024;
|
|
47
12
|
// 保留 cwd、参数、stdout、stderr 和退出码,避免稳定错误 code 丢失现场诊断信息。
|
|
48
13
|
// Preserve cwd, arguments, stdout, stderr, and exit code so a stable error code
|
|
49
14
|
// does not discard the evidence needed for diagnosis.
|
|
15
|
+
function boundedDiagnostic(value) {
|
|
16
|
+
return value.length <= MAX_DIAGNOSTIC_BYTES
|
|
17
|
+
? value
|
|
18
|
+
: `${value.slice(0, MAX_DIAGNOSTIC_BYTES)}\n[diagnostic output truncated]`;
|
|
19
|
+
}
|
|
50
20
|
function gitDetails(error) {
|
|
51
21
|
return {
|
|
52
22
|
workspaceRoot: error.cwd,
|
|
53
23
|
gitArgs: error.args,
|
|
54
|
-
gitStdout: error.stdout,
|
|
55
|
-
gitStderr: error.stderr,
|
|
24
|
+
gitStdout: boundedDiagnostic(error.stdout),
|
|
25
|
+
gitStderr: boundedDiagnostic(error.stderr),
|
|
56
26
|
gitExitCode: typeof error.exitCode === 'number' ? error.exitCode : String(error.exitCode),
|
|
27
|
+
...(error.timedOut ? { gitTimedOut: true } : {}),
|
|
28
|
+
...(error.aborted ? { gitAborted: true } : {}),
|
|
29
|
+
...(error.outputTruncated ? { gitOutputTruncated: true } : {}),
|
|
30
|
+
...(error.processTreeDidNotExit ? { gitProcessTreeDidNotExit: true } : {}),
|
|
31
|
+
...(error.signal ? { gitSignal: error.signal } : {}),
|
|
57
32
|
};
|
|
58
33
|
}
|
|
59
34
|
function isMissingGit(error) {
|
|
@@ -110,6 +85,8 @@ function parseWorktrees(output) {
|
|
|
110
85
|
worktrees.push({
|
|
111
86
|
absolutePath: current.absolutePath,
|
|
112
87
|
...(current.branch ? { branch: current.branch } : {}),
|
|
88
|
+
...(current.headCommit ? { headCommit: current.headCommit } : {}),
|
|
89
|
+
detached: current.detached ?? !current.branch,
|
|
113
90
|
});
|
|
114
91
|
}
|
|
115
92
|
current = {};
|
|
@@ -126,11 +103,39 @@ function parseWorktrees(output) {
|
|
|
126
103
|
}
|
|
127
104
|
if (line.startsWith('branch refs/heads/')) {
|
|
128
105
|
current.branch = line.slice('branch refs/heads/'.length);
|
|
106
|
+
current.detached = false;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (line.startsWith('HEAD ')) {
|
|
110
|
+
current.headCommit = line.slice('HEAD '.length);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (line === 'detached') {
|
|
114
|
+
current.detached = true;
|
|
129
115
|
}
|
|
130
116
|
}
|
|
131
117
|
flush();
|
|
132
118
|
return worktrees;
|
|
133
119
|
}
|
|
120
|
+
/** Parse `for-each-ref` branch/path pairs without relying on whitespace delimiters. */
|
|
121
|
+
function parseBranchWorktreePaths(output) {
|
|
122
|
+
const fields = output.split('\0');
|
|
123
|
+
const branches = [];
|
|
124
|
+
for (let index = 0; index + 1 < fields.length; index += 2) {
|
|
125
|
+
const name = (fields[index] ?? '').replace(/^\r?\n/u, '');
|
|
126
|
+
const worktreePath = fields[index + 1] ?? '';
|
|
127
|
+
if (!name)
|
|
128
|
+
continue;
|
|
129
|
+
branches.push({
|
|
130
|
+
name,
|
|
131
|
+
...(worktreePath ? { worktreePath } : {}),
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return branches;
|
|
135
|
+
}
|
|
136
|
+
function isUnsupportedWorktreePathAtom(error) {
|
|
137
|
+
return error instanceof GitCommandError && /unknown field name:\s*worktreepath/iu.test(error.stderr);
|
|
138
|
+
}
|
|
134
139
|
/**
|
|
135
140
|
* 本地 Git worktree adapter:所有命令都以 DSH Workspace 根目录为 cwd,并仅使用固定的
|
|
136
141
|
* 本地子命令;不使用 `--force`,也不访问 remote。
|
|
@@ -141,24 +146,62 @@ function parseWorktrees(output) {
|
|
|
141
146
|
*/
|
|
142
147
|
export class LocalGitAdapter {
|
|
143
148
|
executable;
|
|
149
|
+
executableArgs;
|
|
150
|
+
timeoutMs;
|
|
151
|
+
graceMs;
|
|
152
|
+
cleanupTimeoutMs;
|
|
153
|
+
maxOutputBytes;
|
|
154
|
+
defaultSignal;
|
|
155
|
+
subprocess;
|
|
144
156
|
constructor(options = {}) {
|
|
145
157
|
this.executable = options.executable ?? 'git';
|
|
158
|
+
this.executableArgs = options.executableArgs ?? [];
|
|
159
|
+
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
160
|
+
this.graceMs = options.graceMs ?? DEFAULT_GRACE_MS;
|
|
161
|
+
this.cleanupTimeoutMs = options.cleanupTimeoutMs ?? Math.max(DEFAULT_CLEANUP_TIMEOUT_MS, this.graceMs);
|
|
162
|
+
this.maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
|
|
163
|
+
this.defaultSignal = options.signal;
|
|
164
|
+
this.subprocess = options.subprocess;
|
|
165
|
+
if (!Number.isInteger(this.timeoutMs) || this.timeoutMs <= 0 || this.timeoutMs > MAX_TIMEOUT_MS ||
|
|
166
|
+
!Number.isInteger(this.graceMs) || this.graceMs <= 0 || this.graceMs > MAX_GRACE_MS ||
|
|
167
|
+
!Number.isInteger(this.cleanupTimeoutMs) || this.cleanupTimeoutMs <= 0 || this.cleanupTimeoutMs > MAX_TIMEOUT_MS ||
|
|
168
|
+
!Number.isInteger(this.maxOutputBytes) || this.maxOutputBytes <= 0) {
|
|
169
|
+
throw providerError('GIT_OPERATION_FAILED', 'Invalid Git subprocess limits', {
|
|
170
|
+
timeoutMs: this.timeoutMs,
|
|
171
|
+
graceMs: this.graceMs,
|
|
172
|
+
cleanupTimeoutMs: this.cleanupTimeoutMs,
|
|
173
|
+
maxOutputBytes: this.maxOutputBytes,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
run(args, cwd, options = {}, readOnly = true) {
|
|
178
|
+
return runGit(args, cwd, this.executable, this.executableArgs, {
|
|
179
|
+
timeoutMs: this.timeoutMs,
|
|
180
|
+
graceMs: this.graceMs,
|
|
181
|
+
cleanupTimeoutMs: this.cleanupTimeoutMs,
|
|
182
|
+
maxOutputBytes: this.maxOutputBytes,
|
|
183
|
+
readOnly,
|
|
184
|
+
signal: options.signal ?? this.defaultSignal,
|
|
185
|
+
subprocess: this.subprocess,
|
|
186
|
+
});
|
|
146
187
|
}
|
|
147
188
|
/**
|
|
148
189
|
* 分开验证“位于非 bare working tree”和“已有可解析的首个 commit”,以返回不同修复语义。
|
|
149
190
|
* Separately verifies “inside a non-bare working tree” and “has a resolvable
|
|
150
191
|
* initial commit” so callers receive distinct repair semantics.
|
|
151
192
|
*/
|
|
152
|
-
async validateRepository(workspaceRoot) {
|
|
193
|
+
async validateRepository(workspaceRoot, options = {}) {
|
|
153
194
|
let result;
|
|
154
195
|
try {
|
|
155
|
-
result = await
|
|
196
|
+
result = await this.run(['rev-parse', '--is-inside-work-tree'], workspaceRoot, options);
|
|
156
197
|
}
|
|
157
198
|
catch (error) {
|
|
158
199
|
if (error instanceof GitCommandError) {
|
|
159
200
|
if (isMissingGit(error)) {
|
|
160
201
|
throw missingGitError('validate repository', error);
|
|
161
202
|
}
|
|
203
|
+
if (error.timedOut || error.aborted)
|
|
204
|
+
throw operationError('validate repository', workspaceRoot, undefined, undefined, error);
|
|
162
205
|
throw providerError('WORKSPACE_NOT_GIT_REPOSITORY', `Workspace is not a Git repository: ${workspaceRoot}`, {
|
|
163
206
|
...gitDetails(error),
|
|
164
207
|
});
|
|
@@ -171,22 +214,24 @@ export class LocalGitAdapter {
|
|
|
171
214
|
});
|
|
172
215
|
}
|
|
173
216
|
try {
|
|
174
|
-
await
|
|
217
|
+
await this.run(['rev-parse', '--verify', 'HEAD^{commit}'], workspaceRoot, options);
|
|
175
218
|
}
|
|
176
219
|
catch (error) {
|
|
177
220
|
if (error instanceof GitCommandError) {
|
|
178
221
|
if (isMissingGit(error)) {
|
|
179
222
|
throw missingGitError('validate repository', error);
|
|
180
223
|
}
|
|
224
|
+
if (error.timedOut || error.aborted)
|
|
225
|
+
throw operationError('validate repository', workspaceRoot, undefined, undefined, error);
|
|
181
226
|
throw providerError('WORKTREE_REQUIRES_INITIAL_COMMIT', `Workspace has no initial commit: ${workspaceRoot}`, { ...gitDetails(error) });
|
|
182
227
|
}
|
|
183
228
|
throw error;
|
|
184
229
|
}
|
|
185
230
|
}
|
|
186
231
|
/** Resolve the Git worktree/repository root for repository-wide reads. */
|
|
187
|
-
async resolveRepositoryRoot(workspaceRoot) {
|
|
232
|
+
async resolveRepositoryRoot(workspaceRoot, options = {}) {
|
|
188
233
|
try {
|
|
189
|
-
const rootResult = await
|
|
234
|
+
const rootResult = await this.run(['rev-parse', '--show-toplevel'], workspaceRoot, options);
|
|
190
235
|
const repositoryRoot = rootResult.stdout.trim();
|
|
191
236
|
if (repositoryRoot.length === 0) {
|
|
192
237
|
throw providerError('GIT_OPERATION_FAILED', `Git did not return a repository root: ${workspaceRoot}`, {
|
|
@@ -194,9 +239,9 @@ export class LocalGitAdapter {
|
|
|
194
239
|
operation: 'resolve repository root',
|
|
195
240
|
});
|
|
196
241
|
}
|
|
197
|
-
return path.isAbsolute(repositoryRoot)
|
|
242
|
+
return await realpath(path.isAbsolute(repositoryRoot)
|
|
198
243
|
? path.resolve(repositoryRoot)
|
|
199
|
-
: path.resolve(workspaceRoot, repositoryRoot);
|
|
244
|
+
: path.resolve(workspaceRoot, repositoryRoot));
|
|
200
245
|
}
|
|
201
246
|
catch (error) {
|
|
202
247
|
if (error instanceof WorktreeProviderError)
|
|
@@ -204,14 +249,44 @@ export class LocalGitAdapter {
|
|
|
204
249
|
throw operationError('resolve repository root', workspaceRoot, undefined, undefined, error);
|
|
205
250
|
}
|
|
206
251
|
}
|
|
252
|
+
/** Resolve the canonical linked-worktree and shared Git metadata identity. */
|
|
253
|
+
async resolveRepositoryIdentity(workspaceRoot, options = {}) {
|
|
254
|
+
try {
|
|
255
|
+
const result = await this.run(['rev-parse', '--show-toplevel', '--git-common-dir', '--verify', 'HEAD^{commit}'], workspaceRoot, options);
|
|
256
|
+
const lines = result.stdout.split(/\r?\n/u);
|
|
257
|
+
if (lines.at(-1) === '')
|
|
258
|
+
lines.pop();
|
|
259
|
+
const [topLevel, commonDirectory, headCommit] = lines;
|
|
260
|
+
if (!topLevel || !commonDirectory || !headCommit) {
|
|
261
|
+
throw providerError('GIT_OPERATION_FAILED', `Git returned an incomplete repository identity: ${workspaceRoot}`, {
|
|
262
|
+
workspaceRoot,
|
|
263
|
+
operation: 'resolve repository identity',
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
identity: {
|
|
268
|
+
topLevel: await realpath(path.isAbsolute(topLevel) ? path.resolve(topLevel) : path.resolve(workspaceRoot, topLevel)),
|
|
269
|
+
commonDirectory: await realpath(path.isAbsolute(commonDirectory)
|
|
270
|
+
? path.resolve(commonDirectory)
|
|
271
|
+
: path.resolve(workspaceRoot, commonDirectory)),
|
|
272
|
+
},
|
|
273
|
+
headCommit,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
if (error instanceof WorktreeProviderError)
|
|
278
|
+
throw error;
|
|
279
|
+
throw operationError('resolve repository identity', workspaceRoot, undefined, undefined, error);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
207
282
|
/**
|
|
208
283
|
* 仅列出 `refs/heads/` 下的本地分支;NUL 分隔避免依赖面向人的展示格式或空白切分。
|
|
209
284
|
* Lists local branches under `refs/heads/` only; NUL delimiting avoids
|
|
210
285
|
* depending on human-facing formatting or whitespace tokenization.
|
|
211
286
|
*/
|
|
212
|
-
async listBranches(workspaceRoot) {
|
|
287
|
+
async listBranches(workspaceRoot, options = {}) {
|
|
213
288
|
try {
|
|
214
|
-
const result = await
|
|
289
|
+
const result = await this.run(['for-each-ref', '--format=%(refname:short)%00', 'refs/heads/'], workspaceRoot, options);
|
|
215
290
|
return result.stdout
|
|
216
291
|
.split('\0')
|
|
217
292
|
.map((branch) => branch.replace(/^\r?\n/, '').replace(/\r?\n$/, ''))
|
|
@@ -221,14 +296,40 @@ export class LocalGitAdapter {
|
|
|
221
296
|
throw operationError('list branches', workspaceRoot, undefined, undefined, error);
|
|
222
297
|
}
|
|
223
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* Read local branches and their checkout paths in one Git invocation when the
|
|
301
|
+
* installed Git supports the `worktreepath` format atom.
|
|
302
|
+
*/
|
|
303
|
+
async listBranchesWithWorktreePaths(workspaceRoot, options = {}) {
|
|
304
|
+
try {
|
|
305
|
+
const result = await this.run(['for-each-ref', '--format=%(refname:short)%00%(worktreepath)%00', 'refs/heads/'], workspaceRoot, options);
|
|
306
|
+
return parseBranchWorktreePaths(result.stdout);
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
if (!isUnsupportedWorktreePathAtom(error)) {
|
|
310
|
+
throw operationError('list branches', workspaceRoot, undefined, undefined, error);
|
|
311
|
+
}
|
|
312
|
+
const [branches, worktrees] = await Promise.all([
|
|
313
|
+
this.listBranches(workspaceRoot, options),
|
|
314
|
+
this.listWorktrees(workspaceRoot, options),
|
|
315
|
+
]);
|
|
316
|
+
const worktreePathByBranch = new Map(worktrees.flatMap((worktree) => worktree.branch
|
|
317
|
+
? [[worktree.branch, worktree.absolutePath]]
|
|
318
|
+
: []));
|
|
319
|
+
return branches.map((name) => ({
|
|
320
|
+
name,
|
|
321
|
+
...(worktreePathByBranch.has(name) ? { worktreePath: worktreePathByBranch.get(name) } : {}),
|
|
322
|
+
}));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
224
325
|
/**
|
|
225
326
|
* 使用 porcelain 输出枚举已注册 Worktree;无法映射到本地 branch 的条目不会被丢弃。
|
|
226
327
|
* Enumerates registered Worktrees through porcelain output; entries that do
|
|
227
328
|
* not map to a local branch are not discarded.
|
|
228
329
|
*/
|
|
229
|
-
async listWorktrees(workspaceRoot) {
|
|
330
|
+
async listWorktrees(workspaceRoot, options = {}) {
|
|
230
331
|
try {
|
|
231
|
-
const result = await
|
|
332
|
+
const result = await this.run(['worktree', 'list', '--porcelain'], workspaceRoot, options);
|
|
232
333
|
return parseWorktrees(result.stdout);
|
|
233
334
|
}
|
|
234
335
|
catch (error) {
|
|
@@ -240,12 +341,12 @@ export class LocalGitAdapter {
|
|
|
240
341
|
* Executes `git worktree add`; when newBranch is supplied, `-b` creates a local
|
|
241
342
|
* branch from the selected base branch.
|
|
242
343
|
*/
|
|
243
|
-
async createWorktree(workspaceRoot, targetPath, branch, newBranch) {
|
|
344
|
+
async createWorktree(workspaceRoot, targetPath, branch, newBranch, options = {}) {
|
|
244
345
|
try {
|
|
245
346
|
const args = newBranch
|
|
246
347
|
? ['worktree', 'add', '-b', newBranch, targetPath, branch]
|
|
247
348
|
: ['worktree', 'add', targetPath, branch];
|
|
248
|
-
await
|
|
349
|
+
await this.run(args, workspaceRoot, options, false);
|
|
249
350
|
}
|
|
250
351
|
catch (error) {
|
|
251
352
|
throw operationError('create worktree', workspaceRoot, targetPath, newBranch ?? branch, error);
|
|
@@ -256,9 +357,9 @@ export class LocalGitAdapter {
|
|
|
256
357
|
* Executes non-forced `git worktree remove <targetPath>` only; Git safety
|
|
257
358
|
* refusals are surfaced as explicit errors.
|
|
258
359
|
*/
|
|
259
|
-
async removeWorktree(workspaceRoot, targetPath) {
|
|
360
|
+
async removeWorktree(workspaceRoot, targetPath, options = {}) {
|
|
260
361
|
try {
|
|
261
|
-
await
|
|
362
|
+
await this.run(['worktree', 'remove', targetPath], workspaceRoot, options, false);
|
|
262
363
|
}
|
|
263
364
|
catch (error) {
|
|
264
365
|
throw operationError('remove worktree', workspaceRoot, targetPath, undefined, error);
|
package/lib/provider/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/provider/git.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/provider/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,MAAM,GACP,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAclE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,0BAA0B,GAAG,KAAK,CAAC;AACzC,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACjD,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,MAAM,YAAY,GAAG,aAAa,CAAC;AACnC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvC,qDAAqD;AACrD,gFAAgF;AAChF,sDAAsD;AACtD,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,MAAM,IAAI,oBAAoB;QACzC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,iCAAiC,CAAC;AAC/E,CAAC;AAED,SAAS,UAAU,CAAC,KAAsB;IACxC,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,GAAG;QACxB,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1C,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1C,WAAW,EAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QACzF,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAsB;IAC1C,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACrC,CAAC;AAED,SAAS,eAAe,CACtB,SAAiB,EACjB,KAAsB,EACtB,UAAmB,EACnB,MAAe;IAEf,OAAO,aAAa,CAClB,mBAAmB,EACnB,mDAAmD,EACnD;QACE,GAAG,UAAU,CAAC,KAAK,CAAC;QACpB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,SAAS;KACV,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CACrB,SAAiB,EACjB,aAAqB,EACrB,UAA8B,EAC9B,MAA0B,EAC1B,KAAc;IAEd,IAAI,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC,EAAE,CAAC;QACxC,OAAO,aAAa,CAAC,sBAAsB,EAAE,OAAO,SAAS,YAAY,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;YACxF,aAAa;YACb,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC;IAC5E,OAAO,aAAa,CAClB,sBAAsB,EACtB,OAAO,SAAS,eAAe,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,EAAE,EAClG;QACE,GAAG,UAAU,CAAC,KAAK,CAAC;QACpB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,SAAS;KACV,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,IAAI,OAAO,GAAwF,EAAE,CAAC;IAEtG,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC;gBACb,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM;aAC9C,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,uFAAuF;AACvF,SAAS,wBAAwB,CAAC,MAAc;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI;YACJ,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAc;IACnD,OAAO,KAAK,YAAY,eAAe,IAAI,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACvG,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IACT,UAAU,CAAS;IACnB,cAAc,CAAoB;IAClC,SAAS,CAAS;IAClB,OAAO,CAAS;IAChB,gBAAgB,CAAS;IACzB,cAAc,CAAS;IACvB,aAAa,CAAe;IAC5B,UAAU,CAAwB;IAEnD,YAAY,UAAkC,EAAE;QAC9C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC;QACnD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACvG,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC;QACzE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,cAAc;YAC7F,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,YAAY;YACnF,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,GAAG,cAAc;YAChH,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;YACrE,MAAM,aAAa,CAAC,sBAAsB,EAAE,+BAA+B,EAAE;gBAC3E,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,cAAc,EAAE,IAAI,CAAC,cAAc;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,GAAG,CACT,IAAuB,EACvB,GAAW,EACX,UAA6B,EAAE,EAC/B,QAAQ,GAAG,IAAI;QAEf,OAAO,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE;YAC7D,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ;YACR,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa;YAC5C,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,aAAqB,EAAE,UAA6B,EAAE;QAC7E,IAAI,MAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CACrB,CAAC,WAAW,EAAE,uBAAuB,CAAC,EACtC,aAAa,EACb,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACrC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxB,MAAM,eAAe,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO;oBAAE,MAAM,cAAc,CAAC,qBAAqB,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC7H,MAAM,aAAa,CAAC,8BAA8B,EAAE,sCAAsC,aAAa,EAAE,EAAE;oBACzG,GAAG,UAAU,CAAC,KAAK,CAAC;iBACrB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,aAAa,CAAC,8BAA8B,EAAE,qCAAqC,aAAa,EAAE,EAAE;gBACxG,aAAa;aACd,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CACZ,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,EAC1C,aAAa,EACb,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACrC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxB,MAAM,eAAe,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO;oBAAE,MAAM,cAAc,CAAC,qBAAqB,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC7H,MAAM,aAAa,CACjB,kCAAkC,EAClC,oCAAoC,aAAa,EAAE,EACnD,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CACzB,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,qBAAqB,CAAC,aAAqB,EAAE,UAA6B,EAAE;QAChF,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAC/B,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAChC,aAAa,EACb,OAAO,CACR,CAAC;YACF,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,aAAa,CAAC,sBAAsB,EAAE,yCAAyC,aAAa,EAAE,EAAE;oBACpG,aAAa;oBACb,SAAS,EAAE,yBAAyB;iBACrC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;gBACnD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;gBAC9B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAqB;gBAAE,MAAM,KAAK,CAAC;YACxD,MAAM,cAAc,CAAC,yBAAyB,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,yBAAyB,CAAC,aAAqB,EAAE,UAA6B,EAAE;QACpF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,CAAC,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,eAAe,CAAC,EACjF,aAAa,EACb,OAAO,CACR,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;gBAAE,KAAK,CAAC,GAAG,EAAE,CAAC;YACrC,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;YACtD,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjD,MAAM,aAAa,CAAC,sBAAsB,EAAE,mDAAmD,aAAa,EAAE,EAAE;oBAC9G,aAAa;oBACb,SAAS,EAAE,6BAA6B;iBACzC,CAAC,CAAC;YACL,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE;oBACR,QAAQ,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACpH,eAAe,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;wBAC9D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;wBAC/B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;iBAClD;gBACD,UAAU;aACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAqB;gBAAE,MAAM,KAAK,CAAC;YACxD,MAAM,cAAc,CAAC,6BAA6B,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,aAAqB,EAAE,UAA6B,EAAE;QACvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,CAAC,cAAc,EAAE,8BAA8B,EAAE,aAAa,CAAC,EAC/D,aAAa,EACb,OAAO,CACR,CAAC;YACF,OAAO,MAAM,CAAC,MAAM;iBACjB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;iBACnE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,CAAC,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,6BAA6B,CACjC,aAAqB,EACrB,UAA6B,EAAE;QAE/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,CAAC,cAAc,EAAE,gDAAgD,EAAE,aAAa,CAAC,EACjF,aAAa,EACb,OAAO,CACR,CAAC;YACF,OAAO,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,MAAM,cAAc,CAAC,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC9C,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC;gBACzC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC;aAC3C,CAAC,CAAC;YACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAClC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM;gBAC7C,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAU,CAAC;gBACrD,CAAC,CAAC,EAAE,CAAC,CACR,CAAC;YACF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7B,IAAI;gBACJ,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5F,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,aAAqB,EAAE,UAA6B,EAAE;QACxE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EACnC,aAAa,EACb,OAAO,CACR,CAAC;YACF,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,CAAC,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAClB,aAAqB,EACrB,UAAkB,EAClB,MAAc,EACd,SAAkB,EAClB,UAA6B,EAAE;QAE/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS;gBACpB,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC;gBAC1D,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,CAAC,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,IAAI,MAAM,EAAE,KAAK,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,aAAqB,EAAE,UAAkB,EAAE,UAA6B,EAAE;QAC7F,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,CAAC,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;CACF"}
|
package/lib/provider/index.d.ts
CHANGED
|
@@ -9,5 +9,9 @@
|
|
|
9
9
|
export { LocalGitAdapter } from './git.js';
|
|
10
10
|
export { WorkspaceShardedSidecarRepository, validateSidecarSnapshot, } from './sidecar.js';
|
|
11
11
|
export { SIDECAR_SCHEMA_VERSION, LEGACY_SIDECAR_SCHEMA_VERSION, WorktreeProviderError, isWorktreeProviderError, providerError, } from './types.js';
|
|
12
|
-
export
|
|
12
|
+
export { CrossProcessMutationLock } from './mutation-lock.js';
|
|
13
|
+
export { createWorktreeMutationToken } from './mutation-token.js';
|
|
14
|
+
export { createRepositoryFingerprint } from './repository-fingerprint.js';
|
|
15
|
+
export { WorktreeMutationTransaction } from './transaction.js';
|
|
16
|
+
export type { DshReadAdapter, DshSessionSummary, DshWorkspaceSummary, GitBranchWorktreeInfo, GitCommandOptions, GitSubprocessRuntime, GitWorktreeAdapter, GitRepositoryInspection, GitWorktreeInfo, LockedSidecarStore, PendingOperation, RecoveryIssue, RepositoryIdentity, SidecarMutation, SidecarSnapshot, SidecarStore, } from './types.js';
|
|
13
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/lib/provider/index.js
CHANGED
|
@@ -9,4 +9,8 @@
|
|
|
9
9
|
export { LocalGitAdapter } from './git.js';
|
|
10
10
|
export { WorkspaceShardedSidecarRepository, validateSidecarSnapshot, } from './sidecar.js';
|
|
11
11
|
export { SIDECAR_SCHEMA_VERSION, LEGACY_SIDECAR_SCHEMA_VERSION, WorktreeProviderError, isWorktreeProviderError, providerError, } from './types.js';
|
|
12
|
+
export { CrossProcessMutationLock } from './mutation-lock.js';
|
|
13
|
+
export { createWorktreeMutationToken } from './mutation-token.js';
|
|
14
|
+
export { createRepositoryFingerprint } from './repository-fingerprint.js';
|
|
15
|
+
export { WorktreeMutationTransaction } from './transaction.js';
|
|
12
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface MutationLockOptions {
|
|
2
|
+
readonly acquisitionTimeoutMs?: number;
|
|
3
|
+
readonly leaseMs?: number;
|
|
4
|
+
readonly heartbeatMs?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface MutationLockHandle {
|
|
7
|
+
readonly keyHash: string;
|
|
8
|
+
assertHeld(): void;
|
|
9
|
+
release(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A small cross-process lease lock backed by an atomically-created directory.
|
|
13
|
+
* An owned directory is never reclaimed based on age alone: its stale owner
|
|
14
|
+
* must also be provably dead on the same host. An ownerless directory is only
|
|
15
|
+
* possible during interrupted lock acquisition, so it can be reclaimed after
|
|
16
|
+
* one lease interval without stealing an alive Git operation.
|
|
17
|
+
*/
|
|
18
|
+
export declare class CrossProcessMutationLock {
|
|
19
|
+
readonly lockRoot: string;
|
|
20
|
+
private readonly acquisitionTimeoutMs;
|
|
21
|
+
private readonly leaseMs;
|
|
22
|
+
private readonly heartbeatMs;
|
|
23
|
+
constructor({ lockRoot, acquisitionTimeoutMs, leaseMs, heartbeatMs, }: MutationLockOptions & {
|
|
24
|
+
readonly lockRoot: string;
|
|
25
|
+
});
|
|
26
|
+
getLockPath(key: string): string;
|
|
27
|
+
run<T>(key: string, operation: (handle: MutationLockHandle) => Promise<T>): Promise<T>;
|
|
28
|
+
private acquire;
|
|
29
|
+
private reclaimIfDead;
|
|
30
|
+
private abandon;
|
|
31
|
+
}
|
|
32
|
+
export declare const MUTATION_LOCK_DEFAULTS: Readonly<{
|
|
33
|
+
acquisitionTimeoutMs: 10000;
|
|
34
|
+
leaseMs: 30000;
|
|
35
|
+
heartbeatMs: 5000;
|
|
36
|
+
}>;
|
|
37
|
+
//# sourceMappingURL=mutation-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-lock.d.ts","sourceRoot":"","sources":["../../src/provider/mutation-lock.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,UAAU,IAAI,IAAI,CAAC;IACnB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAmDD;;;;;;GAMG;AACH,qBAAa,wBAAwB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,EACV,QAAQ,EACR,oBAAqD,EACrD,OAA0B,EAC1B,WAAkC,GACnC,EAAE,mBAAmB,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAiBtD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAK1B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAS9E,OAAO;YAgHP,aAAa;YA+Bb,OAAO;CAetB;AAED,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAC"}
|