sfdx-git-delta 6.42.0 → 6.43.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.
Files changed (116) hide show
  1. package/README.md +1 -1
  2. package/lib/adapter/GitAdapter.d.ts +50 -2
  3. package/lib/adapter/GitAdapter.js +320 -38
  4. package/lib/adapter/GitAdapter.js.map +1 -1
  5. package/lib/adapter/gitBatchCatFile.d.ts +26 -4
  6. package/lib/adapter/gitBatchCatFile.js +128 -44
  7. package/lib/adapter/gitBatchCatFile.js.map +1 -1
  8. package/lib/adapter/gitBlobReader.d.ts +58 -0
  9. package/lib/adapter/gitBlobReader.js +27 -0
  10. package/lib/adapter/gitBlobReader.js.map +1 -0
  11. package/lib/adapter/ioExecutor.d.ts +18 -6
  12. package/lib/adapter/ioExecutor.js +97 -12
  13. package/lib/adapter/ioExecutor.js.map +1 -1
  14. package/lib/main.js +25 -7
  15. package/lib/main.js.map +1 -1
  16. package/lib/metadata/MetadataRepositoryImpl.d.ts +1 -0
  17. package/lib/metadata/MetadataRepositoryImpl.js +14 -2
  18. package/lib/metadata/MetadataRepositoryImpl.js.map +1 -1
  19. package/lib/post-processor/flowTranslationProcessor.d.ts +30 -14
  20. package/lib/post-processor/flowTranslationProcessor.js +140 -53
  21. package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
  22. package/lib/post-processor/packageGenerator.d.ts +1 -0
  23. package/lib/post-processor/packageGenerator.js +16 -7
  24. package/lib/post-processor/packageGenerator.js.map +1 -1
  25. package/lib/post-processor/postProcessorManager.js +3 -5
  26. package/lib/post-processor/postProcessorManager.js.map +1 -1
  27. package/lib/service/botHandler.d.ts +2 -1
  28. package/lib/service/botHandler.js +3 -3
  29. package/lib/service/botHandler.js.map +1 -1
  30. package/lib/service/containedDecomposedHandler.d.ts +3 -2
  31. package/lib/service/containedDecomposedHandler.js +6 -6
  32. package/lib/service/containedDecomposedHandler.js.map +1 -1
  33. package/lib/service/customFieldHandler.d.ts +2 -1
  34. package/lib/service/customFieldHandler.js +2 -2
  35. package/lib/service/customFieldHandler.js.map +1 -1
  36. package/lib/service/customLabelHandler.d.ts +2 -1
  37. package/lib/service/customLabelHandler.js +3 -3
  38. package/lib/service/customLabelHandler.js.map +1 -1
  39. package/lib/service/customObjectHandler.d.ts +2 -1
  40. package/lib/service/customObjectHandler.js +2 -2
  41. package/lib/service/customObjectHandler.js.map +1 -1
  42. package/lib/service/decomposedHandler.d.ts +2 -1
  43. package/lib/service/decomposedHandler.js +2 -2
  44. package/lib/service/decomposedHandler.js.map +1 -1
  45. package/lib/service/diffLineInterpreter.d.ts +1 -1
  46. package/lib/service/diffLineInterpreter.js +16 -6
  47. package/lib/service/diffLineInterpreter.js.map +1 -1
  48. package/lib/service/flowHandler.d.ts +2 -1
  49. package/lib/service/flowHandler.js +2 -2
  50. package/lib/service/flowHandler.js.map +1 -1
  51. package/lib/service/inFileHandler.d.ts +8 -7
  52. package/lib/service/inFileHandler.js +36 -31
  53. package/lib/service/inFileHandler.js.map +1 -1
  54. package/lib/service/inFolderHandler.d.ts +2 -1
  55. package/lib/service/inFolderHandler.js +2 -2
  56. package/lib/service/inFolderHandler.js.map +1 -1
  57. package/lib/service/inResourceHandler.d.ts +3 -2
  58. package/lib/service/inResourceHandler.js +5 -5
  59. package/lib/service/inResourceHandler.js.map +1 -1
  60. package/lib/service/objectTranslationHandler.d.ts +3 -3
  61. package/lib/service/objectTranslationHandler.js +15 -8
  62. package/lib/service/objectTranslationHandler.js.map +1 -1
  63. package/lib/service/reportingFolderHandler.d.ts +3 -2
  64. package/lib/service/reportingFolderHandler.js +4 -4
  65. package/lib/service/reportingFolderHandler.js.map +1 -1
  66. package/lib/service/sharedFolderHandler.d.ts +3 -2
  67. package/lib/service/sharedFolderHandler.js +4 -4
  68. package/lib/service/sharedFolderHandler.js.map +1 -1
  69. package/lib/service/standardHandler.d.ts +6 -5
  70. package/lib/service/standardHandler.js +26 -24
  71. package/lib/service/standardHandler.js.map +1 -1
  72. package/lib/service/typeHandlerFactory.d.ts +2 -0
  73. package/lib/service/typeHandlerFactory.js +15 -0
  74. package/lib/service/typeHandlerFactory.js.map +1 -1
  75. package/lib/types/handlerResult.d.ts +9 -8
  76. package/lib/types/handlerResult.js +2 -11
  77. package/lib/types/handlerResult.js.map +1 -1
  78. package/lib/utils/LoggingDecorator.js +22 -11
  79. package/lib/utils/LoggingDecorator.js.map +1 -1
  80. package/lib/utils/changeSet.d.ts +5 -0
  81. package/lib/utils/changeSet.js +84 -0
  82. package/lib/utils/changeSet.js.map +1 -1
  83. package/lib/utils/gitLfsHelper.js +9 -1
  84. package/lib/utils/gitLfsHelper.js.map +1 -1
  85. package/lib/utils/metadataDiff/index.d.ts +28 -0
  86. package/lib/utils/metadataDiff/index.js +57 -0
  87. package/lib/utils/metadataDiff/index.js.map +1 -0
  88. package/lib/utils/metadataDiff/streamingDiff.d.ts +68 -0
  89. package/lib/utils/metadataDiff/streamingDiff.js +300 -0
  90. package/lib/utils/metadataDiff/streamingDiff.js.map +1 -0
  91. package/lib/utils/metadataDiff/xmlEventReader.d.ts +28 -0
  92. package/lib/utils/metadataDiff/xmlEventReader.js +221 -0
  93. package/lib/utils/metadataDiff/xmlEventReader.js.map +1 -0
  94. package/lib/utils/metadataDiff/xmlWriter.d.ts +17 -0
  95. package/lib/utils/metadataDiff/xmlWriter.js +213 -0
  96. package/lib/utils/metadataDiff/xmlWriter.js.map +1 -0
  97. package/lib/utils/packageHelper.d.ts +8 -1
  98. package/lib/utils/packageHelper.js +25 -28
  99. package/lib/utils/packageHelper.js.map +1 -1
  100. package/lib/utils/repoGitDiff.d.ts +12 -6
  101. package/lib/utils/repoGitDiff.js +60 -57
  102. package/lib/utils/repoGitDiff.js.map +1 -1
  103. package/lib/utils/treeIndexScope.d.ts +1 -1
  104. package/lib/utils/treeIndexScope.js.map +1 -1
  105. package/lib/utils/txmlAdapter.d.ts +30 -0
  106. package/lib/utils/txmlAdapter.js +121 -0
  107. package/lib/utils/txmlAdapter.js.map +1 -0
  108. package/lib/utils/xmlHelper.d.ts +0 -5
  109. package/lib/utils/xmlHelper.js +0 -57
  110. package/lib/utils/xmlHelper.js.map +1 -1
  111. package/npm-shrinkwrap.json +443 -292
  112. package/oclif.manifest.json +1 -1
  113. package/package.json +50 -18
  114. package/lib/utils/metadataDiff.d.ts +0 -24
  115. package/lib/utils/metadataDiff.js +0 -256
  116. 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.42.0/src/commands/sgd/source/delta.ts)_
205
+ _See code: [src/commands/sgd/source/delta.ts](https://github.com/scolladon/sfdx-git-delta/blob/v6.43.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
- getDiffLines(): Promise<string[]>;
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 output.split(EOL)) {
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 lsfPath = getLFSObjectContentPath(content);
104
- content = await readFile(join(this.config.repo, lsfPath));
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 getDiffLines() {
433
+ async *streamDiffLines() {
181
434
  const detectRenames = Boolean(this.config.changesManifest);
182
435
  if (!this.config.ignoreWhitespace) {
183
- const output = await this.simpleGit.raw([
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
- return output
194
- .split(EOL)
195
- .filter(Boolean)
196
- .map(line => treatPathSep(line));
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
- const results = await Promise.all(filters.map(changeType => this._getNumstatLines(changeType, detectRenames)));
207
- return results.flat();
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 can
213
- // stride-3 over the NUL-split tokens and synthesise
214
- // `R<TAB><src><TAB><dst>` lines that RepoGitDiff._expandRenames
215
- // already understands. A/M/D use the default output and rewrite the
216
- // leading `N\tM\t` counts into the status prefix.
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
- const isRename = changeType === RENAMED;
219
- const output = await this.simpleGit.raw([
482
+ if (changeType === RENAMED) {
483
+ return this._getRenameLines();
484
+ }
485
+ const args = [
220
486
  'diff',
221
487
  '--numstat',
222
- ...(isRename ? ['-M', '-z'] : detectRenames ? ['-M'] : ['--no-renames']),
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
- if (isRename) {
231
- const tokens = output.split('\0');
232
- const lines = [];
233
- for (let i = 0; i + 2 < tokens.length; i += 3) {
234
- const src = tokens[i + 1];
235
- const dst = tokens[i + 2];
236
- if (!src || !dst)
237
- continue;
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 output
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, "getDiffLines", null);
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: Error) => void;
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
- constructor(cwd: string);
13
- getContent(revision: string, path: string): Promise<Buffer>;
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
- close(): void;
37
+ private _parseHeader;
38
+ private _escalateHead;
39
+ private _recycleSubprocess;
40
+ private _spawnSubprocess;
19
41
  }
20
42
  export {};