sfdx-git-delta 7.1.0 → 7.3.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 +27 -5
- package/lib/adapter/GitAdapter.d.ts +26 -12
- package/lib/adapter/GitAdapter.js +162 -175
- package/lib/adapter/GitAdapter.js.map +1 -1
- package/lib/adapter/ioExecutor.d.ts +6 -7
- package/lib/adapter/ioExecutor.js +22 -22
- package/lib/adapter/ioExecutor.js.map +1 -1
- package/lib/adapter/pathMatching.d.ts +9 -0
- package/lib/adapter/pathMatching.js +83 -0
- package/lib/adapter/pathMatching.js.map +1 -0
- package/lib/adapter/treeIndex.d.ts +7 -4
- package/lib/adapter/treeIndex.js +34 -0
- package/lib/adapter/treeIndex.js.map +1 -1
- package/lib/adapter/treeReader.d.ts +8 -0
- package/lib/adapter/treeReader.js +22 -0
- package/lib/adapter/treeReader.js.map +1 -0
- package/lib/commands/sgd/source/delta.d.ts +1 -0
- package/lib/commands/sgd/source/delta.js +5 -0
- package/lib/commands/sgd/source/delta.js.map +1 -1
- package/lib/main.d.ts +2 -2
- package/lib/main.js +84 -37
- package/lib/main.js.map +1 -1
- package/lib/post-processor/baseProcessor.d.ts +11 -8
- package/lib/post-processor/baseProcessor.js +8 -8
- package/lib/post-processor/baseProcessor.js.map +1 -1
- package/lib/post-processor/changesManifestProcessor.d.ts +3 -2
- package/lib/post-processor/changesManifestProcessor.js +5 -4
- package/lib/post-processor/changesManifestProcessor.js.map +1 -1
- package/lib/post-processor/flowTranslationProcessor.d.ts +6 -8
- package/lib/post-processor/flowTranslationProcessor.js +18 -20
- package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
- package/lib/post-processor/includeProcessor.d.ts +6 -6
- package/lib/post-processor/includeProcessor.js +8 -7
- package/lib/post-processor/includeProcessor.js.map +1 -1
- package/lib/post-processor/packageGenerator.d.ts +3 -2
- package/lib/post-processor/packageGenerator.js +5 -4
- package/lib/post-processor/packageGenerator.js.map +1 -1
- package/lib/post-processor/postProcessorManager.d.ts +5 -8
- package/lib/post-processor/postProcessorManager.js +24 -32
- package/lib/post-processor/postProcessorManager.js.map +1 -1
- package/lib/service/botHandler.d.ts +1 -2
- package/lib/service/botHandler.js +17 -10
- package/lib/service/botHandler.js.map +1 -1
- package/lib/service/containedDecomposedHandler.d.ts +4 -5
- package/lib/service/containedDecomposedHandler.js +14 -13
- package/lib/service/containedDecomposedHandler.js.map +1 -1
- package/lib/service/customFieldHandler.d.ts +1 -2
- package/lib/service/customFieldHandler.js +7 -6
- package/lib/service/customFieldHandler.js.map +1 -1
- package/lib/service/customLabelHandler.d.ts +1 -2
- package/lib/service/customLabelHandler.js +3 -3
- package/lib/service/customLabelHandler.js.map +1 -1
- package/lib/service/customObjectHandler.d.ts +3 -4
- package/lib/service/customObjectHandler.js +11 -10
- package/lib/service/customObjectHandler.js.map +1 -1
- package/lib/service/decomposedHandler.d.ts +3 -4
- package/lib/service/decomposedHandler.js +5 -4
- package/lib/service/decomposedHandler.js.map +1 -1
- package/lib/service/diffLineInterpreter.d.ts +3 -5
- package/lib/service/diffLineInterpreter.js +17 -16
- package/lib/service/diffLineInterpreter.js.map +1 -1
- package/lib/service/flowHandler.d.ts +1 -2
- package/lib/service/flowHandler.js +9 -4
- package/lib/service/flowHandler.js.map +1 -1
- package/lib/service/inFileHandler.d.ts +8 -9
- package/lib/service/inFileHandler.js +25 -25
- package/lib/service/inFileHandler.js.map +1 -1
- package/lib/service/inFolderHandler.d.ts +4 -5
- package/lib/service/inFolderHandler.js +7 -6
- package/lib/service/inFolderHandler.js.map +1 -1
- package/lib/service/inResourceHandler.d.ts +4 -5
- package/lib/service/inResourceHandler.js +11 -9
- package/lib/service/inResourceHandler.js.map +1 -1
- package/lib/service/objectTranslationHandler.d.ts +1 -2
- package/lib/service/objectTranslationHandler.js +6 -5
- package/lib/service/objectTranslationHandler.js.map +1 -1
- package/lib/service/reportingFolderHandler.d.ts +6 -7
- package/lib/service/reportingFolderHandler.js +6 -6
- package/lib/service/reportingFolderHandler.js.map +1 -1
- package/lib/service/sharedFolderHandler.d.ts +4 -5
- package/lib/service/sharedFolderHandler.js +6 -6
- package/lib/service/sharedFolderHandler.js.map +1 -1
- package/lib/service/standardHandler.d.ts +8 -10
- package/lib/service/standardHandler.js +34 -36
- package/lib/service/standardHandler.js.map +1 -1
- package/lib/service/typeHandlerFactory.d.ts +7 -5
- package/lib/service/typeHandlerFactory.js +13 -12
- package/lib/service/typeHandlerFactory.js.map +1 -1
- package/lib/types/config.d.ts +6 -1
- package/lib/types/handlerResult.d.ts +7 -7
- package/lib/types/handlerResult.js +10 -1
- package/lib/types/handlerResult.js.map +1 -1
- package/lib/types/runContext.d.ts +21 -0
- package/lib/types/runContext.js +12 -0
- package/lib/types/runContext.js.map +1 -0
- package/lib/types/work.d.ts +1 -1
- package/lib/utils/arrayUtils.d.ts +1 -1
- package/lib/utils/arrayUtils.js.map +1 -1
- package/lib/utils/bundleRollup.d.ts +6 -0
- package/lib/utils/bundleRollup.js +62 -0
- package/lib/utils/bundleRollup.js.map +1 -0
- package/lib/utils/changeSet.d.ts +12 -15
- package/lib/utils/changeSet.js +23 -120
- package/lib/utils/changeSet.js.map +1 -1
- package/lib/utils/changesAssembly.d.ts +8 -0
- package/lib/utils/changesAssembly.js +21 -0
- package/lib/utils/changesAssembly.js.map +1 -0
- package/lib/utils/configValidator.d.ts +8 -6
- package/lib/utils/configValidator.js +56 -13
- package/lib/utils/configValidator.js.map +1 -1
- package/lib/utils/fsHelper.d.ts +5 -3
- package/lib/utils/fsHelper.js +12 -9
- package/lib/utils/fsHelper.js.map +1 -1
- package/lib/utils/messageSanitizer.d.ts +1 -0
- package/lib/utils/messageSanitizer.js +48 -0
- package/lib/utils/messageSanitizer.js.map +1 -0
- package/lib/utils/metadataBoundaryResolver.d.ts +7 -5
- package/lib/utils/metadataBoundaryResolver.js +18 -21
- package/lib/utils/metadataBoundaryResolver.js.map +1 -1
- package/lib/utils/pathspec.d.ts +15 -0
- package/lib/utils/pathspec.js +71 -0
- package/lib/utils/pathspec.js.map +1 -0
- package/lib/utils/renameResolver.d.ts +6 -7
- package/lib/utils/renameResolver.js +10 -9
- package/lib/utils/renameResolver.js.map +1 -1
- package/lib/utils/repoGitDiff.d.ts +3 -0
- package/lib/utils/repoGitDiff.js +30 -1
- package/lib/utils/repoGitDiff.js.map +1 -1
- package/messages/delta.md +38 -0
- package/oclif.manifest.json +10 -3
- package/package.json +23 -22
- package/lib/post-processor/bundleRollupProcessor.d.ts +0 -7
- package/lib/post-processor/bundleRollupProcessor.js +0 -81
- package/lib/post-processor/bundleRollupProcessor.js.map +0 -1
|
@@ -13,17 +13,16 @@ import GitAdapter from './GitAdapter.js';
|
|
|
13
13
|
import { EscalateToStreamingSignal, GIT_ARCHIVE_DIR_THRESHOLD, } from './gitBlobReader.js';
|
|
14
14
|
const TMP_SUFFIX = '.tmp';
|
|
15
15
|
export default class IOExecutor {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
ctx;
|
|
17
|
+
blobReader;
|
|
18
18
|
processedPaths = new Set();
|
|
19
19
|
ignoreHelper;
|
|
20
|
-
constructor(
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
20
|
+
constructor(ctx, blobReader = GitAdapter.getInstance(ctx.config)) {
|
|
21
|
+
this.ctx = ctx;
|
|
22
|
+
this.blobReader = blobReader;
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return GitAdapter.getInstance(adapterConfig);
|
|
24
|
+
get config() {
|
|
25
|
+
return this.ctx.config;
|
|
27
26
|
}
|
|
28
27
|
async execute(copies) {
|
|
29
28
|
this.ignoreHelper = await buildIgnoreHelper(this.config);
|
|
@@ -51,12 +50,6 @@ export default class IOExecutor {
|
|
|
51
50
|
break;
|
|
52
51
|
}
|
|
53
52
|
}
|
|
54
|
-
_getGitAdapter(revision) {
|
|
55
|
-
const config = revision !== this.config.to
|
|
56
|
-
? { ...this.config, to: revision }
|
|
57
|
-
: this.config;
|
|
58
|
-
return GitAdapter.getInstance(config);
|
|
59
|
-
}
|
|
60
53
|
// Defense-in-depth shared by every copy path: reject any destination that
|
|
61
54
|
// resolves outside `config.output` (zip-slip). Tree paths from the object
|
|
62
55
|
// store should never contain '..', but a crafted store must not be able to
|
|
@@ -69,19 +62,20 @@ export default class IOExecutor {
|
|
|
69
62
|
const ref = { path: op.path, oid: op.revision };
|
|
70
63
|
const dst = join(this.config.output, op.path);
|
|
71
64
|
if (!this._isWithinOutput(dst)) {
|
|
65
|
+
// Stryker disable next-line StringLiteral,CallExpression -- equivalent: the log content and the call itself are observability only; the guard's real effect (no getBufferContentOrEscalate, no outputFile) is asserted by the escape-path tests
|
|
72
66
|
Logger.debug(lazy `IOExecutor gitFileCopy out-of-output dst ${dst}`);
|
|
73
67
|
return;
|
|
74
68
|
}
|
|
75
|
-
const reader = this.blobReaderForRevision(op.revision);
|
|
76
69
|
try {
|
|
77
|
-
const content = await
|
|
70
|
+
const content = await this.blobReader.getBufferContentOrEscalate(ref);
|
|
78
71
|
await outputFile(dst, content);
|
|
79
72
|
}
|
|
80
73
|
catch (error) {
|
|
81
74
|
if (error instanceof EscalateToStreamingSignal) {
|
|
82
|
-
await this._streamCopyWithAtomicRename(
|
|
75
|
+
await this._streamCopyWithAtomicRename(this.blobReader, ref, dst);
|
|
83
76
|
return;
|
|
84
77
|
}
|
|
78
|
+
// Stryker disable next-line CallExpression -- equivalent: removing the call entirely is observability only; the swallowed error's real effect (no outputFile) is already asserted
|
|
85
79
|
Logger.debug(
|
|
86
80
|
// Stryker disable next-line StringLiteral,ArrowFunction -- equivalent: lazy log content is observability only; tests assert on the swallowed error producing no output side-effect
|
|
87
81
|
lazy `IOExecutor gitFileCopy failed for ${op.path}: ${() => getErrorMessage(error)}`);
|
|
@@ -94,10 +88,9 @@ export default class IOExecutor {
|
|
|
94
88
|
}
|
|
95
89
|
async _executeGitDirCopy(op) {
|
|
96
90
|
try {
|
|
97
|
-
const
|
|
98
|
-
const filePaths = await gitAdapter.getFilesPath(op.path);
|
|
91
|
+
const filePaths = this.ctx.trees.filesUnder(op.revision, op.path);
|
|
99
92
|
if (filePaths.length > GIT_ARCHIVE_DIR_THRESHOLD) {
|
|
100
|
-
await this._executeGitDirCopyViaArchive(
|
|
93
|
+
await this._executeGitDirCopyViaArchive(this.blobReader, op, filePaths);
|
|
101
94
|
return;
|
|
102
95
|
}
|
|
103
96
|
for (const filePath of filePaths) {
|
|
@@ -106,10 +99,11 @@ export default class IOExecutor {
|
|
|
106
99
|
}
|
|
107
100
|
const dst = join(this.config.output, filePath);
|
|
108
101
|
if (!this._isWithinOutput(dst)) {
|
|
102
|
+
// Stryker disable next-line StringLiteral,CallExpression -- equivalent: the log content and the call itself are observability only; the skip's real effect (no getBufferContent, no outputFile for that child) is asserted by the escaping-child test
|
|
109
103
|
Logger.debug(lazy `IOExecutor gitDirCopy out-of-output dst ${dst}`);
|
|
110
104
|
continue;
|
|
111
105
|
}
|
|
112
|
-
const content = await
|
|
106
|
+
const content = await this.blobReader.getBufferContent({
|
|
113
107
|
path: filePath,
|
|
114
108
|
oid: op.revision,
|
|
115
109
|
});
|
|
@@ -118,7 +112,7 @@ export default class IOExecutor {
|
|
|
118
112
|
}
|
|
119
113
|
}
|
|
120
114
|
catch (error) {
|
|
121
|
-
// Stryker disable next-line BlockStatement -- equivalent: catch body is observability-only; emptying it skips the lazy log
|
|
115
|
+
// Stryker disable next-line BlockStatement,CallExpression -- equivalent: catch body is observability-only; emptying it, or dropping the call, skips only the lazy log — tests assert on the swallowed error not producing copies
|
|
122
116
|
Logger.debug(
|
|
123
117
|
// Stryker disable next-line StringLiteral,ArrowFunction -- equivalent: lazy log content is observability only
|
|
124
118
|
lazy `IOExecutor gitDirCopy failed for ${op.path}: ${() => getErrorMessage(error)}`);
|
|
@@ -160,6 +154,11 @@ export default class IOExecutor {
|
|
|
160
154
|
}
|
|
161
155
|
async _executeStreamedContent(op) {
|
|
162
156
|
const dst = join(this.config.output, op.path);
|
|
157
|
+
if (!this._isWithinOutput(dst)) {
|
|
158
|
+
// Stryker disable next-line StringLiteral,CallExpression -- equivalent: the log content and the call itself are observability only; the guard's real effect (writer never invoked) is asserted by the escape-path StreamedContent test
|
|
159
|
+
Logger.debug(lazy `IOExecutor streamedContent out-of-output dst ${dst}`);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
163
162
|
await this._writeAtomicallyViaTmp(dst, op.writer);
|
|
164
163
|
}
|
|
165
164
|
// Writes `producer` output to a sibling `.tmp` file, then atomically renames
|
|
@@ -182,6 +181,7 @@ export default class IOExecutor {
|
|
|
182
181
|
ws.destroy();
|
|
183
182
|
/* v8 ignore next -- defensive cleanup: best-effort tmp removal swallows ENOENT and permission errors */
|
|
184
183
|
await fsPromises.unlink(tmp).catch(() => undefined);
|
|
184
|
+
// Stryker disable next-line CallExpression -- equivalent: removing the call entirely is observability only; the failed write's real effects (unlink called, rename not called, stream destroyed) are already asserted
|
|
185
185
|
Logger.debug(
|
|
186
186
|
// Stryker disable next-line StringLiteral,ArrowFunction -- equivalent: lazy log content is observability only; tests assert on the failed-write side-effect (no output file)
|
|
187
187
|
lazy `IOExecutor atomicWrite failed for ${dst}: ${() => getErrorMessage(error)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ioExecutor.js","sourceRoot":"","sources":["../../src/adapter/ioExecutor.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,iBAAiB,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAQ/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"ioExecutor.js","sourceRoot":"","sources":["../../src/adapter/ioExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type DiffChange } from '@scolladon/tsgit';
|
|
2
|
+
import type { Pathspec } from '../utils/pathspec.js';
|
|
3
|
+
export declare const ROOT_PATHS: Set<string>;
|
|
4
|
+
export declare const inScope: (path: string, scopes: readonly string[]) => boolean;
|
|
5
|
+
export declare const hasRootScope: (scopes: readonly Pathspec[]) => boolean;
|
|
6
|
+
export declare const nonRootScopes: (scopes: readonly Pathspec[]) => Pathspec[];
|
|
7
|
+
export declare function toDiffLines(change: DiffChange, scopes: readonly string[]): Generator<string>;
|
|
8
|
+
export declare const buildLiteralMatcher: (specs: string[]) => (path: string) => boolean;
|
|
9
|
+
export declare const buildPathspecMatcher: (specs: string[]) => ((path: string) => boolean);
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { toSimilarityPercent } from '@scolladon/tsgit';
|
|
2
|
+
import { TAB } from '../constant/cliConstants.js';
|
|
3
|
+
import { ADDITION, DELETION, MODIFICATION, RENAMED, } from '../constant/gitConstants.js';
|
|
4
|
+
import { treatPathSep } from '../utils/fsUtils.js';
|
|
5
|
+
export const ROOT_PATHS = new Set(['', '.', './']);
|
|
6
|
+
const GITLINK_MODE = '160000';
|
|
7
|
+
export const inScope = (path, scopes) => scopes.some(scope => ROOT_PATHS.has(scope) || path === scope || path.startsWith(`${scope}/`));
|
|
8
|
+
const keepSide = (mode, path, scopes) => mode !== GITLINK_MODE && (scopes.length === 0 || inScope(path, scopes));
|
|
9
|
+
export const hasRootScope = (scopes) => scopes.some(scope => ROOT_PATHS.has(scope));
|
|
10
|
+
export const nonRootScopes = (scopes) => scopes.filter(scope => !ROOT_PATHS.has(scope));
|
|
11
|
+
// git prints rename similarity as a zero-padded three-digit percent (R087).
|
|
12
|
+
const similarityPercent = (similarity) => String(toSimilarityPercent(similarity.score)).padStart(3, '0');
|
|
13
|
+
// The facade diff takes no pathspec, so `-- <source>` scoping is replicated
|
|
14
|
+
// per side. Gitlink changes are skipped (submodule pointer moves are not
|
|
15
|
+
// deployable metadata) and `type-change`/`copy` entries are dropped for
|
|
16
|
+
// parity with the subprocess `--diff-filter=AMD(R)`. A rename with only one
|
|
17
|
+
// side in scope degrades to that side's A/D line, matching what the
|
|
18
|
+
// subprocess pathspec does to a broken rename pair.
|
|
19
|
+
export function* toDiffLines(change, scopes) {
|
|
20
|
+
switch (change.type) {
|
|
21
|
+
case 'add':
|
|
22
|
+
if (keepSide(change.newMode, change.newPath, scopes)) {
|
|
23
|
+
yield `${ADDITION}${TAB}${treatPathSep(change.newPath)}`;
|
|
24
|
+
}
|
|
25
|
+
break;
|
|
26
|
+
case 'delete':
|
|
27
|
+
if (keepSide(change.oldMode, change.oldPath, scopes)) {
|
|
28
|
+
yield `${DELETION}${TAB}${treatPathSep(change.oldPath)}`;
|
|
29
|
+
}
|
|
30
|
+
break;
|
|
31
|
+
case 'modify':
|
|
32
|
+
if (change.oldMode !== GITLINK_MODE &&
|
|
33
|
+
keepSide(change.newMode, change.path, scopes)) {
|
|
34
|
+
yield `${MODIFICATION}${TAB}${treatPathSep(change.path)}`;
|
|
35
|
+
}
|
|
36
|
+
break;
|
|
37
|
+
case 'rename': {
|
|
38
|
+
const oldKept = keepSide(change.oldMode, change.oldPath, scopes);
|
|
39
|
+
const newKept = keepSide(change.newMode, change.newPath, scopes);
|
|
40
|
+
if (oldKept && newKept) {
|
|
41
|
+
yield `${RENAMED}${similarityPercent(change.similarity)}${TAB}${treatPathSep(change.oldPath)}${TAB}${treatPathSep(change.newPath)}`;
|
|
42
|
+
}
|
|
43
|
+
else if (newKept) {
|
|
44
|
+
yield `${ADDITION}${TAB}${treatPathSep(change.newPath)}`;
|
|
45
|
+
}
|
|
46
|
+
else if (oldKept) {
|
|
47
|
+
yield `${DELETION}${TAB}${treatPathSep(change.oldPath)}`;
|
|
48
|
+
}
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const GLOB_CHARS = /[*?[]/;
|
|
54
|
+
const REGEXP_SPECIALS = /[.+^${}()|\\\]]/g;
|
|
55
|
+
// Concrete repository paths are matched by directory prefix only — no
|
|
56
|
+
// wildmatch, no leading-prefix normalisation. A path off the repository can
|
|
57
|
+
// never carry a leading './' or '/' (treatPathSep and basePath already rule
|
|
58
|
+
// those out), and treating `[` as a glob-class opener would misread real
|
|
59
|
+
// path segments like an object folder named `Custom[1]__c`.
|
|
60
|
+
export const buildLiteralMatcher = (specs) => (path) => inScope(path, specs);
|
|
61
|
+
// Git pathspec semantics: a literal pathspec matches by directory prefix; a
|
|
62
|
+
// pathspec containing wildcards uses wildmatch where `*` also crosses `/`
|
|
63
|
+
// (no `:(glob)` magic). Callers mix both shapes (e.g. flow translations use
|
|
64
|
+
// `<source>/*.translation-meta.xml`).
|
|
65
|
+
export const buildPathspecMatcher = (specs) => {
|
|
66
|
+
// Git normalizes leading `./` (and the `.//*` shape produced by the
|
|
67
|
+
// default `./` source dir) away before matching; repo paths never carry
|
|
68
|
+
// either prefix.
|
|
69
|
+
const normalized = specs.map(spec => spec.replace(/^(\.\/)+/, '').replace(/^\/+/, ''));
|
|
70
|
+
const literals = normalized.filter(spec => !GLOB_CHARS.test(spec));
|
|
71
|
+
const globs = normalized
|
|
72
|
+
.filter(spec => GLOB_CHARS.test(spec))
|
|
73
|
+
.map(spec => {
|
|
74
|
+
const escaped = spec
|
|
75
|
+
.replace(REGEXP_SPECIALS, '\\$&')
|
|
76
|
+
.replace(/\*/g, '.*')
|
|
77
|
+
.replace(/\?/g, '.');
|
|
78
|
+
return new RegExp(`^${escaped}$`);
|
|
79
|
+
});
|
|
80
|
+
return (path) => (literals.length > 0 && inScope(path, literals)) ||
|
|
81
|
+
globs.some(glob => glob.test(path));
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=pathMatching.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathMatching.js","sourceRoot":"","sources":["../../src/adapter/pathMatching.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,12 +6,15 @@ export declare class TreeIndex {
|
|
|
6
6
|
protected readonly root: TrieNode;
|
|
7
7
|
protected fileCount: number;
|
|
8
8
|
add(path: string): void;
|
|
9
|
-
has(path: string): boolean;
|
|
10
|
-
hasPath(path: string): boolean;
|
|
9
|
+
protected has(path: string): boolean;
|
|
10
|
+
protected hasPath(path: string): boolean;
|
|
11
11
|
listChildren(dir: string): string[];
|
|
12
|
-
getFilesUnder(dir: string): string[];
|
|
13
|
-
allPaths(): string[];
|
|
12
|
+
protected getFilesUnder(dir: string): string[];
|
|
13
|
+
protected allPaths(): string[];
|
|
14
14
|
get size(): number;
|
|
15
|
+
pathExists(path: string): boolean;
|
|
16
|
+
getFilesPath(paths: string | string[]): string[];
|
|
17
|
+
private getFilesPathFor;
|
|
15
18
|
protected navigate(path: string): TrieNode | undefined;
|
|
16
19
|
protected collectFiles(node: TrieNode, prefix: string, out: string[]): void;
|
|
17
20
|
}
|
package/lib/adapter/treeIndex.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
import { PATH_SEP } from '../constant/fsConstants.js';
|
|
3
|
+
import { pushAll } from '../utils/arrayUtils.js';
|
|
4
|
+
import { ROOT_PATHS } from './pathMatching.js';
|
|
3
5
|
const createNode = () => ({
|
|
4
6
|
children: new Map(),
|
|
5
7
|
isFile: false,
|
|
@@ -23,6 +25,10 @@ export class TreeIndex {
|
|
|
23
25
|
this.fileCount++;
|
|
24
26
|
}
|
|
25
27
|
}
|
|
28
|
+
// Not part of the public surface: the ROOT_PATHS-aware pathExists/
|
|
29
|
+
// getFilesPath wrappers below are every caller's actual entry point.
|
|
30
|
+
// Keeping these raw lookups protected stops a future caller from
|
|
31
|
+
// bypassing the ROOT_PATHS branch those wrappers exist for.
|
|
26
32
|
has(path) {
|
|
27
33
|
return this.navigate(path)?.isFile === true;
|
|
28
34
|
}
|
|
@@ -46,9 +52,37 @@ export class TreeIndex {
|
|
|
46
52
|
this.collectFiles(this.root, '', result);
|
|
47
53
|
return result;
|
|
48
54
|
}
|
|
55
|
+
// Stays public (unlike has/hasPath/getFilesUnder/allPaths above): no
|
|
56
|
+
// ROOT_PATHS-aware wrapper exposes the exact indexed-file count —
|
|
57
|
+
// pathExists/getFilesPath only answer boolean/list questions — so this
|
|
58
|
+
// is the sole way to pin the add() idempotency guarantee (the same path
|
|
59
|
+
// added twice must not double-count).
|
|
49
60
|
get size() {
|
|
50
61
|
return this.fileCount;
|
|
51
62
|
}
|
|
63
|
+
// The two ROOT_PATHS-aware lookups every caller used to ask GitAdapter
|
|
64
|
+
// for (pathExistsImpl, getFilesPathCached) — now answered by the index
|
|
65
|
+
// itself instead of a scope-keyed cache lookup.
|
|
66
|
+
pathExists(path) {
|
|
67
|
+
if (ROOT_PATHS.has(path))
|
|
68
|
+
return this.size > 0;
|
|
69
|
+
return this.hasPath(path);
|
|
70
|
+
}
|
|
71
|
+
getFilesPath(paths) {
|
|
72
|
+
const list = Array.isArray(paths) ? paths : [paths];
|
|
73
|
+
const result = [];
|
|
74
|
+
for (const path of list) {
|
|
75
|
+
pushAll(result, this.getFilesPathFor(path));
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
getFilesPathFor(path) {
|
|
80
|
+
if (ROOT_PATHS.has(path))
|
|
81
|
+
return this.allPaths();
|
|
82
|
+
if (this.has(path))
|
|
83
|
+
return [path];
|
|
84
|
+
return this.getFilesUnder(path);
|
|
85
|
+
}
|
|
52
86
|
navigate(path) {
|
|
53
87
|
if (!path)
|
|
54
88
|
return this.root;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeIndex.js","sourceRoot":"","sources":["../../src/adapter/treeIndex.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"treeIndex.js","sourceRoot":"","sources":["../../src/adapter/treeIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TreeIndex } from './treeIndex.js';
|
|
2
|
+
export type TreeReader = Readonly<{
|
|
3
|
+
pathExists(revision: string, path: string): boolean;
|
|
4
|
+
filesUnder(revision: string, paths: string | string[]): string[];
|
|
5
|
+
children(revision: string, dir: string): string[];
|
|
6
|
+
}>;
|
|
7
|
+
export declare const createTreeReader: (entries: ReadonlyMap<string, TreeIndex>) => TreeReader;
|
|
8
|
+
export declare const EMPTY_TREE_READER: TreeReader;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { TreeIndex } from './treeIndex.js';
|
|
3
|
+
// Null Object. An index with no entries answers every question with exactly
|
|
4
|
+
// the empty/false result each reader used to spell out for itself as
|
|
5
|
+
// `at(rev)?.x() ?? default` — including for ROOT_PATHS, where pathExists
|
|
6
|
+
// short-circuits to `size > 0` instead of walking to the (always present)
|
|
7
|
+
// root node.
|
|
8
|
+
const NO_INDEX = new TreeIndex();
|
|
9
|
+
export const createTreeReader = (entries) => {
|
|
10
|
+
const indexAt = (revision) => entries.get(revision) ?? NO_INDEX;
|
|
11
|
+
return {
|
|
12
|
+
pathExists: (revision, path) => indexAt(revision).pathExists(path),
|
|
13
|
+
filesUnder: (revision, paths) => indexAt(revision).getFilesPath(paths),
|
|
14
|
+
children: (revision, dir) => indexAt(revision).listChildren(dir),
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
// Safe default for callers/tests that never touch tree-index-backed
|
|
18
|
+
// lookups: every read resolves to the same empty degradation a revision
|
|
19
|
+
// that was never built would produce. Expressed via the real factory over
|
|
20
|
+
// an empty map so it cannot drift from what createTreeReader actually does.
|
|
21
|
+
export const EMPTY_TREE_READER = createTreeReader(new Map());
|
|
22
|
+
//# sourceMappingURL=treeReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeReader.js","sourceRoot":"","sources":["../../src/adapter/treeReader.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAwB1C,4EAA4E;AAC5E,qEAAqE;AACrE,yEAAyE;AACzE,0EAA0E;AAC1E,aAAa;AACb,MAAM,QAAQ,GAAkB,IAAI,SAAS,EAAE,CAAA;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAuC,EAC3B,EAAE;IACd,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAiB,EAAE,CAClD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;IACnC,OAAO;QACL,UAAU,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAClE,UAAU,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;QACtE,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;KACjE,CAAA;AACH,CAAC,CAAA;AAED,oEAAoE;AACpE,wEAAwE;AACxE,0EAA0E;AAC1E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAe,gBAAgB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA"}
|
|
@@ -7,6 +7,7 @@ export default class SourceDeltaGenerate extends SfCommand<SgdResult> {
|
|
|
7
7
|
static readonly flags: {
|
|
8
8
|
from: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
to: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
'merge-base': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
11
|
'generate-delta': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
12
|
'output-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
'repo-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
@@ -27,6 +27,10 @@ export default class SourceDeltaGenerate extends SfCommand {
|
|
|
27
27
|
summary: messages.getMessage('flags.to.summary'),
|
|
28
28
|
default: TO_DEFAULT_VALUE,
|
|
29
29
|
}),
|
|
30
|
+
'merge-base': Flags.boolean({
|
|
31
|
+
char: 'b',
|
|
32
|
+
summary: messages.getMessage('flags.merge-base.summary'),
|
|
33
|
+
}),
|
|
30
34
|
'generate-delta': Flags.boolean({
|
|
31
35
|
char: 'd',
|
|
32
36
|
summary: messages.getMessage('flags.generate-delta.summary'),
|
|
@@ -139,6 +143,7 @@ export default class SourceDeltaGenerate extends SfCommand {
|
|
|
139
143
|
ignoreWhitespace: flags['ignore-whitespace'],
|
|
140
144
|
include: flags['include-file'],
|
|
141
145
|
includeDestructive: flags['include-destructive-file'],
|
|
146
|
+
mergeBase: flags['merge-base'],
|
|
142
147
|
output: flags['output-dir'],
|
|
143
148
|
repo: flags['repo-dir'],
|
|
144
149
|
source: flags['source-dir'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delta.js","sourceRoot":"","sources":["../../../../src/commands/sgd/source/delta.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"delta.js","sourceRoot":"","sources":["../../../../src/commands/sgd/source/delta.ts"],"names":[],"mappings":"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"}
|
package/lib/main.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ConfigInput } from './types/config.js';
|
|
2
2
|
import type { Work } from './types/work.js';
|
|
3
3
|
export default _default;
|
|
4
|
-
declare function _default(
|
|
4
|
+
declare function _default(configInput: ConfigInput): Promise<Work>;
|
package/lib/main.js
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
import GitAdapter from './adapter/GitAdapter.js';
|
|
3
3
|
import IOExecutor from './adapter/ioExecutor.js';
|
|
4
|
+
import { createTreeReader, EMPTY_TREE_READER } from './adapter/treeReader.js';
|
|
4
5
|
import { getDefinition } from './metadata/metadataManager.js';
|
|
5
6
|
import { getPostProcessors } from './post-processor/postProcessorManager.js';
|
|
6
7
|
import DiffLineInterpreter from './service/diffLineInterpreter.js';
|
|
7
|
-
import { mergeResults } from './types/handlerResult.js';
|
|
8
|
-
import { pushAll } from './utils/arrayUtils.js';
|
|
9
8
|
import ChangeSet from './utils/changeSet.js';
|
|
9
|
+
import { assembleChanges } from './utils/changesAssembly.js';
|
|
10
10
|
import ConfigValidator from './utils/configValidator.js';
|
|
11
11
|
import { Logger, lazy } from './utils/LoggingService.js';
|
|
12
|
+
import { MessageService } from './utils/MessageService.js';
|
|
13
|
+
import { sanitizeForMessage } from './utils/messageSanitizer.js';
|
|
14
|
+
import { parseSourceDirs } from './utils/pathspec.js';
|
|
12
15
|
import RenameResolver from './utils/renameResolver.js';
|
|
13
16
|
import RepoGitDiff from './utils/repoGitDiff.js';
|
|
14
17
|
import { computeTreeIndexScope } from './utils/treeIndexScope.js';
|
|
15
|
-
export default async (
|
|
18
|
+
export default async (configInput) => {
|
|
16
19
|
// Stryker disable next-line StringLiteral -- equivalent: log content is observability only; tests assert on the returned Work, not lazy log lines
|
|
17
20
|
Logger.trace('main: entry');
|
|
18
21
|
// Stryker disable next-line StringLiteral -- equivalent: log content is observability only
|
|
19
|
-
Logger.debug(lazy `main: arguments ${
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
Logger.debug(lazy `main: arguments ${configInput}`);
|
|
23
|
+
const { pathspecs, rejections } = parseSourceDirs(configInput.source ?? []);
|
|
24
|
+
const config = { ...configInput, source: pathspecs };
|
|
25
|
+
// Captured before validateConfig() resolves them to full SHAs below, so
|
|
26
|
+
// the unmatched-scope warning can report what the user typed.
|
|
27
|
+
const requestedFrom = config.from;
|
|
28
|
+
const requestedTo = config.to;
|
|
25
29
|
try {
|
|
26
|
-
const
|
|
27
|
-
await configValidator.validateConfig();
|
|
30
|
+
const configWarnings = await new ConfigValidator(config, rejections).validateConfig();
|
|
28
31
|
const metadata = await getDefinition(config);
|
|
29
32
|
const repoGitDiffHelper = new RepoGitDiff(config, metadata);
|
|
30
33
|
// The treeIndex scope read needs the full path set up front, so when
|
|
@@ -45,6 +48,14 @@ export default async (config) => {
|
|
|
45
48
|
else {
|
|
46
49
|
lines = repoGitDiffHelper.getLines();
|
|
47
50
|
}
|
|
51
|
+
// Built here and threaded to every reader (DiffLineInterpreter,
|
|
52
|
+
// RenameResolver, IOExecutor, the post-processors) rather than cached
|
|
53
|
+
// on GitAdapter: one TreeIndex per revision, for this run only, so a
|
|
54
|
+
// reader can never see a different scope than the one this block just
|
|
55
|
+
// built under — the lesson from the shared, scope-keyed cache this
|
|
56
|
+
// replaces (see design history) is that a cache keyed by a value each
|
|
57
|
+
// reader recomputes is an implicit contract that will drift.
|
|
58
|
+
let trees = EMPTY_TREE_READER;
|
|
48
59
|
if (config.generateDelta) {
|
|
49
60
|
const gitAdapter = GitAdapter.getInstance(config);
|
|
50
61
|
let scopePaths = config.source;
|
|
@@ -54,39 +65,75 @@ export default async (config) => {
|
|
|
54
65
|
];
|
|
55
66
|
}
|
|
56
67
|
if (scopePaths.length > 0) {
|
|
57
|
-
await Promise.all([
|
|
58
|
-
gitAdapter.
|
|
59
|
-
gitAdapter.
|
|
68
|
+
const [toIndex, fromIndex] = await Promise.all([
|
|
69
|
+
gitAdapter.buildTreeIndex(config.to, scopePaths),
|
|
70
|
+
gitAdapter.buildTreeIndex(config.from, scopePaths),
|
|
60
71
|
]);
|
|
72
|
+
const entries = new Map();
|
|
73
|
+
// Stryker disable ConditionalExpression -- equivalent: forcing either guard to always run stores `undefined` at that revision key instead of skipping it, but the only reader is createTreeReader's `entries.get(revision) ?? NO_INDEX`, and Map.get answers `undefined` for an absent key and an explicitly-undefined value alike. `entries` is local to this block and exposes no has/size/enumeration, so no observer can tell the two apart
|
|
74
|
+
if (toIndex)
|
|
75
|
+
entries.set(config.to, toIndex);
|
|
76
|
+
if (fromIndex)
|
|
77
|
+
entries.set(config.from, fromIndex);
|
|
78
|
+
// Stryker restore ConditionalExpression
|
|
79
|
+
trees = createTreeReader(entries);
|
|
61
80
|
}
|
|
62
81
|
}
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
//
|
|
67
|
-
//
|
|
82
|
+
const ctx = { config, metadata, trees };
|
|
83
|
+
const lineProcessor = new DiffLineInterpreter(ctx);
|
|
84
|
+
const postProcessors = getPostProcessors(ctx);
|
|
85
|
+
// First pass: build the read model from handler output alone so collectors
|
|
86
|
+
// (FlowTranslationProcessor) introspect the handler-pass package view before
|
|
87
|
+
// include lines exist.
|
|
68
88
|
const handlerResult = await lineProcessor.process(lines);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
//
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
89
|
+
const handlerView = ChangeSet.from(handlerResult.elements); // handler pass ONLY
|
|
90
|
+
const postResult = await postProcessors.collectAll(handlerView);
|
|
91
|
+
// Resolve git-detected renames — the `{fromPath, toPath}` pairs
|
|
92
|
+
// RepoGitDiff captured from `-M` output — into (type, from, to) triples.
|
|
93
|
+
// Pairs for ignored paths or bundle helper files (same member on both
|
|
94
|
+
// sides) resolve to no triple.
|
|
95
|
+
const renameTriples = await new RenameResolver(ctx).resolve(repoGitDiffHelper.getRenamePairs());
|
|
96
|
+
const { changes, copies, warnings: assemblyWarnings, } = assembleChanges(handlerResult, postResult, renameTriples);
|
|
97
|
+
await new IOExecutor(ctx).execute(copies);
|
|
98
|
+
const processorWarnings = await postProcessors.executeRemaining(changes);
|
|
99
|
+
// The diff is fully drained by this point (the same assumption
|
|
100
|
+
// getRenamePairs() above already relies on), so the per-scope
|
|
101
|
+
// counters are final. Only warn when the run produced no visible
|
|
102
|
+
// changes at all — a non-empty manifest (e.g. members sourced by
|
|
103
|
+
// --include-file independent of the diff) means the scope did its
|
|
104
|
+
// job, so naming it as unmatched would be misleading.
|
|
105
|
+
const unmatchedScopes = repoGitDiffHelper.getUnmatchedSourceScopes();
|
|
106
|
+
const sourceScopeWarnings = unmatchedScopes.length > 0 && changes.isEmpty()
|
|
107
|
+
? [
|
|
108
|
+
new Error(new MessageService().getMessage('warning.SourceDirMatchedNothing', [
|
|
109
|
+
// Sanitize each scope before joining: the length cap in
|
|
110
|
+
// sanitizeForMessage must apply per scope, not to the
|
|
111
|
+
// joined aggregate, or one long scope name silently
|
|
112
|
+
// elides every scope listed after it.
|
|
113
|
+
unmatchedScopes.map(sanitizeForMessage).join(', '),
|
|
114
|
+
sanitizeForMessage(requestedFrom),
|
|
115
|
+
sanitizeForMessage(requestedTo),
|
|
116
|
+
])),
|
|
117
|
+
]
|
|
118
|
+
: [];
|
|
119
|
+
const work = {
|
|
120
|
+
config,
|
|
121
|
+
changes,
|
|
122
|
+
warnings: [
|
|
123
|
+
...configWarnings,
|
|
124
|
+
...assemblyWarnings,
|
|
125
|
+
...processorWarnings,
|
|
126
|
+
...sourceScopeWarnings,
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
// Stryker disable next-line StringLiteral -- equivalent: log content is observability only
|
|
130
|
+
Logger.debug(lazy `main: return ${work}`);
|
|
131
|
+
// Stryker disable next-line StringLiteral -- equivalent: log content is observability only
|
|
132
|
+
Logger.trace('main: exit');
|
|
133
|
+
return work;
|
|
82
134
|
}
|
|
83
135
|
finally {
|
|
84
136
|
await GitAdapter.closeAll();
|
|
85
137
|
}
|
|
86
|
-
// Stryker disable next-line StringLiteral -- equivalent: log content is observability only
|
|
87
|
-
Logger.debug(lazy `main: return ${work}`);
|
|
88
|
-
// Stryker disable next-line StringLiteral -- equivalent: log content is observability only
|
|
89
|
-
Logger.trace('main: exit');
|
|
90
|
-
return work;
|
|
91
138
|
};
|
|
92
139
|
//# sourceMappingURL=main.js.map
|