sfdx-git-delta 6.41.2 → 6.42.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 +35 -2
- package/lib/adapter/GitAdapter.d.ts +1 -0
- package/lib/adapter/GitAdapter.js +71 -27
- package/lib/adapter/GitAdapter.js.map +1 -1
- package/lib/commands/sgd/source/delta.d.ts +2 -0
- package/lib/commands/sgd/source/delta.js +31 -1
- package/lib/commands/sgd/source/delta.js.map +1 -1
- package/lib/constant/cliConstants.d.ts +2 -0
- package/lib/constant/cliConstants.js +4 -0
- package/lib/constant/cliConstants.js.map +1 -1
- package/lib/constant/gitConstants.d.ts +1 -0
- package/lib/constant/gitConstants.js +4 -0
- package/lib/constant/gitConstants.js.map +1 -1
- package/lib/main.js +14 -4
- package/lib/main.js.map +1 -1
- package/lib/post-processor/changesManifestProcessor.d.ts +15 -0
- package/lib/post-processor/changesManifestProcessor.js +50 -0
- package/lib/post-processor/changesManifestProcessor.js.map +1 -0
- package/lib/post-processor/flowTranslationProcessor.d.ts +1 -0
- package/lib/post-processor/flowTranslationProcessor.js +12 -4
- package/lib/post-processor/flowTranslationProcessor.js.map +1 -1
- package/lib/post-processor/packageGenerator.d.ts +0 -2
- package/lib/post-processor/packageGenerator.js +7 -27
- package/lib/post-processor/packageGenerator.js.map +1 -1
- package/lib/post-processor/postProcessorManager.js +6 -1
- package/lib/post-processor/postProcessorManager.js.map +1 -1
- package/lib/service/botHandler.js +1 -0
- package/lib/service/botHandler.js.map +1 -1
- package/lib/service/inFileHandler.d.ts +2 -2
- package/lib/service/inFileHandler.js +7 -5
- package/lib/service/inFileHandler.js.map +1 -1
- package/lib/service/reportingFolderHandler.d.ts +5 -2
- package/lib/service/reportingFolderHandler.js +1 -2
- package/lib/service/reportingFolderHandler.js.map +1 -1
- package/lib/service/sharedFolderHandler.d.ts +5 -2
- package/lib/service/sharedFolderHandler.js +1 -2
- package/lib/service/sharedFolderHandler.js.map +1 -1
- package/lib/service/standardHandler.d.ts +8 -2
- package/lib/service/standardHandler.js +21 -3
- package/lib/service/standardHandler.js.map +1 -1
- package/lib/types/config.d.ts +1 -0
- package/lib/types/handlerResult.d.ts +8 -0
- package/lib/types/handlerResult.js +7 -0
- package/lib/types/handlerResult.js.map +1 -1
- package/lib/types/work.d.ts +2 -5
- package/lib/utils/changeSet.d.ts +48 -0
- package/lib/utils/changeSet.js +173 -0
- package/lib/utils/changeSet.js.map +1 -0
- package/lib/utils/configValidator.d.ts +1 -0
- package/lib/utils/configValidator.js +39 -1
- package/lib/utils/configValidator.js.map +1 -1
- package/lib/utils/metadataDiff.d.ts +1 -0
- package/lib/utils/metadataDiff.js +22 -8
- package/lib/utils/metadataDiff.js.map +1 -1
- package/lib/utils/renameResolver.d.ts +19 -0
- package/lib/utils/renameResolver.js +52 -0
- package/lib/utils/renameResolver.js.map +1 -0
- package/lib/utils/repoGitDiff.d.ts +7 -0
- package/lib/utils/repoGitDiff.js +34 -4
- package/lib/utils/repoGitDiff.js.map +1 -1
- package/messages/delta.md +12 -0
- package/npm-shrinkwrap.json +333 -342
- package/oclif.manifest.json +9 -1
- package/package.json +8 -8
- package/lib/utils/manifestAggregator.d.ts +0 -3
- package/lib/utils/manifestAggregator.js +0 -22
- package/lib/utils/manifestAggregator.js.map +0 -1
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { ChangeKind, ManifestTarget, } from '../types/handlerResult.js';
|
|
3
|
+
const RENAME_KEY_SEPARATOR = '\0';
|
|
4
|
+
const renameKey = (from, to) => `${from}${RENAME_KEY_SEPARATOR}${to}`;
|
|
5
|
+
/**
|
|
6
|
+
* Domain object that collects every component change observed in a diff and
|
|
7
|
+
* derives the views consumed downstream:
|
|
8
|
+
* - Package manifest (`ManifestTarget.Package` entries + rename targets)
|
|
9
|
+
* - Destructive manifest (`ManifestTarget.DestructiveChanges` entries +
|
|
10
|
+
* rename sources — minus entries that also appear in the Package view)
|
|
11
|
+
* - Per-kind bucket map (used for the JSON review manifest)
|
|
12
|
+
*
|
|
13
|
+
* `ManifestTarget` and `ChangeKind` are orthogonal. A single ManifestElement
|
|
14
|
+
* can be (target=Package, changeKind=Delete) — this happens when InFileHandler
|
|
15
|
+
* treats a deleted container file as an addition to preserve surviving
|
|
16
|
+
* sub-elements. The xml manifests MUST route on `target` (the deployment
|
|
17
|
+
* contract); `changeKind` only drives the review-oriented JSON bucket.
|
|
18
|
+
*
|
|
19
|
+
* Insertion goes through `add` for single-component changes and
|
|
20
|
+
* `recordRename` for rename pairs. Views are pure projections.
|
|
21
|
+
*/
|
|
22
|
+
export default class ChangeSet {
|
|
23
|
+
byTarget = {
|
|
24
|
+
[ManifestTarget.Package]: new Map(),
|
|
25
|
+
[ManifestTarget.DestructiveChanges]: new Map(),
|
|
26
|
+
};
|
|
27
|
+
byKind = {
|
|
28
|
+
[ChangeKind.Add]: new Map(),
|
|
29
|
+
[ChangeKind.Modify]: new Map(),
|
|
30
|
+
[ChangeKind.Delete]: new Map(),
|
|
31
|
+
};
|
|
32
|
+
renames = new Map();
|
|
33
|
+
static from(elements) {
|
|
34
|
+
const set = new ChangeSet();
|
|
35
|
+
for (const element of elements) {
|
|
36
|
+
set.addElement(element);
|
|
37
|
+
}
|
|
38
|
+
return set;
|
|
39
|
+
}
|
|
40
|
+
// Precise insertion — respects the full (target, changeKind) discriminator.
|
|
41
|
+
// Callers that know both axes use this; the handler pipeline feeds
|
|
42
|
+
// ManifestElements through `from()`.
|
|
43
|
+
addElement(element) {
|
|
44
|
+
this._addToManifest(this.byTarget[element.target], element.type, element.member);
|
|
45
|
+
this._addToManifest(this.byKind[element.changeKind], element.type, element.member);
|
|
46
|
+
}
|
|
47
|
+
// Convenience for callers (mostly tests) that operate under the standard
|
|
48
|
+
// convention: Add/Modify target Package, Delete targets DestructiveChanges.
|
|
49
|
+
// Production handlers that diverge from this convention (e.g. InFileHandler
|
|
50
|
+
// treating a deleted container as an addition) MUST use addElement instead.
|
|
51
|
+
add(kind, type, member) {
|
|
52
|
+
const target = kind === ChangeKind.Delete
|
|
53
|
+
? ManifestTarget.DestructiveChanges
|
|
54
|
+
: ManifestTarget.Package;
|
|
55
|
+
this.addElement({ target, type, member, changeKind: kind });
|
|
56
|
+
}
|
|
57
|
+
recordRename(type, from, to) {
|
|
58
|
+
if (from === to)
|
|
59
|
+
return;
|
|
60
|
+
if (!this.renames.has(type)) {
|
|
61
|
+
this.renames.set(type, new Map());
|
|
62
|
+
}
|
|
63
|
+
this.renames.get(type).set(renameKey(from, to), { from, to });
|
|
64
|
+
}
|
|
65
|
+
forPackageManifest() {
|
|
66
|
+
return this._unionByType([
|
|
67
|
+
this.byTarget[ManifestTarget.Package],
|
|
68
|
+
this._renameTargetsByType(),
|
|
69
|
+
]);
|
|
70
|
+
}
|
|
71
|
+
forDestructiveManifest() {
|
|
72
|
+
const baseDeletes = this._unionByType([
|
|
73
|
+
this.byTarget[ManifestTarget.DestructiveChanges],
|
|
74
|
+
this._renameSourcesByType(),
|
|
75
|
+
]);
|
|
76
|
+
return this._subtractByType(baseDeletes, this.forPackageManifest());
|
|
77
|
+
}
|
|
78
|
+
byChangeKind() {
|
|
79
|
+
// Rename participants move to the Rename bucket so every entry lives in
|
|
80
|
+
// exactly one user-visible bucket.
|
|
81
|
+
// Delete subtracts Add ∪ Modify (cancelled deletions) and rename sources.
|
|
82
|
+
const targets = this._renameTargetsByType();
|
|
83
|
+
const sources = this._renameSourcesByType();
|
|
84
|
+
return {
|
|
85
|
+
[ChangeKind.Add]: this._subtractByType(this.byKind[ChangeKind.Add], targets),
|
|
86
|
+
// Clone so callers that mutate the returned Modify view cannot corrupt
|
|
87
|
+
// ChangeSet internal state. Add and Delete buckets are already new
|
|
88
|
+
// Map instances returned by _subtractByType.
|
|
89
|
+
[ChangeKind.Modify]: this._cloneManifest(this.byKind[ChangeKind.Modify]),
|
|
90
|
+
[ChangeKind.Delete]: this._subtractByType(this.byKind[ChangeKind.Delete], this._unionByType([
|
|
91
|
+
this.byKind[ChangeKind.Add],
|
|
92
|
+
this.byKind[ChangeKind.Modify],
|
|
93
|
+
sources,
|
|
94
|
+
])),
|
|
95
|
+
[ChangeKind.Rename]: this._cloneRenames(),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
_addToManifest(manifest, type, member) {
|
|
99
|
+
if (!manifest.has(type)) {
|
|
100
|
+
manifest.set(type, new Set());
|
|
101
|
+
}
|
|
102
|
+
manifest.get(type).add(member);
|
|
103
|
+
}
|
|
104
|
+
_cloneManifest(manifest) {
|
|
105
|
+
const clone = new Map();
|
|
106
|
+
for (const [type, members] of manifest) {
|
|
107
|
+
clone.set(type, new Set(members));
|
|
108
|
+
}
|
|
109
|
+
return clone;
|
|
110
|
+
}
|
|
111
|
+
// `recordRename` always inserts at least one pair per type key, so the
|
|
112
|
+
// inner Set is non-empty by construction. No size check needed.
|
|
113
|
+
_renameTargetsByType() {
|
|
114
|
+
const result = new Map();
|
|
115
|
+
for (const [type, pairs] of this.renames) {
|
|
116
|
+
const members = new Set();
|
|
117
|
+
for (const { to } of pairs.values())
|
|
118
|
+
members.add(to);
|
|
119
|
+
result.set(type, members);
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
_renameSourcesByType() {
|
|
124
|
+
const result = new Map();
|
|
125
|
+
for (const [type, pairs] of this.renames) {
|
|
126
|
+
const members = new Set();
|
|
127
|
+
for (const { from } of pairs.values())
|
|
128
|
+
members.add(from);
|
|
129
|
+
result.set(type, members);
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
_cloneRenames() {
|
|
134
|
+
const clone = new Map();
|
|
135
|
+
for (const [type, pairs] of this.renames) {
|
|
136
|
+
clone.set(type, new Map(pairs));
|
|
137
|
+
}
|
|
138
|
+
return clone;
|
|
139
|
+
}
|
|
140
|
+
_unionByType(manifests) {
|
|
141
|
+
const result = new Map();
|
|
142
|
+
for (const manifest of manifests) {
|
|
143
|
+
for (const [type, members] of manifest) {
|
|
144
|
+
const existing = result.get(type);
|
|
145
|
+
if (existing) {
|
|
146
|
+
for (const member of members)
|
|
147
|
+
existing.add(member);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
result.set(type, new Set(members));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
_subtractByType(base, minus) {
|
|
157
|
+
const result = new Map();
|
|
158
|
+
for (const [type, members] of base) {
|
|
159
|
+
const cancellers = minus.get(type);
|
|
160
|
+
const remaining = new Set();
|
|
161
|
+
for (const member of members) {
|
|
162
|
+
if (!cancellers?.has(member)) {
|
|
163
|
+
remaining.add(member);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (remaining.size > 0) {
|
|
167
|
+
result.set(type, remaining);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=changeSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changeSet.js","sourceRoot":"","sources":["../../src/utils/changeSet.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export default class ConfigValidator {
|
|
|
10
10
|
constructor(work: Work);
|
|
11
11
|
protected _validateGitSha(): Promise<string[]>;
|
|
12
12
|
validateConfig(): Promise<void>;
|
|
13
|
+
protected _validateChangesManifest(): Promise<string[]>;
|
|
13
14
|
protected _handleDefault(): Promise<void>;
|
|
14
15
|
protected _getApiVersion(): Promise<void>;
|
|
15
16
|
protected _apiVersionDefault(): Promise<void>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
import { __decorate } from "tslib";
|
|
3
|
+
import { stat } from 'node:fs/promises';
|
|
3
4
|
import { join } from 'node:path/posix';
|
|
4
5
|
import { SfProject } from '@salesforce/core';
|
|
5
6
|
import GitAdapter from '../adapter/GitAdapter.js';
|
|
@@ -42,21 +43,57 @@ export default class ConfigValidator {
|
|
|
42
43
|
}
|
|
43
44
|
async validateConfig() {
|
|
44
45
|
this._sanitizeConfig();
|
|
45
|
-
const [, repoExists, gitErrors] = await Promise.all([
|
|
46
|
+
const [, repoExists, gitErrors, changesManifestErrors] = await Promise.all([
|
|
46
47
|
this._handleDefault(),
|
|
47
48
|
pathExists(join(this.config.repo, GIT_FOLDER)),
|
|
48
49
|
this._validateGitSha(),
|
|
50
|
+
this._validateChangesManifest(),
|
|
49
51
|
]);
|
|
50
52
|
const errors = [];
|
|
51
53
|
if (!repoExists) {
|
|
52
54
|
errors.push(this.message.getMessage('error.PathIsNotGit', [this.config.repo]));
|
|
53
55
|
}
|
|
54
56
|
pushAll(errors, gitErrors);
|
|
57
|
+
pushAll(errors, changesManifestErrors);
|
|
55
58
|
if (errors.length > 0) {
|
|
56
59
|
throw new ConfigError(errors.join(', '));
|
|
57
60
|
}
|
|
58
61
|
await this.gitAdapter.configureRepository();
|
|
59
62
|
}
|
|
63
|
+
// oclif cannot natively validate --changes-manifest (it uses a string flag
|
|
64
|
+
// to allow the bare form). Replicate meaningful checks: if the path already
|
|
65
|
+
// exists it must be a regular file; otherwise ENOENT is fine because
|
|
66
|
+
// fs-extra's outputFile creates the parent directory at write time.
|
|
67
|
+
async _validateChangesManifest() {
|
|
68
|
+
const target = this.config.changesManifest;
|
|
69
|
+
if (!target)
|
|
70
|
+
return [];
|
|
71
|
+
try {
|
|
72
|
+
const stats = await stat(target);
|
|
73
|
+
if (!stats.isFile()) {
|
|
74
|
+
return [
|
|
75
|
+
this.message.getMessage('error.ChangesManifestNotAFile', [target]),
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
// fs/promises stat always rejects with ErrnoException; narrow through
|
|
81
|
+
// an `instanceof Error` guard to keep `unknown` discipline, then read
|
|
82
|
+
// the POSIX code to distinguish "doesn't exist yet" from real failures.
|
|
83
|
+
const code = error instanceof Error
|
|
84
|
+
? error.code
|
|
85
|
+
: undefined;
|
|
86
|
+
if (code !== 'ENOENT') {
|
|
87
|
+
return [
|
|
88
|
+
this.message.getMessage('error.ChangesManifestStatFailed', [
|
|
89
|
+
target,
|
|
90
|
+
getErrorMessage(error),
|
|
91
|
+
]),
|
|
92
|
+
];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
60
97
|
async _handleDefault() {
|
|
61
98
|
await this._getApiVersion();
|
|
62
99
|
await this._apiVersionDefault();
|
|
@@ -104,6 +141,7 @@ export default class ConfigValidator {
|
|
|
104
141
|
this.config.include = sanitizePath(this.config.include);
|
|
105
142
|
this.config.includeDestructive = sanitizePath(this.config.includeDestructive);
|
|
106
143
|
this.config.additionalMetadataRegistryPath = sanitizePath(this.config.additionalMetadataRegistryPath);
|
|
144
|
+
this.config.changesManifest = sanitizePath(this.config.changesManifest);
|
|
107
145
|
}
|
|
108
146
|
}
|
|
109
147
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configValidator.js","sourceRoot":"","sources":["../../src/utils/configValidator.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAG1E,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,MAAM,QAAQ,GAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAElD,MAAM,CAAC,OAAO,OAAO,eAAe;IAKH;IAJZ,MAAM,CAAQ;IACd,UAAU,CAAY;IACtB,OAAO,CAAgB;IAE1C,YAA+B,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrD,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;IACrC,CAAC;IAES,KAAK,CAAC,eAAe;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAA;QAE3B,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,YAAY,EAAC,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YAC1C,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YACtE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CACV,IAAI,CAAA,qBAAqB,YAAY,QAAQ,QAAQ,6BAA6B,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CACjH,CAAA;gBACD,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,4BAA4B,EAAE;oBACpD,YAAY;oBACZ,QAAQ;iBACT,CAAC,CACH,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CACH,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAGY,AAAN,KAAK,CAAC,cAAc;QACzB,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"configValidator.js","sourceRoot":"","sources":["../../src/utils/configValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { type XmlContent } from './xmlHelper.js';
|
|
|
5
5
|
type CompareEntry = Pick<ManifestElement, 'type' | 'member'>;
|
|
6
6
|
interface CompareResult {
|
|
7
7
|
added: CompareEntry[];
|
|
8
|
+
modified: CompareEntry[];
|
|
8
9
|
deleted: CompareEntry[];
|
|
9
10
|
toContent: XmlContent;
|
|
10
11
|
fromContent: XmlContent;
|
|
@@ -37,9 +37,10 @@ export default class MetadataDiff {
|
|
|
37
37
|
const toContent = await parseXmlFileToJson({ path, oid: this.config.to }, this.config);
|
|
38
38
|
const fromContent = await parseXmlFileToJson({ path, oid: this.config.from }, this.config);
|
|
39
39
|
const comparator = new MetadataComparator(this.extractor, fromContent, toContent);
|
|
40
|
-
const added = comparator.
|
|
40
|
+
const added = comparator.getAdded();
|
|
41
|
+
const modified = comparator.getModified();
|
|
41
42
|
const deleted = comparator.getDeletion();
|
|
42
|
-
return { added, deleted, toContent, fromContent };
|
|
43
|
+
return { added, modified, deleted, toContent, fromContent };
|
|
43
44
|
}
|
|
44
45
|
prune(toContent, fromContent) {
|
|
45
46
|
const transformer = new JsonTransformer(this.extractor);
|
|
@@ -107,8 +108,11 @@ class MetadataComparator {
|
|
|
107
108
|
this.fromContent = fromContent;
|
|
108
109
|
this.toContent = toContent;
|
|
109
110
|
}
|
|
110
|
-
|
|
111
|
-
return this.compare(this.toContent, this.fromContent, this.
|
|
111
|
+
getAdded() {
|
|
112
|
+
return this.compare(this.toContent, this.fromContent, this.matchTrulyAdded);
|
|
113
|
+
}
|
|
114
|
+
getModified() {
|
|
115
|
+
return this.compare(this.toContent, this.fromContent, this.matchModified);
|
|
112
116
|
}
|
|
113
117
|
getDeletion() {
|
|
114
118
|
return this.compare(this.fromContent, this.toContent, this.matchDeleted);
|
|
@@ -143,13 +147,23 @@ class MetadataComparator {
|
|
|
143
147
|
}
|
|
144
148
|
return entries;
|
|
145
149
|
}
|
|
146
|
-
//
|
|
147
|
-
|
|
150
|
+
// Truly added: element not present in the opposite content by key
|
|
151
|
+
matchTrulyAdded = (targetLookup, keySelector, elem) => {
|
|
148
152
|
const elemKey = keySelector(elem);
|
|
153
|
+
// Keyless elements cannot be identified as pre-existing — bucket as modified
|
|
149
154
|
if (elemKey === undefined)
|
|
150
|
-
return
|
|
155
|
+
return false;
|
|
156
|
+
return !targetLookup.has(elemKey);
|
|
157
|
+
};
|
|
158
|
+
// Modified: element present in opposite content by key but with different content.
|
|
159
|
+
// Keyless elements are skipped — they lack identity, so emitting them under a
|
|
160
|
+
// keyed bucket would produce `member: undefined` entries in the changes manifest.
|
|
161
|
+
matchModified = (targetLookup, keySelector, elem) => {
|
|
162
|
+
const elemKey = keySelector(elem);
|
|
163
|
+
if (elemKey === undefined)
|
|
164
|
+
return false;
|
|
151
165
|
const match = targetLookup.get(elemKey);
|
|
152
|
-
return
|
|
166
|
+
return !!match && !deepEqual(match, elem);
|
|
153
167
|
};
|
|
154
168
|
// O(1) lookup instead of O(n) some()
|
|
155
169
|
matchDeleted = (targetLookup, keySelector, elem) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadataDiff.js","sourceRoot":"","sources":["../../src/utils/metadataDiff.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAKvC,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,iBAAiB,GAAG,SAAS,CAAA;AACnC,MAAM,kBAAkB,GAAG,UAAU,CAAA;AAErC,MAAM,OAAO,GAAG,CAAC,GAAc,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"metadataDiff.js","sourceRoot":"","sources":["../../src/utils/metadataDiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MetadataRepository } from '../metadata/MetadataRepository.js';
|
|
2
|
+
import type { Work } from '../types/work.js';
|
|
3
|
+
import type ChangeSet from './changeSet.js';
|
|
4
|
+
import type { RenamePathPair } from './repoGitDiff.js';
|
|
5
|
+
/**
|
|
6
|
+
* Turns the `{ fromPath, toPath }` pairs git emitted for `-M` renames into
|
|
7
|
+
* `ChangeSet.recordRename(type, from, to)` calls by re-using the handler
|
|
8
|
+
* machinery to resolve each side to its Salesforce (type, member).
|
|
9
|
+
*
|
|
10
|
+
* Pairs where metadata resolution fails (ignored path, unknown type) or where
|
|
11
|
+
* the from/to side land on the same component are skipped — those reduce to
|
|
12
|
+
* normal add/delete or no-ops already covered by the handler pipeline.
|
|
13
|
+
*/
|
|
14
|
+
export default class RenameResolver {
|
|
15
|
+
private readonly factory;
|
|
16
|
+
constructor(work: Work, metadata: MetadataRepository);
|
|
17
|
+
apply(changes: ChangeSet, pairs: readonly RenamePathPair[]): Promise<void>;
|
|
18
|
+
private _resolve;
|
|
19
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { __decorate } from "tslib";
|
|
3
|
+
import { TAB } from '../constant/cliConstants.js';
|
|
4
|
+
import { ADDITION, DELETION } from '../constant/gitConstants.js';
|
|
5
|
+
import TypeHandlerFactory from '../service/typeHandlerFactory.js';
|
|
6
|
+
import { getErrorMessage } from './errorUtils.js';
|
|
7
|
+
import { log } from './LoggingDecorator.js';
|
|
8
|
+
import { Logger, lazy } from './LoggingService.js';
|
|
9
|
+
/**
|
|
10
|
+
* Turns the `{ fromPath, toPath }` pairs git emitted for `-M` renames into
|
|
11
|
+
* `ChangeSet.recordRename(type, from, to)` calls by re-using the handler
|
|
12
|
+
* machinery to resolve each side to its Salesforce (type, member).
|
|
13
|
+
*
|
|
14
|
+
* Pairs where metadata resolution fails (ignored path, unknown type) or where
|
|
15
|
+
* the from/to side land on the same component are skipped — those reduce to
|
|
16
|
+
* normal add/delete or no-ops already covered by the handler pipeline.
|
|
17
|
+
*/
|
|
18
|
+
export default class RenameResolver {
|
|
19
|
+
factory;
|
|
20
|
+
constructor(work, metadata) {
|
|
21
|
+
this.factory = new TypeHandlerFactory(work, metadata);
|
|
22
|
+
}
|
|
23
|
+
async apply(changes, pairs) {
|
|
24
|
+
for (const pair of pairs) {
|
|
25
|
+
const resolved = await this._resolve(pair);
|
|
26
|
+
if (resolved) {
|
|
27
|
+
changes.recordRename(resolved.type, resolved.from, resolved.to);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async _resolve(pair) {
|
|
32
|
+
try {
|
|
33
|
+
const fromHandler = await this.factory.getTypeHandler(`${DELETION}${TAB}${pair.fromPath}`);
|
|
34
|
+
const toHandler = await this.factory.getTypeHandler(`${ADDITION}${TAB}${pair.toPath}`);
|
|
35
|
+
const from = fromHandler.getElementDescriptor();
|
|
36
|
+
const to = toHandler.getElementDescriptor();
|
|
37
|
+
if (from.type !== to.type)
|
|
38
|
+
return null;
|
|
39
|
+
if (from.member === to.member)
|
|
40
|
+
return null;
|
|
41
|
+
return { type: from.type, from: from.member, to: to.member };
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
Logger.warn(lazy `RenameResolver._resolve: skipping ${pair.fromPath} -> ${pair.toPath}: ${() => getErrorMessage(error)}`);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
__decorate([
|
|
50
|
+
log
|
|
51
|
+
], RenameResolver.prototype, "apply", null);
|
|
52
|
+
//# sourceMappingURL=renameResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renameResolver.js","sourceRoot":"","sources":["../../src/utils/renameResolver.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAEhE,OAAO,kBAAkB,MAAM,kCAAkC,CAAA;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAGlD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IAChB,OAAO,CAAoB;IAE5C,YAAY,IAAU,EAAE,QAA4B;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACvD,CAAC;IAGY,AAAN,KAAK,CAAC,KAAK,CAChB,OAAkB,EAClB,KAAgC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC1C,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CACpB,IAAoB;QAEpB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CACnD,GAAG,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CACpC,CAAA;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CACjD,GAAG,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAClC,CAAA;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,oBAAoB,EAAE,CAAA;YAC/C,MAAM,EAAE,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAA;YAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAA;YACtC,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAA;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CACT,IAAI,CAAA,qCAAqC,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAC5G,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF;AAlCc;IADZ,GAAG;2CAWH"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import GitAdapter from '../adapter/GitAdapter.js';
|
|
2
2
|
import { MetadataRepository } from '../metadata/MetadataRepository.js';
|
|
3
3
|
import type { Config } from '../types/config.js';
|
|
4
|
+
export type RenamePathPair = Readonly<{
|
|
5
|
+
fromPath: string;
|
|
6
|
+
toPath: string;
|
|
7
|
+
}>;
|
|
4
8
|
export default class RepoGitDiff {
|
|
5
9
|
protected readonly config: Config;
|
|
6
10
|
protected readonly metadata: MetadataRepository;
|
|
7
11
|
protected readonly gitAdapter: GitAdapter;
|
|
12
|
+
private renamePairs;
|
|
8
13
|
constructor(config: Config, metadata: MetadataRepository);
|
|
9
14
|
getLines(): Promise<string[]>;
|
|
15
|
+
getRenamePairs(): readonly RenamePathPair[];
|
|
16
|
+
protected _expandRenames(lines: string[]): string[];
|
|
10
17
|
protected _treatResult(lines: string[]): Promise<string[]>;
|
|
11
18
|
protected _getRenamedElements(lines: string[]): Set<string>;
|
|
12
19
|
protected _spreadLinePerDiffType(lines: string[]): Map<any, any>;
|
package/lib/utils/repoGitDiff.js
CHANGED
|
@@ -1,20 +1,50 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
import GitAdapter from '../adapter/GitAdapter.js';
|
|
3
|
-
import {
|
|
3
|
+
import { TAB } from '../constant/cliConstants.js';
|
|
4
|
+
import { ADDITION, DELETION, RENAMED } from '../constant/gitConstants.js';
|
|
4
5
|
import { buildIgnoreHelper } from './ignoreHelper.js';
|
|
5
6
|
export default class RepoGitDiff {
|
|
6
7
|
config;
|
|
7
8
|
metadata;
|
|
8
9
|
gitAdapter;
|
|
10
|
+
renamePairs = [];
|
|
9
11
|
constructor(config, metadata) {
|
|
10
12
|
this.config = config;
|
|
11
13
|
this.metadata = metadata;
|
|
12
14
|
this.gitAdapter = GitAdapter.getInstance(this.config);
|
|
13
15
|
}
|
|
14
16
|
async getLines() {
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
return
|
|
17
|
+
const rawLines = await this.gitAdapter.getDiffLines();
|
|
18
|
+
const expanded = this._expandRenames(rawLines);
|
|
19
|
+
return await this._treatResult(expanded);
|
|
20
|
+
}
|
|
21
|
+
getRenamePairs() {
|
|
22
|
+
return this.renamePairs;
|
|
23
|
+
}
|
|
24
|
+
// git emits `R<score>\tfrom\tto` when -M detects a rename. We split each
|
|
25
|
+
// rename into the equivalent pair of A/D lines so every downstream handler
|
|
26
|
+
// continues to operate on a (status, path) tuple; the rename pair is
|
|
27
|
+
// captured separately for ChangeSet to re-group into its Rename bucket.
|
|
28
|
+
_expandRenames(lines) {
|
|
29
|
+
this.renamePairs = [];
|
|
30
|
+
const expanded = [];
|
|
31
|
+
for (const line of lines) {
|
|
32
|
+
if (!line.startsWith(RENAMED)) {
|
|
33
|
+
expanded.push(line);
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const parts = line.split(TAB);
|
|
37
|
+
if (parts.length < 3) {
|
|
38
|
+
expanded.push(line);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const fromPath = parts[1];
|
|
42
|
+
const toPath = parts[2];
|
|
43
|
+
this.renamePairs.push({ fromPath, toPath });
|
|
44
|
+
expanded.push(`${DELETION}${TAB}${fromPath}`);
|
|
45
|
+
expanded.push(`${ADDITION}${TAB}${toPath}`);
|
|
46
|
+
}
|
|
47
|
+
return expanded;
|
|
18
48
|
}
|
|
19
49
|
async _treatResult(lines) {
|
|
20
50
|
const renamedElements = this._getRenamedElements(lines);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repoGitDiff.js","sourceRoot":"","sources":["../../src/utils/repoGitDiff.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"repoGitDiff.js","sourceRoot":"","sources":["../../src/utils/repoGitDiff.ts"],"names":[],"mappings":"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"}
|
package/messages/delta.md
CHANGED
|
@@ -76,6 +76,10 @@ file listing paths to explicitly include for any destructive actions
|
|
|
76
76
|
|
|
77
77
|
file containing additional metadata definitions to add to the registry
|
|
78
78
|
|
|
79
|
+
# flags.changes-manifest.summary
|
|
80
|
+
|
|
81
|
+
path to a JSON file grouping changed components by kind (add, modify, delete, rename); setting this flag also enables git rename detection
|
|
82
|
+
|
|
79
83
|
# error.ParameterIsNotGitSHA
|
|
80
84
|
|
|
81
85
|
--%s is not a valid sha pointer: '%s' (If in CI/CD context, check the fetch depth is properly set)
|
|
@@ -84,6 +88,14 @@ file containing additional metadata definitions to add to the registry
|
|
|
84
88
|
|
|
85
89
|
'%s' is not a git repository
|
|
86
90
|
|
|
91
|
+
# error.ChangesManifestNotAFile
|
|
92
|
+
|
|
93
|
+
--changes-manifest must point to a file path, '%s' already exists and is not a regular file
|
|
94
|
+
|
|
95
|
+
# error.ChangesManifestStatFailed
|
|
96
|
+
|
|
97
|
+
--changes-manifest: cannot inspect '%s': %s
|
|
98
|
+
|
|
87
99
|
# warning.ApiVersionOverridden
|
|
88
100
|
|
|
89
101
|
API version '%s' is not supported, using '%s' instead
|