dsh-gitnexus-plus 0.1.2 → 0.1.4
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-CN.md +189 -0
- package/README.md +219 -597
- package/lib/bin/graph-helper.d.ts +21 -0
- package/lib/bin/graph-helper.d.ts.map +1 -0
- package/lib/bin/graph-helper.js +71 -0
- package/lib/bin/graph-helper.js.map +1 -0
- package/lib/client.js +4107 -2029
- package/lib/gitnexus/analyze.d.ts +48 -8
- package/lib/gitnexus/analyze.d.ts.map +1 -1
- package/lib/gitnexus/analyze.js +376 -75
- package/lib/gitnexus/analyze.js.map +1 -1
- package/lib/gitnexus/commands.d.ts +8 -1
- package/lib/gitnexus/commands.d.ts.map +1 -1
- package/lib/gitnexus/commands.js +19 -0
- package/lib/gitnexus/commands.js.map +1 -1
- package/lib/gitnexus/coverage.d.ts +16 -0
- package/lib/gitnexus/coverage.d.ts.map +1 -1
- package/lib/gitnexus/coverage.js +58 -1
- package/lib/gitnexus/coverage.js.map +1 -1
- package/lib/gitnexus/delta.d.ts +144 -0
- package/lib/gitnexus/delta.d.ts.map +1 -0
- package/lib/gitnexus/delta.js +347 -0
- package/lib/gitnexus/delta.js.map +1 -0
- package/lib/gitnexus/git-activity.d.ts +77 -0
- package/lib/gitnexus/git-activity.d.ts.map +1 -1
- package/lib/gitnexus/git-activity.js +327 -8
- package/lib/gitnexus/git-activity.js.map +1 -1
- package/lib/gitnexus/graph.d.ts +126 -0
- package/lib/gitnexus/graph.d.ts.map +1 -0
- package/lib/gitnexus/graph.js +472 -0
- package/lib/gitnexus/graph.js.map +1 -0
- package/lib/gitnexus/root.d.ts +0 -3
- package/lib/gitnexus/root.d.ts.map +1 -1
- package/lib/gitnexus/root.js +64 -5
- package/lib/gitnexus/root.js.map +1 -1
- package/lib/gitnexus/scan.d.ts +2 -0
- package/lib/gitnexus/scan.d.ts.map +1 -1
- package/lib/gitnexus/scan.js +3 -2
- package/lib/gitnexus/scan.js.map +1 -1
- package/lib/gitnexus/search.d.ts +21 -8
- package/lib/gitnexus/search.d.ts.map +1 -1
- package/lib/gitnexus/search.js +87 -13
- package/lib/gitnexus/search.js.map +1 -1
- package/lib/index.d.ts +6 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +170 -2
- package/lib/index.js.map +1 -1
- package/lib/routes/analyze.d.ts +3 -2
- package/lib/routes/analyze.d.ts.map +1 -1
- package/lib/routes/analyze.js +8 -2
- package/lib/routes/analyze.js.map +1 -1
- package/lib/routes/coverage.d.ts +2 -1
- package/lib/routes/coverage.d.ts.map +1 -1
- package/lib/routes/coverage.js +53 -1
- package/lib/routes/coverage.js.map +1 -1
- package/lib/routes/delta.d.ts +22 -0
- package/lib/routes/delta.d.ts.map +1 -0
- package/lib/routes/delta.js +50 -0
- package/lib/routes/delta.js.map +1 -0
- package/lib/routes/file-diff.d.ts +19 -0
- package/lib/routes/file-diff.d.ts.map +1 -0
- package/lib/routes/file-diff.js +69 -0
- package/lib/routes/file-diff.js.map +1 -0
- package/lib/routes/file-history.d.ts +21 -0
- package/lib/routes/file-history.d.ts.map +1 -0
- package/lib/routes/file-history.js +69 -0
- package/lib/routes/file-history.js.map +1 -0
- package/lib/routes/graph.d.ts +22 -0
- package/lib/routes/graph.d.ts.map +1 -0
- package/lib/routes/graph.js +71 -0
- package/lib/routes/graph.js.map +1 -0
- package/package.json +3 -2
package/lib/gitnexus/analyze.js
CHANGED
|
@@ -21,12 +21,20 @@
|
|
|
21
21
|
*
|
|
22
22
|
* THE ONE RULE THAT MATTERS
|
|
23
23
|
* -------------------------
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
24
|
+
* This runner never **constructs** a sandbox policy and never chooses a mode. It may
|
|
25
|
+
* forward a policy the host resolved (`options.sandboxPolicy`), and the host may only
|
|
26
|
+
* fill in the workspace root — see `src/index.ts`. The reason is measured, not
|
|
27
|
+
* theoretical: an agentless route has no session, so `sandboxPolicy.resolve()` falls
|
|
28
|
+
* back to `config.workspaceRoot ?? process.cwd()` and the sandbox derives its write
|
|
29
|
+
* capability SID from *that* path. The repository's own grant then never applies, and
|
|
30
|
+
* every write inside `.gitnexus` is refused — the failure this plugin reported as
|
|
31
|
+
* "sandbox denies .gitnexus". Supplying the workspace root is not escalation: the mode
|
|
32
|
+
* still comes from the deployment, and a read-only deployment stays read-only.
|
|
33
|
+
*
|
|
34
|
+
* A denial is reported as a denial, not retried wider: the same rule the subagent
|
|
35
|
+
* prompt states, for the same reason.
|
|
29
36
|
*/
|
|
37
|
+
import { existsSync, mkdirSync, readFileSync, rmSync } from 'node:fs';
|
|
30
38
|
import path from 'node:path';
|
|
31
39
|
import { defaultGitnexusHome, effectiveSkipFts } from './commands.js';
|
|
32
40
|
import { findGitnexusCli } from './toolchain.js';
|
|
@@ -73,9 +81,16 @@ export function analyzeCommandLine(cliPath, repoPath, options = {}) {
|
|
|
73
81
|
// is spawned through `node`. This is the better shape when available: no shim, no
|
|
74
82
|
// `.cmd`/`.ps1` selection, and therefore no reliance on the shell's call operator.
|
|
75
83
|
const viaNode = options.viaNode === true;
|
|
84
|
+
// Repair and skip are contradictory, and both flags are accepted by the CLI without
|
|
85
|
+
// complaining: `--skip-fts --repair-fts` exits 0 having done nothing. Guard here
|
|
86
|
+
// rather than trusting callers to keep them apart.
|
|
87
|
+
const repairFts = options.repairFts === true;
|
|
88
|
+
const skipFts = options.skipFts === true && !repairFts;
|
|
89
|
+
const force = options.force === true && !repairFts;
|
|
76
90
|
const args = `analyze --index-only` +
|
|
77
|
-
`${
|
|
78
|
-
`${
|
|
91
|
+
`${repairFts ? ' --repair-fts' : ''}` +
|
|
92
|
+
`${skipFts ? ' --skip-fts' : ''}` +
|
|
93
|
+
`${force ? ' --force' : ''} ` +
|
|
79
94
|
quoteFor(flavor, repoPath);
|
|
80
95
|
const head = viaNode ? `node ${quoteFor(flavor, cliPath)}` : quoteFor(flavor, cliPath);
|
|
81
96
|
// On Windows a `.cmd` or `.ps1` reached by absolute path needs `&`. POSIX needs none,
|
|
@@ -97,11 +112,163 @@ export function analyzeCommandLine(cliPath, repoPath, options = {}) {
|
|
|
97
112
|
/**
|
|
98
113
|
* A sandbox refusal, recognised from the marker DSH writes into the output.
|
|
99
114
|
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
115
|
+
* The marker is the only reliable signal. It used to also match a bare `EPERM`, which
|
|
116
|
+
* is how a transient Windows file lock got reported as "the sandbox refused this
|
|
117
|
+
* write" — and the operator was told to stop trying, when retrying was the answer.
|
|
102
118
|
*/
|
|
103
119
|
function looksDenied(text) {
|
|
104
|
-
return /\[sandbox:[^\]]*denied/i.test(text) || /access is denied
|
|
120
|
+
return /\[sandbox:[^\]]*denied/i.test(text) || /access is denied/i.test(text);
|
|
121
|
+
}
|
|
122
|
+
/** Delay before the single transient-lock retry. Long enough for a scanner to let go. */
|
|
123
|
+
const RETRY_DELAY_MS = 1500;
|
|
124
|
+
/**
|
|
125
|
+
* Whether a failure looks like a transient file lock rather than a policy refusal.
|
|
126
|
+
*
|
|
127
|
+
* Measured on GitNexus 1.6.12: the first write inside `.gitnexus` is
|
|
128
|
+
* `lbug.init.lock`, opened with `O_CREAT | O_EXCL`, and Windows can refuse it with
|
|
129
|
+
* `EPERM` while another scanner or a previous process holds the directory. The same
|
|
130
|
+
* class produces `unable to acquire init lock` when a crashed run left the file behind.
|
|
131
|
+
* Both are worth one retry; a sandbox marker never is, and neither is a denied
|
|
132
|
+
* directory creation — see {@link isSandboxStoreDenied}.
|
|
133
|
+
*/
|
|
134
|
+
function isTransientLock(text) {
|
|
135
|
+
if (/\[sandbox:[^\]]*denied/i.test(text))
|
|
136
|
+
return false;
|
|
137
|
+
// The parse store is a directory the analyzer must create; a retry cannot grant a
|
|
138
|
+
// right the confined token does not have, so that class is handled separately.
|
|
139
|
+
if (isSandboxStoreDenied(text))
|
|
140
|
+
return false;
|
|
141
|
+
// A refused `spawn` is the sandbox blocking a child process (the FTS installer), not a
|
|
142
|
+
// held file: waiting and retrying changes nothing.
|
|
143
|
+
if (/spawn EPERM/i.test(text))
|
|
144
|
+
return false;
|
|
145
|
+
if (/unable to acquire init lock/i.test(text))
|
|
146
|
+
return true;
|
|
147
|
+
return /(EPERM|EBUSY|resource busy)/i.test(text) && /\.gitnexus|init\.lock|lbug/i.test(text);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Whether GitNexus tried to start a child process and the sandbox refused.
|
|
151
|
+
*
|
|
152
|
+
* Measured on a `--repair-fts` run: `Analysis failed: spawn EPERM`. The FTS extension is
|
|
153
|
+
* installed/loaded out of process, which a confined shell denies. This is the same class
|
|
154
|
+
* as the respawn problem `GITNEXUS_MEMORY=off` was added for — but this one is a child
|
|
155
|
+
* the analyzer starts deliberately, and no flag suppresses it.
|
|
156
|
+
*/
|
|
157
|
+
function looksSpawnDenied(text) {
|
|
158
|
+
return /spawn EPERM/i.test(text);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Whether the FTS extension was found and still could not be loaded.
|
|
162
|
+
*
|
|
163
|
+
* That is an upstream runtime problem, not a sandbox refusal and not something a retry
|
|
164
|
+
* can fix: on Windows it usually names a missing DLL (`找不到指定的模块`), which the
|
|
165
|
+
* upstream message traces to the VC++ 2015-2022 x64 redistributable or OpenSSL 3.
|
|
166
|
+
*/
|
|
167
|
+
function looksFtsUnloadable(text) {
|
|
168
|
+
return (/FTS extension file was found but could not be loaded/i.test(text) ||
|
|
169
|
+
(/failed to load library/i.test(text) && /fts/i.test(text)));
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Whether the parse worker was refused permission to create its cache directories.
|
|
173
|
+
*
|
|
174
|
+
* Measured in a confined DSH profile: the token can create **files** under `.gitnexus`
|
|
175
|
+
* (`lbug.init.lock` succeeds) but not **directories**, so `persistParsedFileShardSync`
|
|
176
|
+
* dies at `mkdir .gitnexus/parsedfile-store` and the pool trips its circuit breaker.
|
|
177
|
+
* Pre-creating the directory does not help either — GitNexus deletes it at the start of
|
|
178
|
+
* every parse, and that delete is refused for the same reason (0.1.3 shipped exactly
|
|
179
|
+
* that workaround and produced `EPERM … rmdir`). This is a property of the deployment,
|
|
180
|
+
* so the honest answer is one precise message pointing at the terminal, not a retry.
|
|
181
|
+
*/
|
|
182
|
+
function isSandboxStoreDenied(text) {
|
|
183
|
+
return (/EPERM[^\n]*mkdir[^\n]*\.gitnexus[\\/](parsedfile-store|parsedfile-cache|parse-cache)/i.test(text) ||
|
|
184
|
+
/mkdir[^\n]*\.gitnexus[\\/](parsedfile-store|parsedfile-cache|parse-cache)[^\n]*EPERM/i.test(text));
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Remove the init lock a crashed run left behind, so the retry can take it.
|
|
188
|
+
*
|
|
189
|
+
* Safe by construction: this runner holds one run per repository, so no other analyze
|
|
190
|
+
* started by this plugin can be inside the window. A live lock from another tool is
|
|
191
|
+
* left to GitNexus's own staleness detection — this only clears the file, it does not
|
|
192
|
+
* decide who owns it.
|
|
193
|
+
*/
|
|
194
|
+
function clearStaleLock(repoPath) {
|
|
195
|
+
try {
|
|
196
|
+
rmSync(path.join(repoPath, '.gitnexus', 'lbug.init.lock'), { force: true });
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
/* the retry may still succeed once a scanner releases it */
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Whether the manifest on disk records no commit.
|
|
204
|
+
*
|
|
205
|
+
* In a confined shell the analyzer cannot start `git`, so it writes an empty
|
|
206
|
+
* `lastCommit` even on a successful run. The index itself is fine — the baseline is not
|
|
207
|
+
* — and that is what makes the refresh gate answer "无法确认" instead of "已是最新".
|
|
208
|
+
* Reported to the operator rather than repaired here: the manifest belongs to GitNexus,
|
|
209
|
+
* and writing a commit into it is the analyzer's decision, not this plugin's.
|
|
210
|
+
*/
|
|
211
|
+
function lacksCommitBaseline(repoPath) {
|
|
212
|
+
try {
|
|
213
|
+
const raw = JSON.parse(readFileSync(path.join(repoPath, '.gitnexus', 'gitnexus.json'), 'utf8'));
|
|
214
|
+
return typeof raw.lastCommit !== 'string' || raw.lastCommit === '';
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* The **durable** caches, created from the host before the shell starts.
|
|
222
|
+
*
|
|
223
|
+
* A worker running under a restricted host token can be denied `mkdir` on the project's
|
|
224
|
+
* inherited `.gitnexus` ACL even though it can write files there. The failure is EPERM
|
|
225
|
+
* at the first shard write and takes the whole parse phase down with it. Creating these
|
|
226
|
+
* two from the host, before the shell starts, makes the worker use directories that
|
|
227
|
+
* already exist. They are never cleared between runs, so a pre-created one is inert.
|
|
228
|
+
*/
|
|
229
|
+
const ANALYZE_CACHE_DIRS = ['parsedfile-cache', 'parse-cache'];
|
|
230
|
+
/**
|
|
231
|
+
* GitNexus's **run-scoped** parsed-file store. Deliberately not pre-created.
|
|
232
|
+
*
|
|
233
|
+
* `parse-impl` calls `clearParsedFileStore()` unconditionally at the start of parsing,
|
|
234
|
+
* which is `fs.rm(dir, { recursive: true, force: true })`. `force` only forgives a
|
|
235
|
+
* missing directory — not a refusal or a lock. So a directory that exists there must be
|
|
236
|
+
* deleted before every parse, and 0.1.3 pre-created exactly that: it fixed a worker
|
|
237
|
+
* `mkdir` and introduced a delete the restricted process has to perform on a directory
|
|
238
|
+
* the **host** created. When that delete is denied or briefly locked, the parse dies
|
|
239
|
+
* with `EPERM … rmdir '<repo>\\.gitnexus\\parsedfile-store'` — the failure reported
|
|
240
|
+
* against 0.1.3.
|
|
241
|
+
*
|
|
242
|
+
* Measured against GitNexus 1.6.12: with the directory absent, a cold `--force` parse
|
|
243
|
+
* succeeds and never creates it, while the durable chunk directories it does create
|
|
244
|
+
* show the confined process can `mkdir`. So the store is left to GitNexus, and a
|
|
245
|
+
* leftover from an older plugin version is removed before spawning instead.
|
|
246
|
+
*/
|
|
247
|
+
const RUN_SCOPED_STORE = 'parsedfile-store';
|
|
248
|
+
function prepareAnalyzeCacheDirs(repoPath) {
|
|
249
|
+
const indexDir = path.join(repoPath, '.gitnexus');
|
|
250
|
+
if (!existsSync(indexDir))
|
|
251
|
+
return null;
|
|
252
|
+
// Best effort. If this cannot be removed, GitNexus's own clear gets the next attempt;
|
|
253
|
+
// failing the run here would only replace one EPERM with a less accurate one.
|
|
254
|
+
try {
|
|
255
|
+
rmSync(path.join(indexDir, RUN_SCOPED_STORE), { recursive: true, force: true });
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
/* the analyzer's clear is the next attempt; do not pre-empt it */
|
|
259
|
+
}
|
|
260
|
+
for (const name of ANALYZE_CACHE_DIRS) {
|
|
261
|
+
const target = path.join(indexDir, name);
|
|
262
|
+
try {
|
|
263
|
+
mkdirSync(target, { recursive: true });
|
|
264
|
+
}
|
|
265
|
+
catch (cause) {
|
|
266
|
+
return (`无法创建 GitNexus 缓存目录(${path.join('.gitnexus', name)}):` +
|
|
267
|
+
`${String(cause?.message ?? cause)}。` +
|
|
268
|
+
'请给项目 .gitnexus 目录写权限,或在普通终端执行下面的命令。');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return null;
|
|
105
272
|
}
|
|
106
273
|
/** Keep the last `limit` characters, on a line boundary when one is available. */
|
|
107
274
|
function tail(text, limit) {
|
|
@@ -117,14 +284,35 @@ export function createAnalyzeRunner(options) {
|
|
|
117
284
|
const outputLimit = options.outputLimit ?? DEFAULT_OUTPUT_LIMIT;
|
|
118
285
|
const tailLimit = options.tailLimit ?? DEFAULT_TAIL_LIMIT;
|
|
119
286
|
const now = options.now ?? (() => Date.now());
|
|
287
|
+
const retryDelayMs = options.retryDelayMs ?? RETRY_DELAY_MS;
|
|
120
288
|
const shellFlavor = process.platform === 'win32' ? 'win32' : 'posix';
|
|
121
289
|
const runs = new Map();
|
|
122
290
|
const inFlight = new Map();
|
|
291
|
+
// One status per repository, and a long session can touch many. The map used to grow
|
|
292
|
+
// with every repository ever visited, each entry holding a 4 KB output tail; an idle
|
|
293
|
+
// panel never needs more than the repositories it can still show.
|
|
294
|
+
const RUNS_MAX = 32;
|
|
295
|
+
/** Store the latest status, evicting finished entries beyond the cap, oldest first. */
|
|
296
|
+
const rememberRun = (key, status) => {
|
|
297
|
+
runs.delete(key);
|
|
298
|
+
runs.set(key, status);
|
|
299
|
+
if (runs.size <= RUNS_MAX)
|
|
300
|
+
return;
|
|
301
|
+
for (const [other, entry] of runs) {
|
|
302
|
+
if (entry.state === 'running')
|
|
303
|
+
continue;
|
|
304
|
+
runs.delete(other);
|
|
305
|
+
if (runs.size <= RUNS_MAX)
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
};
|
|
123
309
|
/** The shape a status starts from, before any run has touched it. */
|
|
124
310
|
const BLANK = {
|
|
125
311
|
state: 'failed',
|
|
126
312
|
force: false,
|
|
313
|
+
repairFts: false,
|
|
127
314
|
command: '',
|
|
315
|
+
attempts: 0,
|
|
128
316
|
startedAt: 0,
|
|
129
317
|
finishedAt: null,
|
|
130
318
|
exitCode: null,
|
|
@@ -142,7 +330,7 @@ export function createAnalyzeRunner(options) {
|
|
|
142
330
|
// silent no-op. The spread above cannot express that.
|
|
143
331
|
finishedAt: patch.finishedAt ?? now(),
|
|
144
332
|
};
|
|
145
|
-
|
|
333
|
+
rememberRun(repoPath, next);
|
|
146
334
|
inFlight.delete(repoPath);
|
|
147
335
|
return next;
|
|
148
336
|
};
|
|
@@ -151,11 +339,18 @@ export function createAnalyzeRunner(options) {
|
|
|
151
339
|
// Named `request`, not `options`: the runner's own configuration is the outer
|
|
152
340
|
// `options`, and shadowing it silently dropped `toolchain`, `memoryOff` and
|
|
153
341
|
// `heapMb` from every run built after the force argument was added.
|
|
154
|
-
|
|
342
|
+
//
|
|
343
|
+
// Repair wins over force: a caller asking for both wants the smaller, more targeted
|
|
344
|
+
// operation, and running a full rebuild to fix FTS would be a much larger change
|
|
345
|
+
// than the button said. `analyzeCommandLine` enforces the same precedence so the
|
|
346
|
+
// displayed command cannot disagree with the one executed.
|
|
347
|
+
const repairFts = request.repairFts === true;
|
|
348
|
+
const force = repairFts ? false : request.force === true;
|
|
155
349
|
// Both decisions are per repository, not per plugin: the skip-fts policy depends
|
|
156
350
|
// on the index's own FTS capability, and the registry redirect belongs beside the
|
|
157
|
-
// index so it stays inside the workspace the host was granted.
|
|
158
|
-
|
|
351
|
+
// index so it stays inside the workspace the host was granted. A repair run never
|
|
352
|
+
// skips FTS — that would be the one flag combination that does nothing at all.
|
|
353
|
+
const skipFts = repairFts ? false : effectiveSkipFts(key, options.skipFts === true);
|
|
159
354
|
const gitnexusHome = options.gitnexusHome ?? defaultGitnexusHome(key);
|
|
160
355
|
// One run per repository. Two concurrent `analyze` processes would contend for the
|
|
161
356
|
// same store, and the second would report a failure that says nothing about the
|
|
@@ -163,11 +358,18 @@ export function createAnalyzeRunner(options) {
|
|
|
163
358
|
const running = runs.get(key);
|
|
164
359
|
if (running !== undefined && running.state === 'running')
|
|
165
360
|
return running;
|
|
361
|
+
// The command as a human would type it, for the states that never reach a real
|
|
362
|
+
// invocation. Kept in one place so an early return cannot describe a different
|
|
363
|
+
// operation than the one the request asked for.
|
|
364
|
+
const previewCommand = `gitnexus analyze --index-only` +
|
|
365
|
+
`${repairFts ? ' --repair-fts' : ''}` +
|
|
366
|
+
`${force ? ' --force' : ''}`;
|
|
166
367
|
if (shell === null) {
|
|
167
368
|
return finish(key, {
|
|
168
369
|
state: 'unavailable',
|
|
169
370
|
force,
|
|
170
|
-
|
|
371
|
+
repairFts,
|
|
372
|
+
command: previewCommand,
|
|
171
373
|
startedAt: now(),
|
|
172
374
|
output: '',
|
|
173
375
|
message: '当前部署没有提供 shell 执行器(ctx.shell 未挂载),无法运行命令。' +
|
|
@@ -182,7 +384,8 @@ export function createAnalyzeRunner(options) {
|
|
|
182
384
|
return finish(key, {
|
|
183
385
|
state: 'unavailable',
|
|
184
386
|
force,
|
|
185
|
-
|
|
387
|
+
repairFts,
|
|
388
|
+
command: previewCommand,
|
|
186
389
|
startedAt: now(),
|
|
187
390
|
output: '',
|
|
188
391
|
message: '本机没有找到 gitnexus 命令,无法执行。安装后重试:`npm i -g gitnexus`。' +
|
|
@@ -198,23 +401,42 @@ export function createAnalyzeRunner(options) {
|
|
|
198
401
|
heapMb: options.heapMb,
|
|
199
402
|
viaNode: cli.viaNode,
|
|
200
403
|
force,
|
|
404
|
+
repairFts,
|
|
201
405
|
skipFts,
|
|
202
406
|
gitnexusHome,
|
|
203
407
|
});
|
|
408
|
+
const cacheError = prepareAnalyzeCacheDirs(key);
|
|
409
|
+
if (cacheError !== null) {
|
|
410
|
+
return finish(key, {
|
|
411
|
+
state: 'failed',
|
|
412
|
+
force,
|
|
413
|
+
repairFts,
|
|
414
|
+
command,
|
|
415
|
+
startedAt: now(),
|
|
416
|
+
output: '',
|
|
417
|
+
message: cacheError,
|
|
418
|
+
});
|
|
419
|
+
}
|
|
204
420
|
const controller = new AbortController();
|
|
205
421
|
inFlight.set(key, controller);
|
|
206
422
|
const started = {
|
|
207
423
|
repoPath: key,
|
|
208
424
|
state: 'running',
|
|
209
425
|
force,
|
|
426
|
+
repairFts,
|
|
210
427
|
command,
|
|
428
|
+
attempts: 1,
|
|
211
429
|
startedAt: now(),
|
|
212
430
|
finishedAt: null,
|
|
213
431
|
exitCode: null,
|
|
214
432
|
message: null,
|
|
215
433
|
output: '',
|
|
216
434
|
};
|
|
217
|
-
|
|
435
|
+
rememberRun(key, started);
|
|
436
|
+
// The host resolves the policy; this runner only carries it. Absent when the
|
|
437
|
+
// deployment has no `sandboxPolicy` service, and then the executor's own default
|
|
438
|
+
// applies — exactly as before.
|
|
439
|
+
const sandboxPolicy = options.sandboxPolicy?.(key);
|
|
218
440
|
const spec = shell.resolve({
|
|
219
441
|
command,
|
|
220
442
|
workdir: key,
|
|
@@ -222,68 +444,147 @@ export function createAnalyzeRunner(options) {
|
|
|
222
444
|
onExpiry: 'kill',
|
|
223
445
|
stdoutMaxBytes: outputLimit,
|
|
224
446
|
signal: controller.signal,
|
|
225
|
-
|
|
447
|
+
...(sandboxPolicy === undefined ? {} : { sandboxPolicy }),
|
|
226
448
|
});
|
|
227
449
|
void (async () => {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
450
|
+
// A single retry, and only for one class of failure.
|
|
451
|
+
//
|
|
452
|
+
// Measured: GitNexus's first write inside `.gitnexus` is the init lock, and on
|
|
453
|
+
// Windows that `open` can fail with `EPERM` while a virus scanner or the indexer
|
|
454
|
+
// holds the directory — a transient refusal, not a policy one. The ACL for that
|
|
455
|
+
// path was verified healthy (`WRITE_DAC`/`WRITE_OWNER` present, no foreign
|
|
456
|
+
// entries), so retrying once after clearing a stale lock is the response, not an
|
|
457
|
+
// escalation. Anything carrying the sandbox's own marker is never retried.
|
|
458
|
+
for (let attempt = 1; attempt <= 2; attempt += 1) {
|
|
459
|
+
let execution;
|
|
460
|
+
try {
|
|
461
|
+
execution = await shell.execute(spec);
|
|
462
|
+
}
|
|
463
|
+
catch (cause) {
|
|
464
|
+
// `execute` rejects only for infrastructure failures — an unusable workdir, no
|
|
465
|
+
// shell. A cancellation rejects here too, before a handle exists.
|
|
466
|
+
const aborted = controller.signal.aborted;
|
|
467
|
+
finish(key, {
|
|
468
|
+
state: aborted ? 'cancelled' : 'failed',
|
|
469
|
+
attempts: attempt,
|
|
470
|
+
message: aborted ? '已取消。' : `无法启动命令:${String(cause?.message ?? cause)}`,
|
|
471
|
+
});
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
let result;
|
|
475
|
+
try {
|
|
476
|
+
result = await execution.result();
|
|
477
|
+
}
|
|
478
|
+
catch (cause) {
|
|
479
|
+
finish(key, {
|
|
480
|
+
state: 'failed',
|
|
481
|
+
attempts: attempt,
|
|
482
|
+
message: `执行失败:${String(cause?.message ?? cause)}`,
|
|
483
|
+
});
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
const combined = `${result.stdout?.text ?? ''}${result.stderr?.text ?? ''}`;
|
|
487
|
+
const body = tail(combined, tailLimit);
|
|
488
|
+
const exitCode = typeof result.exitCode === 'number' ? result.exitCode : null;
|
|
489
|
+
if (attempt === 1 &&
|
|
490
|
+
result.timedOut !== true &&
|
|
491
|
+
!controller.signal.aborted &&
|
|
492
|
+
isTransientLock(combined)) {
|
|
493
|
+
clearStaleLock(key);
|
|
494
|
+
await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
|
|
495
|
+
if (controller.signal.aborted) {
|
|
496
|
+
finish(key, { state: 'cancelled', attempts: attempt, exitCode, output: body, message: '已取消。' });
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
continue;
|
|
500
|
+
}
|
|
501
|
+
// Order matters. A denial can also be a non-zero exit, and reporting it as a
|
|
502
|
+
// generic failure sends the operator looking for a GitNexus bug that is not
|
|
503
|
+
// there. Cancellation is checked before timeout because a kill from `cancel()`
|
|
504
|
+
// and a kill from the deadline both surface as a killed process.
|
|
505
|
+
if (controller.signal.aborted) {
|
|
506
|
+
finish(key, { state: 'cancelled', attempts: attempt, exitCode, output: body, message: '已取消。' });
|
|
507
|
+
}
|
|
508
|
+
else if (result.timedOut === true) {
|
|
509
|
+
finish(key, {
|
|
510
|
+
state: 'timed-out',
|
|
511
|
+
attempts: attempt,
|
|
512
|
+
exitCode,
|
|
513
|
+
output: body,
|
|
514
|
+
message: `超过 ${Math.round(timeoutMs / 1000)} 秒上限已终止。大仓库的全量重建可能需要更长时间。`,
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
else if (looksFtsUnloadable(combined)) {
|
|
518
|
+
// The extension is present and still cannot load: an upstream runtime gap, not
|
|
519
|
+
// a sandbox refusal and not a retry candidate.
|
|
520
|
+
finish(key, {
|
|
521
|
+
state: 'failed',
|
|
522
|
+
attempts: attempt,
|
|
523
|
+
exitCode,
|
|
524
|
+
output: body,
|
|
525
|
+
message: 'FTS 扩展文件存在但加载失败 —— 通常是 Windows 缺少原生运行时(VC++ 2015-2022 x64 与 OpenSSL 3),' +
|
|
526
|
+
'不是索引损坏,也不是本插件能修的。装好运行时后再试;在此之前搜索仍按名称/路径匹配。',
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
else if (looksSpawnDenied(combined)) {
|
|
530
|
+
finish(key, {
|
|
531
|
+
state: 'denied',
|
|
532
|
+
attempts: attempt,
|
|
533
|
+
exitCode,
|
|
534
|
+
output: body,
|
|
535
|
+
message: '分析器要启动一个子进程(FTS 扩展的安装/加载),当前沙箱不允许 spawn。请在普通终端执行下面的命令;' +
|
|
536
|
+
'若终端里仍报扩展无法加载,那是缺少原生运行时。',
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
else if (isSandboxStoreDenied(combined)) {
|
|
540
|
+
// Deterministic, not transient: the confined token may create files in
|
|
541
|
+
// `.gitnexus` but not directories, and the parse worker needs a directory.
|
|
542
|
+
// Retrying would only spend another parse; say what to do instead.
|
|
543
|
+
finish(key, {
|
|
544
|
+
state: 'denied',
|
|
545
|
+
attempts: attempt,
|
|
546
|
+
exitCode,
|
|
547
|
+
output: body,
|
|
548
|
+
message: '分析器的解析阶段要在 .gitnexus 下创建缓存目录,当前沙箱不允许(可以建文件、不能建目录),' +
|
|
549
|
+
'预建目录也会被 GitNexus 在解析开始时删除。请在普通终端执行下面的命令,再回到面板刷新。',
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
else if (looksDenied(combined)) {
|
|
553
|
+
finish(key, {
|
|
554
|
+
state: 'denied',
|
|
555
|
+
attempts: attempt,
|
|
556
|
+
exitCode,
|
|
557
|
+
output: body,
|
|
558
|
+
message: '沙箱拒绝了这次写入。本插件不会申请扩权 —— 需要在终端里手动执行这条命令。',
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
else if (exitCode === 0) {
|
|
562
|
+
finish(key, {
|
|
563
|
+
state: 'done',
|
|
564
|
+
attempts: attempt,
|
|
565
|
+
exitCode,
|
|
566
|
+
output: body,
|
|
567
|
+
// A confined shell cannot start `git`, so GitNexus cannot record the commit
|
|
568
|
+
// it indexed. The index is still correct; only the baseline is missing, and
|
|
569
|
+
// the gate will honestly say "无法确认" until a terminal run fills it in.
|
|
570
|
+
message: lacksCommitBaseline(key)
|
|
571
|
+
? '刷新完成。但沙箱里分析器读不到 git,索引没有记录提交基线 —— 想让门禁给出"已是最新",在普通终端再跑一次下面的命令。'
|
|
572
|
+
: null,
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
else {
|
|
576
|
+
finish(key, {
|
|
577
|
+
state: 'failed',
|
|
578
|
+
attempts: attempt,
|
|
579
|
+
exitCode,
|
|
580
|
+
output: body,
|
|
581
|
+
message: attempt > 1 && isTransientLock(combined)
|
|
582
|
+
? '缓存或锁文件被临时占用(EPERM/EBUSY),已自动重试一次仍失败。稍后重试;若持续出现,把下面的命令放到普通终端执行。'
|
|
583
|
+
: `gitnexus 以退出码 ${exitCode ?? '未知'} 结束。`,
|
|
584
|
+
});
|
|
585
|
+
}
|
|
248
586
|
return;
|
|
249
587
|
}
|
|
250
|
-
const combined = `${result.stdout?.text ?? ''}${result.stderr?.text ?? ''}`;
|
|
251
|
-
const body = tail(combined, tailLimit);
|
|
252
|
-
const exitCode = typeof result.exitCode === 'number' ? result.exitCode : null;
|
|
253
|
-
// Order matters. A denial can also be a non-zero exit, and reporting it as a
|
|
254
|
-
// generic failure sends the operator looking for a GitNexus bug that is not
|
|
255
|
-
// there. Cancellation is checked before timeout because a kill from `cancel()`
|
|
256
|
-
// and a kill from the deadline both surface as a killed process.
|
|
257
|
-
if (controller.signal.aborted) {
|
|
258
|
-
finish(key, { state: 'cancelled', exitCode, output: body, message: '已取消。' });
|
|
259
|
-
}
|
|
260
|
-
else if (result.timedOut === true) {
|
|
261
|
-
finish(key, {
|
|
262
|
-
state: 'timed-out',
|
|
263
|
-
exitCode,
|
|
264
|
-
output: body,
|
|
265
|
-
message: `超过 ${Math.round(timeoutMs / 1000)} 秒上限已终止。大仓库的全量重建可能需要更长时间。`,
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
else if (looksDenied(combined)) {
|
|
269
|
-
finish(key, {
|
|
270
|
-
state: 'denied',
|
|
271
|
-
exitCode,
|
|
272
|
-
output: body,
|
|
273
|
-
message: '沙箱拒绝了这次写入。本插件不会申请扩权 —— 需要在终端里手动执行这条命令。',
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
else if (exitCode === 0) {
|
|
277
|
-
finish(key, { state: 'done', exitCode, output: body, message: null });
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
finish(key, {
|
|
281
|
-
state: 'failed',
|
|
282
|
-
exitCode,
|
|
283
|
-
output: body,
|
|
284
|
-
message: `gitnexus 以退出码 ${exitCode ?? '未知'} 结束。`,
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
588
|
})();
|
|
288
589
|
return started;
|
|
289
590
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/gitnexus/analyze.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/gitnexus/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,7 +61,7 @@ export declare function ftsAvailable(repoPath: string): boolean;
|
|
|
61
61
|
* refresh fail with `spawn EPERM` on an index that does not.
|
|
62
62
|
*/
|
|
63
63
|
export declare function effectiveSkipFts(repoPath: string, configured: boolean): boolean;
|
|
64
|
-
export type MaintenanceMode = 'init' | 'full';
|
|
64
|
+
export type MaintenanceMode = 'init' | 'full' | 'repair-fts';
|
|
65
65
|
export interface MaintenanceCommand {
|
|
66
66
|
mode: MaintenanceMode;
|
|
67
67
|
label: string;
|
|
@@ -84,6 +84,13 @@ export interface MaintenanceOptions {
|
|
|
84
84
|
skipFts?: boolean;
|
|
85
85
|
memoryOff?: boolean;
|
|
86
86
|
gitnexusHome?: string | null;
|
|
87
|
+
/**
|
|
88
|
+
* Offer the FTS repair command. The caller decides from the index's own
|
|
89
|
+
* `capabilities.fts.status`, because this module is deliberately filesystem-free:
|
|
90
|
+
* the exact command text is what a test asserts on, and a hidden manifest read
|
|
91
|
+
* would make the output depend on whatever repository happened to be on disk.
|
|
92
|
+
*/
|
|
93
|
+
includeRepair?: boolean;
|
|
87
94
|
}
|
|
88
95
|
/** The resolved form of {@link MaintenanceOptions}, after defaults are applied. */
|
|
89
96
|
interface ResolvedOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/gitnexus/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAQH;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAetD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAE/E;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/gitnexus/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAQH;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAetD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAE/E;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,mFAAmF;AACnF,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,kBAAkB,EAAE,CA+E5G;AAED,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,WAAW,GAAG,cAAc,CAAC,CAAC;AAE/F;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAcpE"}
|