sfdx-git-delta 6.42.0 → 6.44.0
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 +1 -1
- package/lib/adapter/GitAdapter.d.ts +50 -2
- package/lib/adapter/GitAdapter.js +320 -38
- package/lib/adapter/GitAdapter.js.map +1 -1
- package/lib/adapter/gitBatchCatFile.d.ts +26 -4
- package/lib/adapter/gitBatchCatFile.js +128 -44
- package/lib/adapter/gitBatchCatFile.js.map +1 -1
- package/lib/adapter/gitBlobReader.d.ts +58 -0
- package/lib/adapter/gitBlobReader.js +27 -0
- package/lib/adapter/gitBlobReader.js.map +1 -0
- package/lib/adapter/ioExecutor.d.ts +18 -6
- package/lib/adapter/ioExecutor.js +97 -12
- package/lib/adapter/ioExecutor.js.map +1 -1
- package/lib/main.js +25 -7
- package/lib/main.js.map +1 -1
- package/lib/metadata/MetadataRepositoryImpl.d.ts +1 -0
- package/lib/metadata/MetadataRepositoryImpl.js +14 -2
- package/lib/metadata/MetadataRepositoryImpl.js.map +1 -1
- package/lib/post-processor/flowTranslationProcessor.d.ts +30 -14
- package/lib/post-processor/flowTranslationProcessor.js +140 -53
- package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
- package/lib/post-processor/packageGenerator.d.ts +1 -0
- package/lib/post-processor/packageGenerator.js +16 -7
- package/lib/post-processor/packageGenerator.js.map +1 -1
- package/lib/post-processor/postProcessorManager.js +3 -5
- package/lib/post-processor/postProcessorManager.js.map +1 -1
- package/lib/service/botHandler.d.ts +2 -1
- package/lib/service/botHandler.js +3 -3
- package/lib/service/botHandler.js.map +1 -1
- package/lib/service/containedDecomposedHandler.d.ts +3 -2
- package/lib/service/containedDecomposedHandler.js +6 -6
- package/lib/service/containedDecomposedHandler.js.map +1 -1
- package/lib/service/customFieldHandler.d.ts +2 -1
- package/lib/service/customFieldHandler.js +2 -2
- package/lib/service/customFieldHandler.js.map +1 -1
- package/lib/service/customLabelHandler.d.ts +2 -1
- package/lib/service/customLabelHandler.js +3 -3
- package/lib/service/customLabelHandler.js.map +1 -1
- package/lib/service/customObjectHandler.d.ts +2 -1
- package/lib/service/customObjectHandler.js +2 -2
- package/lib/service/customObjectHandler.js.map +1 -1
- package/lib/service/decomposedHandler.d.ts +2 -1
- package/lib/service/decomposedHandler.js +2 -2
- package/lib/service/decomposedHandler.js.map +1 -1
- package/lib/service/diffLineInterpreter.d.ts +1 -1
- package/lib/service/diffLineInterpreter.js +16 -6
- package/lib/service/diffLineInterpreter.js.map +1 -1
- package/lib/service/flowHandler.d.ts +2 -1
- package/lib/service/flowHandler.js +2 -2
- package/lib/service/flowHandler.js.map +1 -1
- package/lib/service/inFileHandler.d.ts +8 -7
- package/lib/service/inFileHandler.js +36 -31
- package/lib/service/inFileHandler.js.map +1 -1
- package/lib/service/inFolderHandler.d.ts +2 -1
- package/lib/service/inFolderHandler.js +2 -2
- package/lib/service/inFolderHandler.js.map +1 -1
- package/lib/service/inResourceHandler.d.ts +3 -2
- package/lib/service/inResourceHandler.js +5 -5
- package/lib/service/inResourceHandler.js.map +1 -1
- package/lib/service/objectTranslationHandler.d.ts +3 -3
- package/lib/service/objectTranslationHandler.js +15 -8
- package/lib/service/objectTranslationHandler.js.map +1 -1
- package/lib/service/reportingFolderHandler.d.ts +3 -2
- package/lib/service/reportingFolderHandler.js +4 -4
- package/lib/service/reportingFolderHandler.js.map +1 -1
- package/lib/service/sharedFolderHandler.d.ts +3 -2
- package/lib/service/sharedFolderHandler.js +4 -4
- package/lib/service/sharedFolderHandler.js.map +1 -1
- package/lib/service/standardHandler.d.ts +6 -5
- package/lib/service/standardHandler.js +26 -24
- package/lib/service/standardHandler.js.map +1 -1
- package/lib/service/typeHandlerFactory.d.ts +2 -0
- package/lib/service/typeHandlerFactory.js +15 -0
- package/lib/service/typeHandlerFactory.js.map +1 -1
- package/lib/types/handlerResult.d.ts +9 -8
- package/lib/types/handlerResult.js +2 -11
- package/lib/types/handlerResult.js.map +1 -1
- package/lib/utils/LoggingDecorator.js +22 -11
- package/lib/utils/LoggingDecorator.js.map +1 -1
- package/lib/utils/changeSet.d.ts +5 -0
- package/lib/utils/changeSet.js +84 -0
- package/lib/utils/changeSet.js.map +1 -1
- package/lib/utils/gitLfsHelper.js +9 -1
- package/lib/utils/gitLfsHelper.js.map +1 -1
- package/lib/utils/metadataDiff/index.d.ts +28 -0
- package/lib/utils/metadataDiff/index.js +57 -0
- package/lib/utils/metadataDiff/index.js.map +1 -0
- package/lib/utils/metadataDiff/streamingDiff.d.ts +68 -0
- package/lib/utils/metadataDiff/streamingDiff.js +300 -0
- package/lib/utils/metadataDiff/streamingDiff.js.map +1 -0
- package/lib/utils/metadataDiff/xmlEventReader.d.ts +28 -0
- package/lib/utils/metadataDiff/xmlEventReader.js +221 -0
- package/lib/utils/metadataDiff/xmlEventReader.js.map +1 -0
- package/lib/utils/metadataDiff/xmlWriter.d.ts +17 -0
- package/lib/utils/metadataDiff/xmlWriter.js +213 -0
- package/lib/utils/metadataDiff/xmlWriter.js.map +1 -0
- package/lib/utils/packageHelper.d.ts +8 -1
- package/lib/utils/packageHelper.js +25 -28
- package/lib/utils/packageHelper.js.map +1 -1
- package/lib/utils/repoGitDiff.d.ts +12 -6
- package/lib/utils/repoGitDiff.js +60 -57
- package/lib/utils/repoGitDiff.js.map +1 -1
- package/lib/utils/treeIndexScope.d.ts +1 -1
- package/lib/utils/treeIndexScope.js.map +1 -1
- package/lib/utils/txmlAdapter.d.ts +30 -0
- package/lib/utils/txmlAdapter.js +121 -0
- package/lib/utils/txmlAdapter.js.map +1 -0
- package/lib/utils/xmlHelper.d.ts +0 -5
- package/lib/utils/xmlHelper.js +0 -57
- package/lib/utils/xmlHelper.js.map +1 -1
- package/npm-shrinkwrap.json +431 -316
- package/oclif.manifest.json +1 -1
- package/package.json +50 -18
- package/lib/utils/metadataDiff.d.ts +0 -24
- package/lib/utils/metadataDiff.js +0 -256
- package/lib/utils/metadataDiff.js.map +0 -1
package/README.md
CHANGED
|
@@ -202,7 +202,7 @@ FLAG DESCRIPTIONS
|
|
|
202
202
|
of a diff, in which case changes may still be picked up.
|
|
203
203
|
```
|
|
204
204
|
|
|
205
|
-
_See code: [src/commands/sgd/source/delta.ts](https://github.com/scolladon/sfdx-git-delta/blob/v6.
|
|
205
|
+
_See code: [src/commands/sgd/source/delta.ts](https://github.com/scolladon/sfdx-git-delta/blob/v6.44.0/src/commands/sgd/source/delta.ts)_
|
|
206
206
|
<!-- commandsstop -->
|
|
207
207
|
|
|
208
208
|
### Windows users
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { type Readable } from 'node:stream';
|
|
1
2
|
import { SimpleGit } from 'simple-git';
|
|
2
3
|
import type { Config } from '../types/config.js';
|
|
3
4
|
import type { FileGitRef } from '../types/git.js';
|
|
4
5
|
import { GitBatchCatFile } from './gitBatchCatFile.js';
|
|
6
|
+
import type { GitBlobReader, SpawnFn } from './gitBlobReader.js';
|
|
5
7
|
import { TreeIndex } from './treeIndex.js';
|
|
6
|
-
export default class GitAdapter {
|
|
8
|
+
export default class GitAdapter implements GitBlobReader {
|
|
7
9
|
protected readonly config: Config;
|
|
8
10
|
private static instances;
|
|
9
11
|
private static keyFor;
|
|
@@ -11,22 +13,68 @@ export default class GitAdapter {
|
|
|
11
13
|
protected readonly simpleGit: SimpleGit;
|
|
12
14
|
protected readonly treeIndex: Map<string, TreeIndex>;
|
|
13
15
|
protected batchCatFile: GitBatchCatFile | null;
|
|
16
|
+
private readonly streamingChildren;
|
|
17
|
+
private static readonly STDERR_BUFFER_CAP;
|
|
18
|
+
private static readonly LFS_POINTER_CAP;
|
|
19
|
+
private spawnFn;
|
|
14
20
|
private constructor();
|
|
21
|
+
/**
|
|
22
|
+
* Testability seam: lets unit tests swap in a fake spawn for streaming
|
|
23
|
+
* subprocesses. Production always uses `child_process.spawn`.
|
|
24
|
+
*/
|
|
25
|
+
setSpawnFn(spawnFn: SpawnFn): void;
|
|
15
26
|
protected getBatchCatFile(): GitBatchCatFile;
|
|
16
27
|
closeBatchProcess(): void;
|
|
17
28
|
static closeAll(): void;
|
|
18
29
|
configureRepository(): Promise<void>;
|
|
19
30
|
parseRev(ref: string): Promise<string>;
|
|
20
31
|
preBuildTreeIndex(revision: string, scopePaths: string[]): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Spawns `git <args>`, streams stdout through a readline interface, and
|
|
34
|
+
* yields one line at a time. Replaces the old "run command, split on EOL"
|
|
35
|
+
* pattern that accumulated a multi-MB string for megarepo diffs / tree
|
|
36
|
+
* listings before any downstream consumer ran.
|
|
37
|
+
*
|
|
38
|
+
* The spawned child is pushed into streamingChildren so closeAll()
|
|
39
|
+
* kills it if teardown happens mid-stream. stderr is drained to the
|
|
40
|
+
* debug log; a non-zero exit code rejects the iterator on next read.
|
|
41
|
+
*/
|
|
42
|
+
protected _spawnLines(args: string[]): AsyncGenerator<string>;
|
|
43
|
+
private _trackChild;
|
|
21
44
|
protected pathExistsImpl(path: string, revision: string): boolean;
|
|
22
45
|
pathExists(path: string, revision?: string): Promise<boolean>;
|
|
23
46
|
getFirstCommitRef(): Promise<string>;
|
|
24
47
|
getBufferContent(forRef: FileGitRef): Promise<Buffer>;
|
|
48
|
+
getBufferContentOrEscalate(forRef: FileGitRef): Promise<Buffer>;
|
|
49
|
+
/**
|
|
50
|
+
* Streams a directory from `revision` as `git archive --format=tar`
|
|
51
|
+
* entries. Yields `{ path, stream }` per file entry (directories are
|
|
52
|
+
* skipped). The tar subprocess is registered in streamingChildren so
|
|
53
|
+
* closeAll kills it on teardown.
|
|
54
|
+
*
|
|
55
|
+
* Callers MUST consume each entry's stream — even when skipping the
|
|
56
|
+
* entry — otherwise tar-stream back-pressures and halts parsing. For
|
|
57
|
+
* skip cases use `stream.resume()` to drain-and-discard.
|
|
58
|
+
*/
|
|
59
|
+
streamArchive(path: string, revision: string): AsyncGenerator<{
|
|
60
|
+
path: string;
|
|
61
|
+
stream: Readable;
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* Spawns a dedicated `git cat-file blob <oid>` subprocess and returns a
|
|
65
|
+
* Readable that peeks the first chunks for LFS pointer magic. On match,
|
|
66
|
+
* the spawned subprocess is killed and the Readable is fed from the
|
|
67
|
+
* resolved LFS object file. Otherwise bytes are forwarded as-is.
|
|
68
|
+
*/
|
|
69
|
+
streamContent(forRef: FileGitRef): Readable;
|
|
70
|
+
private _wireStreamContent;
|
|
71
|
+
private _handoffToLfs;
|
|
25
72
|
getStringContent(forRef: FileGitRef): Promise<string>;
|
|
26
73
|
protected getFilesPathCached(path: string, revision: string): string[];
|
|
27
74
|
getFilesPath(paths: string | string[], revision?: string): Promise<string[]>;
|
|
28
75
|
listDirAtRevision(dir: string, revision: string): Promise<string[]>;
|
|
29
76
|
gitGrep(pattern: string, path: string | string[], revision?: string): Promise<string[]>;
|
|
30
|
-
|
|
77
|
+
streamDiffLines(): AsyncGenerator<string>;
|
|
31
78
|
protected _getNumstatLines(changeType: string, detectRenames: boolean): Promise<string[]>;
|
|
79
|
+
private _getRenameLines;
|
|
32
80
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { createReadStream } from 'node:fs';
|
|
2
4
|
import { readFile } from 'node:fs/promises';
|
|
3
5
|
import { join } from 'node:path/posix';
|
|
6
|
+
import { createInterface } from 'node:readline';
|
|
7
|
+
import { PassThrough } from 'node:stream';
|
|
4
8
|
import { simpleGit } from 'simple-git';
|
|
5
9
|
import { TAB } from '../constant/cliConstants.js';
|
|
6
10
|
import { UTF8_ENCODING } from '../constant/fsConstants.js';
|
|
@@ -13,6 +17,7 @@ import { log } from '../utils/LoggingDecorator.js';
|
|
|
13
17
|
import { Logger, lazy } from '../utils/LoggingService.js';
|
|
14
18
|
import { GitBatchCatFile } from './gitBatchCatFile.js';
|
|
15
19
|
import { TreeIndex } from './treeIndex.js';
|
|
20
|
+
const LFS_MAGIC = Buffer.from('version https://git-lfs.github.com/spec/v1\n');
|
|
16
21
|
const EOL = /\r?\n/;
|
|
17
22
|
const ROOT_PATHS = new Set(['', '.', './']);
|
|
18
23
|
export default class GitAdapter {
|
|
@@ -34,20 +39,49 @@ export default class GitAdapter {
|
|
|
34
39
|
simpleGit;
|
|
35
40
|
treeIndex;
|
|
36
41
|
batchCatFile = null;
|
|
42
|
+
// Live-only list of streaming subprocesses: children are appended when
|
|
43
|
+
// spawned and spliced on `close` so long-running invocations don't
|
|
44
|
+
// accumulate dead process references. Iterated at closeAll() teardown and
|
|
45
|
+
// kill()ed if still alive.
|
|
46
|
+
streamingChildren = [];
|
|
47
|
+
// Cap on stderr buffered per-subprocess: long-running git processes that
|
|
48
|
+
// emit progress to stderr would otherwise grow this without bound. The
|
|
49
|
+
// final error message truncates at this size.
|
|
50
|
+
static STDERR_BUFFER_CAP = 8 * 1024;
|
|
51
|
+
// Cap on LFS pointer buffering: real pointers are < 200 bytes; a crafted
|
|
52
|
+
// blob with the LFS magic prefix followed by gigabytes of content should
|
|
53
|
+
// not OOM the process before validation fails.
|
|
54
|
+
static LFS_POINTER_CAP = 1024;
|
|
55
|
+
spawnFn = spawn;
|
|
37
56
|
constructor(config) {
|
|
38
57
|
this.config = config;
|
|
39
58
|
this.simpleGit = simpleGit({ baseDir: config.repo, trimmed: true });
|
|
40
59
|
this.treeIndex = new Map();
|
|
41
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Testability seam: lets unit tests swap in a fake spawn for streaming
|
|
63
|
+
* subprocesses. Production always uses `child_process.spawn`.
|
|
64
|
+
*/
|
|
65
|
+
setSpawnFn(spawnFn) {
|
|
66
|
+
this.spawnFn = spawnFn;
|
|
67
|
+
}
|
|
42
68
|
getBatchCatFile() {
|
|
43
69
|
if (!this.batchCatFile) {
|
|
44
|
-
this.batchCatFile = new GitBatchCatFile(this.config.repo
|
|
70
|
+
this.batchCatFile = new GitBatchCatFile(this.config.repo, {
|
|
71
|
+
spawnFn: this.spawnFn,
|
|
72
|
+
});
|
|
45
73
|
}
|
|
46
74
|
return this.batchCatFile;
|
|
47
75
|
}
|
|
48
76
|
closeBatchProcess() {
|
|
49
77
|
this.batchCatFile?.close();
|
|
50
78
|
this.batchCatFile = null;
|
|
79
|
+
for (const child of this.streamingChildren) {
|
|
80
|
+
if (child.exitCode === null && !child.killed) {
|
|
81
|
+
child.kill();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this.streamingChildren.length = 0;
|
|
51
85
|
}
|
|
52
86
|
static closeAll() {
|
|
53
87
|
for (const instance of GitAdapter.instances.values()) {
|
|
@@ -71,9 +105,8 @@ export default class GitAdapter {
|
|
|
71
105
|
if (scopePaths.length > 0) {
|
|
72
106
|
args.push('--', ...scopePaths);
|
|
73
107
|
}
|
|
74
|
-
const output = await this.simpleGit.raw(args);
|
|
75
108
|
const index = new TreeIndex();
|
|
76
|
-
for (const line of
|
|
109
|
+
for await (const line of this._spawnLines(args)) {
|
|
77
110
|
if (line)
|
|
78
111
|
index.add(treatPathSep(line));
|
|
79
112
|
}
|
|
@@ -83,6 +116,66 @@ export default class GitAdapter {
|
|
|
83
116
|
Logger.debug(lazy `preBuildTreeIndex: scoped ls-tree for '${revision}' failed: ${() => getErrorMessage(error)}`);
|
|
84
117
|
}
|
|
85
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Spawns `git <args>`, streams stdout through a readline interface, and
|
|
121
|
+
* yields one line at a time. Replaces the old "run command, split on EOL"
|
|
122
|
+
* pattern that accumulated a multi-MB string for megarepo diffs / tree
|
|
123
|
+
* listings before any downstream consumer ran.
|
|
124
|
+
*
|
|
125
|
+
* The spawned child is pushed into streamingChildren so closeAll()
|
|
126
|
+
* kills it if teardown happens mid-stream. stderr is drained to the
|
|
127
|
+
* debug log; a non-zero exit code rejects the iterator on next read.
|
|
128
|
+
*/
|
|
129
|
+
async *_spawnLines(args) {
|
|
130
|
+
const child = this.spawnFn('git', args, {
|
|
131
|
+
cwd: this.config.repo,
|
|
132
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
133
|
+
});
|
|
134
|
+
this._trackChild(child);
|
|
135
|
+
const stderrChunks = [];
|
|
136
|
+
let stderrLen = 0;
|
|
137
|
+
child.stderr.on('data', (chunk) => {
|
|
138
|
+
if (stderrLen >= GitAdapter.STDERR_BUFFER_CAP)
|
|
139
|
+
return;
|
|
140
|
+
stderrChunks.push(chunk);
|
|
141
|
+
stderrLen += chunk.length;
|
|
142
|
+
});
|
|
143
|
+
const rl = createInterface({
|
|
144
|
+
input: child.stdout,
|
|
145
|
+
crlfDelay: Number.POSITIVE_INFINITY,
|
|
146
|
+
});
|
|
147
|
+
const exitPromise = new Promise((resolve, reject) => {
|
|
148
|
+
child.once('error', reject);
|
|
149
|
+
child.once('close', resolve);
|
|
150
|
+
});
|
|
151
|
+
try {
|
|
152
|
+
for await (const line of rl) {
|
|
153
|
+
yield line;
|
|
154
|
+
}
|
|
155
|
+
const code = await exitPromise;
|
|
156
|
+
if (code !== 0 && code !== null) {
|
|
157
|
+
const stderr = Buffer.concat(stderrChunks)
|
|
158
|
+
.subarray(0, GitAdapter.STDERR_BUFFER_CAP)
|
|
159
|
+
.toString('utf8')
|
|
160
|
+
.trim();
|
|
161
|
+
throw new Error(`git ${args[0]} exited ${code}${stderr ? `: ${stderr}` : ''}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
rl.close();
|
|
166
|
+
if (!child.killed && child.exitCode === null)
|
|
167
|
+
child.kill();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
_trackChild(child) {
|
|
171
|
+
this.streamingChildren.push(child);
|
|
172
|
+
child.once('close', () => {
|
|
173
|
+
const idx = this.streamingChildren.indexOf(child);
|
|
174
|
+
/* v8 ignore next -- defensive: the close listener is once-only and bound to the tracked child; idx is always >= 0 here */
|
|
175
|
+
if (idx !== -1)
|
|
176
|
+
this.streamingChildren.splice(idx, 1);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
86
179
|
pathExistsImpl(path, revision) {
|
|
87
180
|
const index = this.treeIndex.get(revision);
|
|
88
181
|
if (!index)
|
|
@@ -100,11 +193,171 @@ export default class GitAdapter {
|
|
|
100
193
|
async getBufferContent(forRef) {
|
|
101
194
|
let content = await this.getBatchCatFile().getContent(forRef.oid, forRef.path);
|
|
102
195
|
if (isLFS(content)) {
|
|
103
|
-
const
|
|
104
|
-
content = await readFile(join(this.config.repo,
|
|
196
|
+
const lfsPath = getLFSObjectContentPath(content);
|
|
197
|
+
content = await readFile(join(this.config.repo, lfsPath));
|
|
198
|
+
}
|
|
199
|
+
return content;
|
|
200
|
+
}
|
|
201
|
+
async getBufferContentOrEscalate(forRef) {
|
|
202
|
+
let content = await this.getBatchCatFile().getContentOrEscalate(forRef.oid, forRef.path);
|
|
203
|
+
if (isLFS(content)) {
|
|
204
|
+
const lfsPath = getLFSObjectContentPath(content);
|
|
205
|
+
content = await readFile(join(this.config.repo, lfsPath));
|
|
105
206
|
}
|
|
106
207
|
return content;
|
|
107
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Streams a directory from `revision` as `git archive --format=tar`
|
|
211
|
+
* entries. Yields `{ path, stream }` per file entry (directories are
|
|
212
|
+
* skipped). The tar subprocess is registered in streamingChildren so
|
|
213
|
+
* closeAll kills it on teardown.
|
|
214
|
+
*
|
|
215
|
+
* Callers MUST consume each entry's stream — even when skipping the
|
|
216
|
+
* entry — otherwise tar-stream back-pressures and halts parsing. For
|
|
217
|
+
* skip cases use `stream.resume()` to drain-and-discard.
|
|
218
|
+
*/
|
|
219
|
+
async *streamArchive(path, revision) {
|
|
220
|
+
if (path.startsWith('-') || revision.startsWith('-')) {
|
|
221
|
+
throw new Error(`Refusing to spawn git archive for ${path}`);
|
|
222
|
+
}
|
|
223
|
+
const { extract } = await import('tar-stream');
|
|
224
|
+
const extractor = extract();
|
|
225
|
+
const child = this.spawnFn('git', ['archive', '--format=tar', revision, '--', path], { cwd: this.config.repo, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
226
|
+
this._trackChild(child);
|
|
227
|
+
child.on('error', err => extractor.destroy(err));
|
|
228
|
+
child.stderr.on('data', (chunk) => {
|
|
229
|
+
Logger.debug(lazy `streamArchive stderr for ${path}@${revision}: ${() => chunk.toString()}`);
|
|
230
|
+
});
|
|
231
|
+
child.stdout.pipe(extractor);
|
|
232
|
+
try {
|
|
233
|
+
for await (const entry of extractor) {
|
|
234
|
+
if (entry.header.type !== 'file') {
|
|
235
|
+
entry.resume();
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
yield { path: entry.header.name, stream: entry };
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
if (!child.killed && child.exitCode === null)
|
|
243
|
+
child.kill();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Spawns a dedicated `git cat-file blob <oid>` subprocess and returns a
|
|
248
|
+
* Readable that peeks the first chunks for LFS pointer magic. On match,
|
|
249
|
+
* the spawned subprocess is killed and the Readable is fed from the
|
|
250
|
+
* resolved LFS object file. Otherwise bytes are forwarded as-is.
|
|
251
|
+
*/
|
|
252
|
+
streamContent(forRef) {
|
|
253
|
+
const out = new PassThrough();
|
|
254
|
+
// Defense in depth: `git cat-file blob <ref>` treats a ref starting
|
|
255
|
+
// with `-` as an option. Refs come from git diff output so this
|
|
256
|
+
// shouldn't happen in normal operation, but a malicious diff or a
|
|
257
|
+
// path with a leading dash would give git an option it respects.
|
|
258
|
+
// Fail fast with a clear error rather than trust the subprocess.
|
|
259
|
+
if (forRef.path.startsWith('-') || forRef.oid.startsWith('-')) {
|
|
260
|
+
process.nextTick(() => out.destroy(new Error(`Refusing to spawn git cat-file for ${forRef.path}`)));
|
|
261
|
+
return out;
|
|
262
|
+
}
|
|
263
|
+
const child = this.spawnFn('git', ['cat-file', 'blob', `${forRef.oid}:${forRef.path}`], { cwd: this.config.repo, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
264
|
+
this._trackChild(child);
|
|
265
|
+
this._wireStreamContent(child, out, forRef);
|
|
266
|
+
return out;
|
|
267
|
+
}
|
|
268
|
+
_wireStreamContent(child, out, forRef) {
|
|
269
|
+
let peeked = [];
|
|
270
|
+
let peekedLen = 0;
|
|
271
|
+
let decided = false;
|
|
272
|
+
const forwardPeeked = () => {
|
|
273
|
+
const head = Buffer.concat(peeked, peekedLen);
|
|
274
|
+
peeked = [];
|
|
275
|
+
peekedLen = 0;
|
|
276
|
+
return head;
|
|
277
|
+
};
|
|
278
|
+
const onChunk = (chunk) => {
|
|
279
|
+
if (decided) {
|
|
280
|
+
/* v8 ignore next -- defensive: PassThrough rarely returns false here; backpressure handled at write time, drain listener resumes */
|
|
281
|
+
if (!out.write(chunk))
|
|
282
|
+
child.stdout.pause();
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
peeked.push(chunk);
|
|
286
|
+
peekedLen += chunk.length;
|
|
287
|
+
if (peekedLen < LFS_MAGIC.length)
|
|
288
|
+
return;
|
|
289
|
+
decided = true;
|
|
290
|
+
const head = forwardPeeked();
|
|
291
|
+
if (head.subarray(0, LFS_MAGIC.length).equals(LFS_MAGIC)) {
|
|
292
|
+
this._handoffToLfs(child, out, head);
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
/* v8 ignore next -- defensive: PassThrough rarely returns false here; backpressure handled at write time, drain listener resumes */
|
|
296
|
+
if (!out.write(head))
|
|
297
|
+
child.stdout.pause();
|
|
298
|
+
};
|
|
299
|
+
child.stdout.on('data', onChunk);
|
|
300
|
+
out.on('drain', () => child.stdout.resume());
|
|
301
|
+
child.stdout.on('end', () => {
|
|
302
|
+
if (!decided && peekedLen > 0) {
|
|
303
|
+
out.write(forwardPeeked());
|
|
304
|
+
}
|
|
305
|
+
/* v8 ignore next -- defensive: forwardPeeked above zeroes peekedLen, so the second arm always evaluates true after a flush */
|
|
306
|
+
if (decided || peekedLen === 0)
|
|
307
|
+
out.end();
|
|
308
|
+
});
|
|
309
|
+
child.stderr.on('data', (chunk) => {
|
|
310
|
+
Logger.debug(lazy `streamContent stderr for ${forRef.path}: ${() => chunk.toString()}`);
|
|
311
|
+
});
|
|
312
|
+
child.on('error', err => out.destroy(err));
|
|
313
|
+
child.on('close', code => {
|
|
314
|
+
// Intentional kills during LFS handoff close with a null/non-zero
|
|
315
|
+
// code; destroying `out` here would truncate the piped LFS stream
|
|
316
|
+
// the handoff just started.
|
|
317
|
+
if (code !== 0 && code !== null && !child.killed && !out.destroyed) {
|
|
318
|
+
out.destroy(new Error(`git cat-file blob exited ${code}`));
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
_handoffToLfs(child, out, head) {
|
|
323
|
+
const pointerParts = [head];
|
|
324
|
+
let pointerLen = head.length;
|
|
325
|
+
let aborted = false;
|
|
326
|
+
// Replace both data and end listeners from _wireStreamContent: the
|
|
327
|
+
// original end listener calls out.end() when decided===true, which would
|
|
328
|
+
// close `out` before the LFS file stream begins piping into it and the
|
|
329
|
+
// consumer would receive an empty/truncated payload.
|
|
330
|
+
child.stdout.removeAllListeners('data');
|
|
331
|
+
child.stdout.removeAllListeners('end');
|
|
332
|
+
child.stdout.on('data', (c) => {
|
|
333
|
+
if (aborted)
|
|
334
|
+
return;
|
|
335
|
+
pointerParts.push(c);
|
|
336
|
+
pointerLen += c.length;
|
|
337
|
+
if (pointerLen > GitAdapter.LFS_POINTER_CAP) {
|
|
338
|
+
aborted = true;
|
|
339
|
+
out.destroy(new Error('LFS pointer exceeds expected size'));
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
child.stdout.on('end', () => {
|
|
343
|
+
if (aborted)
|
|
344
|
+
return;
|
|
345
|
+
try {
|
|
346
|
+
const pointer = Buffer.concat(pointerParts, pointerLen);
|
|
347
|
+
const lfsPath = getLFSObjectContentPath(pointer);
|
|
348
|
+
createReadStream(join(this.config.repo, lfsPath))
|
|
349
|
+
.on('error', err => out.destroy(err))
|
|
350
|
+
.pipe(out);
|
|
351
|
+
}
|
|
352
|
+
catch (err) {
|
|
353
|
+
/* v8 ignore next -- defensive: getLFSObjectContentPath / createReadStream throw Error instances in practice; the String() fallback exists for non-Error throws */
|
|
354
|
+
out.destroy(err instanceof Error ? err : new Error(String(err)));
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
/* v8 ignore next -- defensive: _handoffToLfs is reached after the first peek; the child is alive at this point */
|
|
358
|
+
if (!child.killed)
|
|
359
|
+
child.kill();
|
|
360
|
+
}
|
|
108
361
|
async getStringContent(forRef) {
|
|
109
362
|
const content = await this.getBufferContent(forRef);
|
|
110
363
|
return content.toString(UTF8_ENCODING);
|
|
@@ -177,10 +430,10 @@ export default class GitAdapter {
|
|
|
177
430
|
// guideline: the four `--diff-filter`s are the canonical per-kind split,
|
|
178
431
|
// so hiding R as an out-of-band sequential await just obscures the real
|
|
179
432
|
// symmetric fan-out without changing the resource footprint.
|
|
180
|
-
async
|
|
433
|
+
async *streamDiffLines() {
|
|
181
434
|
const detectRenames = Boolean(this.config.changesManifest);
|
|
182
435
|
if (!this.config.ignoreWhitespace) {
|
|
183
|
-
const
|
|
436
|
+
const args = [
|
|
184
437
|
'diff',
|
|
185
438
|
'--name-status',
|
|
186
439
|
...(detectRenames ? ['-M'] : ['--no-renames']),
|
|
@@ -189,11 +442,12 @@ export default class GitAdapter {
|
|
|
189
442
|
this.config.to,
|
|
190
443
|
'--',
|
|
191
444
|
...this.config.source,
|
|
192
|
-
]
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
445
|
+
];
|
|
446
|
+
for await (const line of this._spawnLines(args)) {
|
|
447
|
+
if (line)
|
|
448
|
+
yield treatPathSep(line);
|
|
449
|
+
}
|
|
450
|
+
return;
|
|
197
451
|
}
|
|
198
452
|
// When rename detection is on, the A/M/D filters also run with -M so
|
|
199
453
|
// renamed files drop out (reclassified to R by git), and the dedicated
|
|
@@ -203,46 +457,74 @@ export default class GitAdapter {
|
|
|
203
457
|
const filters = detectRenames
|
|
204
458
|
? [ADDITION, MODIFICATION, DELETION, RENAMED]
|
|
205
459
|
: [ADDITION, MODIFICATION, DELETION];
|
|
206
|
-
|
|
207
|
-
|
|
460
|
+
// Numstat path runs one git invocation per change-type; we still emit
|
|
461
|
+
// each batch as it lands so downstream filters can begin work before
|
|
462
|
+
// every filter has finished.
|
|
463
|
+
for (const changeType of filters) {
|
|
464
|
+
for (const line of await this._getNumstatLines(changeType, detectRenames)) {
|
|
465
|
+
yield line;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
208
468
|
}
|
|
209
469
|
// Per-filter numstat call. The R branch uses `-z` because numstat
|
|
210
470
|
// otherwise encodes rename paths in three format variants within the
|
|
211
471
|
// path column (`{a => b}`, `a/{b => c}/d`, or bare `old => new`). `-z`
|
|
212
|
-
// emits `N<TAB>M<TAB>\0<src>\0<dst>\0` for each rename, so we
|
|
213
|
-
//
|
|
214
|
-
//
|
|
215
|
-
//
|
|
216
|
-
//
|
|
472
|
+
// emits `N<TAB>M<TAB>\0<src>\0<dst>\0` for each rename, so we stride-3
|
|
473
|
+
// over the NUL-split tokens and synthesise `R<TAB><src><TAB><dst>`
|
|
474
|
+
// lines that RepoGitDiff._expandRenames already understands.
|
|
475
|
+
//
|
|
476
|
+
// A/M/D: streamed via _spawnLines + readline, per-line transform strips
|
|
477
|
+
// the leading `N\tM\t` counts and rewrites them to the status prefix.
|
|
478
|
+
// R (NUL-delimited): buffered via simpleGit.raw because readline is
|
|
479
|
+
// newline-oriented and the whole-string split remains cheap for the
|
|
480
|
+
// rare rename set.
|
|
217
481
|
async _getNumstatLines(changeType, detectRenames) {
|
|
218
|
-
|
|
219
|
-
|
|
482
|
+
if (changeType === RENAMED) {
|
|
483
|
+
return this._getRenameLines();
|
|
484
|
+
}
|
|
485
|
+
const args = [
|
|
220
486
|
'diff',
|
|
221
487
|
'--numstat',
|
|
222
|
-
...(
|
|
488
|
+
...(detectRenames ? ['-M'] : ['--no-renames']),
|
|
223
489
|
...IGNORE_WHITESPACE_PARAMS,
|
|
224
490
|
`--diff-filter=${changeType}`,
|
|
225
491
|
this.config.from,
|
|
226
492
|
this.config.to,
|
|
227
493
|
'--',
|
|
228
494
|
...this.config.source,
|
|
495
|
+
];
|
|
496
|
+
const lines = [];
|
|
497
|
+
for await (const line of this._spawnLines(args)) {
|
|
498
|
+
/* v8 ignore next -- defensive: _spawnLines splits on EOL; trailing/empty lines from git numstat are filtered here */
|
|
499
|
+
if (!line)
|
|
500
|
+
continue;
|
|
501
|
+
lines.push(treatPathSep(line.replace(NUM_STAT_CHANGE_INFORMATION, `${changeType}\t`)));
|
|
502
|
+
}
|
|
503
|
+
return lines;
|
|
504
|
+
}
|
|
505
|
+
async _getRenameLines() {
|
|
506
|
+
const output = await this.simpleGit.raw([
|
|
507
|
+
'diff',
|
|
508
|
+
'--numstat',
|
|
509
|
+
'-M',
|
|
510
|
+
'-z',
|
|
511
|
+
...IGNORE_WHITESPACE_PARAMS,
|
|
512
|
+
`--diff-filter=${RENAMED}`,
|
|
513
|
+
this.config.from,
|
|
514
|
+
this.config.to,
|
|
515
|
+
'--',
|
|
516
|
+
...this.config.source,
|
|
229
517
|
]);
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
lines.push(treatPathSep(`${RENAMED}${TAB}${src}${TAB}${dst}`));
|
|
239
|
-
}
|
|
240
|
-
return lines;
|
|
518
|
+
const tokens = output.split('\0');
|
|
519
|
+
const lines = [];
|
|
520
|
+
for (let i = 0; i + 2 < tokens.length; i += 3) {
|
|
521
|
+
const src = tokens[i + 1];
|
|
522
|
+
const dst = tokens[i + 2];
|
|
523
|
+
if (!src || !dst)
|
|
524
|
+
continue;
|
|
525
|
+
lines.push(treatPathSep(`${RENAMED}${TAB}${src}${TAB}${dst}`));
|
|
241
526
|
}
|
|
242
|
-
return
|
|
243
|
-
.split(EOL)
|
|
244
|
-
.filter(Boolean)
|
|
245
|
-
.map(line => treatPathSep(line.replace(NUM_STAT_CHANGE_INFORMATION, `${changeType}\t`)));
|
|
527
|
+
return lines;
|
|
246
528
|
}
|
|
247
529
|
}
|
|
248
530
|
__decorate([
|
|
@@ -274,5 +556,5 @@ __decorate([
|
|
|
274
556
|
], GitAdapter.prototype, "gitGrep", null);
|
|
275
557
|
__decorate([
|
|
276
558
|
log
|
|
277
|
-
], GitAdapter.prototype, "
|
|
559
|
+
], GitAdapter.prototype, "streamDiffLines", null);
|
|
278
560
|
//# sourceMappingURL=GitAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitAdapter.js","sourceRoot":"","sources":["../../src/adapter/GitAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GitAdapter.js","sourceRoot":"","sources":["../../src/adapter/GitAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,42 @@
|
|
|
1
1
|
import { type ChildProcessWithoutNullStreams } from 'node:child_process';
|
|
2
|
+
import { type SpawnFn } from './gitBlobReader.js';
|
|
2
3
|
type PendingRequest = {
|
|
4
|
+
oid: string;
|
|
5
|
+
path: string;
|
|
6
|
+
allowStreamingEscalation: boolean;
|
|
3
7
|
resolve: (buf: Buffer) => void;
|
|
4
|
-
reject: (err:
|
|
8
|
+
reject: (err: unknown) => void;
|
|
9
|
+
};
|
|
10
|
+
export type GitBatchCatFileOptions = {
|
|
11
|
+
sizeThreshold?: number;
|
|
12
|
+
spawnFn?: SpawnFn;
|
|
5
13
|
};
|
|
6
14
|
export declare class GitBatchCatFile {
|
|
15
|
+
protected readonly cwd: string;
|
|
7
16
|
protected process: ChildProcessWithoutNullStreams;
|
|
8
17
|
protected queue: PendingRequest[];
|
|
9
18
|
protected chunks: Buffer[];
|
|
10
19
|
protected totalLength: number;
|
|
11
20
|
protected pendingSize: number;
|
|
12
|
-
|
|
13
|
-
|
|
21
|
+
private readonly sizeThreshold;
|
|
22
|
+
private readonly spawnFn;
|
|
23
|
+
constructor(cwd: string, options?: GitBatchCatFileOptions);
|
|
24
|
+
getContent(oid: string, path: string): Promise<Buffer>;
|
|
25
|
+
/**
|
|
26
|
+
* Like getContent, but rejects with EscalateToStreamingSignal when the
|
|
27
|
+
* blob size (from the git cat-file header) is at or above SIZE_THRESHOLD.
|
|
28
|
+
* The subprocess is then recycled so queued reads keep flowing.
|
|
29
|
+
*/
|
|
30
|
+
getContentOrEscalate(oid: string, path: string): Promise<Buffer>;
|
|
31
|
+
close(): void;
|
|
32
|
+
private _enqueue;
|
|
14
33
|
protected _onData(chunk: Buffer): void;
|
|
15
34
|
protected _materializeBuffer(): Buffer;
|
|
16
35
|
protected _advance(buffer: Buffer, consumed: number): Buffer;
|
|
17
36
|
protected _processBuffer(): void;
|
|
18
|
-
|
|
37
|
+
private _parseHeader;
|
|
38
|
+
private _escalateHead;
|
|
39
|
+
private _recycleSubprocess;
|
|
40
|
+
private _spawnSubprocess;
|
|
19
41
|
}
|
|
20
42
|
export {};
|