@jayree/sfdx-plugin-manifest 3.0.18 → 3.1.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/CHANGELOG.md +23 -0
- package/README.md +3 -82
- package/oclif.manifest.json +1 -75
- package/package.json +14 -23
- package/lib/commands/jayree/manifest/legacy/git/diff.d.ts +0 -37
- package/lib/commands/jayree/manifest/legacy/git/diff.js +0 -649
- package/lib/commands/jayree/manifest/legacy/git/diff.js.map +0 -1
- package/schemas/jayree-manifest-legacy-git-diff.json +0 -19
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
# [3.1.0](https://github.com/jayree/sfdx-plugin-manifest/compare/v3.0.19...v3.1.0) (2023-05-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **deps:** bump @salesforce/sf-plugins-core from 2.4.3 to 3.0.1 ([#721](https://github.com/jayree/sfdx-plugin-manifest/issues/721)) ([8398c1a](https://github.com/jayree/sfdx-plugin-manifest/commit/8398c1a211fe33d22eeaf8c1657ef849717758e3))
|
|
7
|
+
* **deps:** bump @salesforce/source-deploy-retrieve from 8.5.1 to 8.5.3 ([#720](https://github.com/jayree/sfdx-plugin-manifest/issues/720)) ([8c660d8](https://github.com/jayree/sfdx-plugin-manifest/commit/8c660d8240c4d99c928a775a539626b81814ec91))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* remove legacy:git:diff ([a1453b6](https://github.com/jayree/sfdx-plugin-manifest/commit/a1453b68369dcb8cb940d0092e60e9f890781a1c))
|
|
13
|
+
|
|
14
|
+
## [3.0.19](https://github.com/jayree/sfdx-plugin-manifest/compare/v3.0.18...v3.0.19) (2023-05-19)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* **deps:** bump @salesforce/sf-plugins-core from 2.4.2 to 2.4.3 ([#710](https://github.com/jayree/sfdx-plugin-manifest/issues/710)) ([3ffac16](https://github.com/jayree/sfdx-plugin-manifest/commit/3ffac169289a2e4c4b6526615bf662e7a2fd18e3))
|
|
20
|
+
* **deps:** bump @salesforce/source-deploy-retrieve from 8.4.0 to 8.5.1 ([#705](https://github.com/jayree/sfdx-plugin-manifest/issues/705)) ([32b8980](https://github.com/jayree/sfdx-plugin-manifest/commit/32b8980ad7188dfed455e41c43da022a1d11cf4b))
|
|
21
|
+
* **deps:** bump listr2 from 6.4.2 to 6.6.0 ([#704](https://github.com/jayree/sfdx-plugin-manifest/issues/704)) ([9032c8c](https://github.com/jayree/sfdx-plugin-manifest/commit/9032c8c373262e90b3a16adfc697d529ec659f22))
|
|
22
|
+
* **deps:** bump tslib from 2.5.0 to 2.5.2 ([#708](https://github.com/jayree/sfdx-plugin-manifest/issues/708)) ([0c8b8c1](https://github.com/jayree/sfdx-plugin-manifest/commit/0c8b8c1b322e6578e35662d2442092bcfdaf6ba2))
|
|
23
|
+
|
|
1
24
|
## [3.0.18](https://github.com/jayree/sfdx-plugin-manifest/compare/v3.0.17...v3.0.18) (2023-05-17)
|
|
2
25
|
|
|
3
26
|
|
package/README.md
CHANGED
|
@@ -20,7 +20,6 @@ sfdx plugins:install @jayree/sfdx-plugin-manifest
|
|
|
20
20
|
* [`sfdx jayree:manifest:cleanup`](#sfdx-jayreemanifestcleanup)
|
|
21
21
|
* [`sfdx jayree:manifest:generate`](#sfdx-jayreemanifestgenerate)
|
|
22
22
|
* [`sfdx jayree:manifest:git:diff`](#sfdx-jayreemanifestgitdiff)
|
|
23
|
-
* [`sfdx jayree:manifest:legacy:git:diff`](#sfdx-jayreemanifestlegacygitdiff)
|
|
24
23
|
|
|
25
24
|
### `sfdx jayree:manifest:cleanup`
|
|
26
25
|
|
|
@@ -48,7 +47,7 @@ EXAMPLES
|
|
|
48
47
|
$ sfdx jayree:manifest:cleanup --manifest=package.xml --file=packageignore.xml
|
|
49
48
|
```
|
|
50
49
|
|
|
51
|
-
_See code: [src/commands/jayree/manifest/cleanup.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v3.0
|
|
50
|
+
_See code: [src/commands/jayree/manifest/cleanup.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v3.1.0/src/commands/jayree/manifest/cleanup.ts)_
|
|
52
51
|
|
|
53
52
|
### `sfdx jayree:manifest:generate`
|
|
54
53
|
|
|
@@ -84,7 +83,7 @@ EXAMPLES
|
|
|
84
83
|
<Package xmlns='http://soap.sforce.com/2006/04/metadata'>...</Package>
|
|
85
84
|
```
|
|
86
85
|
|
|
87
|
-
_See code: [src/commands/jayree/manifest/generate.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v3.0
|
|
86
|
+
_See code: [src/commands/jayree/manifest/generate.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v3.1.0/src/commands/jayree/manifest/generate.ts)_
|
|
88
87
|
|
|
89
88
|
### `sfdx jayree:manifest:git:diff`
|
|
90
89
|
|
|
@@ -166,83 +165,5 @@ FLAG DESCRIPTIONS
|
|
|
166
165
|
The location can be an absolute path or relative to the current working directory.
|
|
167
166
|
```
|
|
168
167
|
|
|
169
|
-
_See code: [src/commands/jayree/manifest/git/diff.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v3.0
|
|
170
|
-
|
|
171
|
-
### `sfdx jayree:manifest:legacy:git:diff`
|
|
172
|
-
|
|
173
|
-
Create a project manifest and destructiveChanges manifest that lists the metadata components you want to deploy or delete based on changes in your git history.
|
|
174
|
-
|
|
175
|
-
```
|
|
176
|
-
USAGE
|
|
177
|
-
$ sfdx jayree:manifest:legacy:git:diff REF1 [REF2] [--json] [-d <value>] [--output-dir <value>]
|
|
178
|
-
[--destructive-changes-only]
|
|
179
|
-
|
|
180
|
-
ARGUMENTS
|
|
181
|
-
REF1 Base commit or branch.
|
|
182
|
-
REF2 Commit or branch to compare to the base commit.
|
|
183
|
-
|
|
184
|
-
FLAGS
|
|
185
|
-
-d, --source-dir=<value>... Path to the local source files to include in the manifest.
|
|
186
|
-
--destructive-changes-only Create a destructiveChanges manifest only.
|
|
187
|
-
--output-dir=<value> Directory to save the created manifest files.
|
|
188
|
-
|
|
189
|
-
GLOBAL FLAGS
|
|
190
|
-
--json Format output as json.
|
|
191
|
-
|
|
192
|
-
DESCRIPTION
|
|
193
|
-
Create a project manifest and destructiveChanges manifest that lists the metadata components you want to deploy or
|
|
194
|
-
delete based on changes in your git history.
|
|
195
|
-
|
|
196
|
-
Use this command to create a manifest and destructiveChanges manifest file based on the difference (git diff) of two
|
|
197
|
-
git refs.
|
|
198
|
-
|
|
199
|
-
You can use all ways to spell <commit> which are valid for 'git diff' (See https://git-scm.com/docs/git-diff).
|
|
200
|
-
|
|
201
|
-
EXAMPLES
|
|
202
|
-
Uses the changes between two arbitrary <commit>.
|
|
203
|
-
|
|
204
|
-
$ sfdx jayree:manifest:legacy:git:diff <commit> <commit>
|
|
205
|
-
$ sfdx jayree:manifest:legacy:git:diff <commit>..<commit>
|
|
206
|
-
|
|
207
|
-
Uses the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both
|
|
208
|
-
<commit>.
|
|
209
|
-
|
|
210
|
-
$ sfdx jayree:manifest:legacy:git:diff <commit>...<commit>
|
|
211
|
-
|
|
212
|
-
Uses the diff of what is unique in branchB (REF2) and unique in branchA (REF1).
|
|
213
|
-
|
|
214
|
-
$ sfdx jayree:manifest:legacy:git:diff branchA..branchB
|
|
215
|
-
|
|
216
|
-
Uses the diff of what is unique in branchB (REF2).
|
|
217
|
-
|
|
218
|
-
$ sfdx jayree:manifest:legacy:git:diff branchA...branchB
|
|
219
|
-
|
|
220
|
-
Specify the flags before or after the REF args
|
|
221
|
-
|
|
222
|
-
$ sfdx jayree:manifest:legacy:git:diff --output-dir package <commit> <commit>
|
|
223
|
-
$ sfdx jayree:manifest:legacy:git:diff <commit> <commit> --output-dir package
|
|
224
|
-
|
|
225
|
-
If you specify the 'source-dir' flag before the REF args, use '--' to separate the args from the 'source-dir'
|
|
226
|
-
values.
|
|
227
|
-
|
|
228
|
-
$ sfdx jayree:manifest:legacy:git:diff --source-dir force-app -- <commit> <commit>
|
|
229
|
-
|
|
230
|
-
FLAG DESCRIPTIONS
|
|
231
|
-
-d, --source-dir=<value>... Path to the local source files to include in the manifest.
|
|
232
|
-
|
|
233
|
-
The supplied path can be to a single file (in which case the operation is applied to only one file) or to a folder
|
|
234
|
-
(in which case the operation is applied to all metadata types in the directory and its subdirectories).
|
|
235
|
-
|
|
236
|
-
You can specify this flag more than once.
|
|
237
|
-
|
|
238
|
-
--destructive-changes-only Create a destructiveChanges manifest only.
|
|
239
|
-
|
|
240
|
-
Use this flag to create a 'destructiveChanges.xml' and a blank 'package.xml'.
|
|
241
|
-
|
|
242
|
-
--output-dir=<value> Directory to save the created manifest files.
|
|
243
|
-
|
|
244
|
-
The location can be an absolute path or relative to the current working directory.
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
_See code: [src/commands/jayree/manifest/legacy/git/diff.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v3.0.18/src/commands/jayree/manifest/legacy/git/diff.ts)_
|
|
168
|
+
_See code: [src/commands/jayree/manifest/git/diff.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v3.1.0/src/commands/jayree/manifest/git/diff.ts)_
|
|
248
169
|
<!-- commandsstop -->
|
package/oclif.manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "3.0
|
|
2
|
+
"version": "3.1.0",
|
|
3
3
|
"commands": {
|
|
4
4
|
"jayree:manifest:cleanup": {
|
|
5
5
|
"id": "jayree:manifest:cleanup",
|
|
@@ -248,80 +248,6 @@
|
|
|
248
248
|
}
|
|
249
249
|
},
|
|
250
250
|
"requiresProject": true
|
|
251
|
-
},
|
|
252
|
-
"jayree:manifest:legacy:git:diff": {
|
|
253
|
-
"id": "jayree:manifest:legacy:git:diff",
|
|
254
|
-
"summary": "Create a project manifest and destructiveChanges manifest that lists the metadata components you want to deploy or delete based on changes in your git history.",
|
|
255
|
-
"description": "Use this command to create a manifest and destructiveChanges manifest file based on the difference (git diff) of two git refs.\n\nYou can use all ways to spell <commit> which are valid for 'git diff' (See https://git-scm.com/docs/git-diff).",
|
|
256
|
-
"strict": true,
|
|
257
|
-
"pluginName": "@jayree/sfdx-plugin-manifest",
|
|
258
|
-
"pluginAlias": "@jayree/sfdx-plugin-manifest",
|
|
259
|
-
"pluginType": "core",
|
|
260
|
-
"aliases": [],
|
|
261
|
-
"examples": [
|
|
262
|
-
"Uses the changes between two arbitrary <commit>.\n<%= config.bin %> <%= command.id %> <commit> <commit>\n<%= config.bin %> <%= command.id %> <commit>..<commit>",
|
|
263
|
-
"Uses the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>.\n<%= config.bin %> <%= command.id %> <commit>...<commit>",
|
|
264
|
-
"Uses the diff of what is unique in branchB (REF2) and unique in branchA (REF1).\n<%= config.bin %> <%= command.id %> branchA..branchB",
|
|
265
|
-
"Uses the diff of what is unique in branchB (REF2).\n<%= config.bin %> <%= command.id %> branchA...branchB",
|
|
266
|
-
"Specify the flags before or after the REF args\n<%= config.bin %> <%= command.id %> --output-dir package <commit> <commit>\n<%= config.bin %> <%= command.id %> <commit> <commit> --output-dir package",
|
|
267
|
-
"If you specify the 'source-dir' flag before the REF args, use '--' to separate the args from the 'source-dir' values.\n<%= config.bin %> <%= command.id %> --source-dir force-app -- <commit> <commit>"
|
|
268
|
-
],
|
|
269
|
-
"flags": {
|
|
270
|
-
"json": {
|
|
271
|
-
"name": "json",
|
|
272
|
-
"type": "boolean",
|
|
273
|
-
"description": "Format output as json.",
|
|
274
|
-
"helpGroup": "GLOBAL",
|
|
275
|
-
"allowNo": false
|
|
276
|
-
},
|
|
277
|
-
"source-dir": {
|
|
278
|
-
"name": "source-dir",
|
|
279
|
-
"type": "option",
|
|
280
|
-
"char": "d",
|
|
281
|
-
"summary": "Path to the local source files to include in the manifest.",
|
|
282
|
-
"description": "The supplied path can be to a single file (in which case the operation is applied to only one file) or to a folder (in which case the operation is applied to all metadata types in the directory and its subdirectories).\n\nYou can specify this flag more than once.",
|
|
283
|
-
"multiple": true,
|
|
284
|
-
"aliases": [
|
|
285
|
-
"sourcepath",
|
|
286
|
-
"p"
|
|
287
|
-
],
|
|
288
|
-
"delimiter": ","
|
|
289
|
-
},
|
|
290
|
-
"output-dir": {
|
|
291
|
-
"name": "output-dir",
|
|
292
|
-
"type": "option",
|
|
293
|
-
"summary": "Directory to save the created manifest files.",
|
|
294
|
-
"description": "The location can be an absolute path or relative to the current working directory.",
|
|
295
|
-
"multiple": false,
|
|
296
|
-
"default": "",
|
|
297
|
-
"aliases": [
|
|
298
|
-
"outputdir",
|
|
299
|
-
"o"
|
|
300
|
-
]
|
|
301
|
-
},
|
|
302
|
-
"destructive-changes-only": {
|
|
303
|
-
"name": "destructive-changes-only",
|
|
304
|
-
"type": "boolean",
|
|
305
|
-
"summary": "Create a destructiveChanges manifest only.",
|
|
306
|
-
"description": "Use this flag to create a 'destructiveChanges.xml' and a blank 'package.xml'.",
|
|
307
|
-
"allowNo": false,
|
|
308
|
-
"aliases": [
|
|
309
|
-
"destructivechangesonly"
|
|
310
|
-
]
|
|
311
|
-
}
|
|
312
|
-
},
|
|
313
|
-
"args": {
|
|
314
|
-
"ref1": {
|
|
315
|
-
"name": "ref1",
|
|
316
|
-
"description": "Base commit or branch.",
|
|
317
|
-
"required": true
|
|
318
|
-
},
|
|
319
|
-
"ref2": {
|
|
320
|
-
"name": "ref2",
|
|
321
|
-
"description": "Commit or branch to compare to the base commit."
|
|
322
|
-
}
|
|
323
|
-
},
|
|
324
|
-
"requiresProject": true
|
|
325
251
|
}
|
|
326
252
|
}
|
|
327
253
|
}
|
package/package.json
CHANGED
|
@@ -1,39 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jayree/sfdx-plugin-manifest",
|
|
3
3
|
"description": "A Salesforce CLI plugin containing commands for creating manifest files from Salesforce orgs or git commits of sfdx projects.",
|
|
4
|
-
"version": "3.0
|
|
4
|
+
"version": "3.1.0",
|
|
5
5
|
"author": "jayree",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bugs": "https://github.com/jayree/sfdx-plugin-manifest/issues",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@jayree/changelog": "^1.1.1",
|
|
10
|
-
"@salesforce/sf-plugins-core": "^
|
|
11
|
-
"@salesforce/source-deploy-retrieve": "^8.
|
|
10
|
+
"@salesforce/sf-plugins-core": "^3.0.1",
|
|
11
|
+
"@salesforce/source-deploy-retrieve": "^8.5.3",
|
|
12
12
|
"debug": "^4.3.4",
|
|
13
13
|
"fast-deep-equal": "^3.1.3",
|
|
14
14
|
"fast-xml-parser": "^4.2.2",
|
|
15
15
|
"fs-extra": "^11.1.1",
|
|
16
16
|
"graceful-fs": "^4.2.11",
|
|
17
17
|
"isomorphic-git": "^1.23.0",
|
|
18
|
-
"
|
|
19
|
-
"tslib": "^2.5.0"
|
|
18
|
+
"tslib": "^2.5.2"
|
|
20
19
|
},
|
|
21
20
|
"devDependencies": {
|
|
22
|
-
"@oclif/plugin-command-snapshot": "^
|
|
21
|
+
"@oclif/plugin-command-snapshot": "^4.0.2",
|
|
23
22
|
"@oclif/plugin-help": "^5.2.9",
|
|
24
23
|
"@salesforce/dev-config": "^4.0.1",
|
|
25
24
|
"@salesforce/dev-scripts": "^5.0.1",
|
|
26
|
-
"@salesforce/prettier-config": "^0.0.
|
|
27
|
-
"@salesforce/ts-sinon": "^1.4.
|
|
28
|
-
"@types/debug": "^4.1.
|
|
25
|
+
"@salesforce/prettier-config": "^0.0.3",
|
|
26
|
+
"@salesforce/ts-sinon": "^1.4.7",
|
|
27
|
+
"@types/debug": "^4.1.8",
|
|
29
28
|
"@types/fs-extra": "^11.0.1",
|
|
30
29
|
"@types/graceful-fs": "^4.1.6",
|
|
31
30
|
"@types/inquirer": "^9.0.3",
|
|
32
|
-
"@typescript-eslint/eslint-plugin": "^5.59.
|
|
33
|
-
"@typescript-eslint/parser": "^5.59.
|
|
31
|
+
"@typescript-eslint/eslint-plugin": "^5.59.7",
|
|
32
|
+
"@typescript-eslint/parser": "^5.59.7",
|
|
34
33
|
"c8": "^7.13.0",
|
|
35
34
|
"chai": "^4.3.7",
|
|
36
|
-
"eslint": "^8.
|
|
35
|
+
"eslint": "^8.41.0",
|
|
37
36
|
"eslint-config-oclif": "^4.0",
|
|
38
37
|
"eslint-config-prettier": "^8.8.0",
|
|
39
38
|
"eslint-config-salesforce": "^2.0.1",
|
|
@@ -41,9 +40,9 @@
|
|
|
41
40
|
"eslint-config-salesforce-typescript": "^1.1.1",
|
|
42
41
|
"eslint-plugin-header": "^3.1.1",
|
|
43
42
|
"eslint-plugin-import": "2.27.5",
|
|
44
|
-
"eslint-plugin-jsdoc": "^
|
|
43
|
+
"eslint-plugin-jsdoc": "^44.2.5",
|
|
45
44
|
"eslint-plugin-prettier": "^4.2.1",
|
|
46
|
-
"eslint-plugin-sf-plugin": "^1.15.
|
|
45
|
+
"eslint-plugin-sf-plugin": "^1.15.3",
|
|
47
46
|
"husky": "^8.0.3",
|
|
48
47
|
"is-ci": "^3.0.1",
|
|
49
48
|
"mocha": "^10.2.0",
|
|
@@ -53,7 +52,7 @@
|
|
|
53
52
|
"prettier": "^2.8.8",
|
|
54
53
|
"pretty-quick": "^3.1.3",
|
|
55
54
|
"shx": "^0.3.4",
|
|
56
|
-
"sinon": "15.0
|
|
55
|
+
"sinon": "15.1.0",
|
|
57
56
|
"ts-node": "^10.9.1",
|
|
58
57
|
"typescript": "^5.0.4",
|
|
59
58
|
"wireit": "^0.9.5"
|
|
@@ -98,14 +97,6 @@
|
|
|
98
97
|
"subtopics": {
|
|
99
98
|
"git": {
|
|
100
99
|
"description": "generate manifest files based on git data"
|
|
101
|
-
},
|
|
102
|
-
"legacy": {
|
|
103
|
-
"description": "legacy commands",
|
|
104
|
-
"subtopics": {
|
|
105
|
-
"git": {
|
|
106
|
-
"description": "generate manifest files based on git data"
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
100
|
}
|
|
110
101
|
}
|
|
111
102
|
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
-
import { Optional } from '@salesforce/ts-types';
|
|
3
|
-
export interface GitDiffCommandResult {
|
|
4
|
-
destructiveChanges: object;
|
|
5
|
-
manifest: object;
|
|
6
|
-
}
|
|
7
|
-
export default class GitDiff extends SfCommand<GitDiffCommandResult> {
|
|
8
|
-
static readonly summary: string;
|
|
9
|
-
static readonly description: string;
|
|
10
|
-
static readonly examples: string[];
|
|
11
|
-
static readonly args: {
|
|
12
|
-
ref1: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
13
|
-
ref2: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
14
|
-
};
|
|
15
|
-
static readonly requiresProject = true;
|
|
16
|
-
static readonly flags: {
|
|
17
|
-
'source-dir': import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
18
|
-
'output-dir': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
19
|
-
'destructive-changes-only': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
20
|
-
};
|
|
21
|
-
private isOutputEnabled;
|
|
22
|
-
private outputDir;
|
|
23
|
-
private destructiveChangesOnly;
|
|
24
|
-
private projectRoot;
|
|
25
|
-
private sourceApiVersion;
|
|
26
|
-
private destructiveChanges;
|
|
27
|
-
private manifest;
|
|
28
|
-
private gitLines;
|
|
29
|
-
private ref1VirtualTreeContainer;
|
|
30
|
-
private ref2VirtualTreeContainer;
|
|
31
|
-
private componentSet;
|
|
32
|
-
private outputErrors;
|
|
33
|
-
private outputWarnings;
|
|
34
|
-
private fsPaths;
|
|
35
|
-
run(): Promise<GitDiffCommandResult>;
|
|
36
|
-
protected getSourceApiVersion(): Promise<Optional<string>>;
|
|
37
|
-
}
|
|
@@ -1,649 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2022, jayree
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
* Licensed under the BSD 3-Clause license.
|
|
5
|
-
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
-
*/
|
|
7
|
-
import { join, basename, sep, posix, dirname, relative, resolve } from 'node:path';
|
|
8
|
-
import { fileURLToPath } from 'node:url';
|
|
9
|
-
import { format } from 'node:util';
|
|
10
|
-
import { SfCommand, Flags, arrayWithDeprecation } from '@salesforce/sf-plugins-core';
|
|
11
|
-
import { Messages, SfError, SfProject } from '@salesforce/core';
|
|
12
|
-
import { Args } from '@oclif/core';
|
|
13
|
-
import fs from 'fs-extra';
|
|
14
|
-
import { ListrLogger, Listr, PRESET_TIMER } from 'listr2';
|
|
15
|
-
import { env } from '@salesforce/kit';
|
|
16
|
-
import { getString } from '@salesforce/ts-types';
|
|
17
|
-
import equal from 'fast-deep-equal';
|
|
18
|
-
import { ComponentSet, RegistryAccess, registry, VirtualTreeContainer, MetadataResolver, DestructiveChangesType, } from '@salesforce/source-deploy-retrieve';
|
|
19
|
-
import { parseMetadataXml } from '@salesforce/source-deploy-retrieve/lib/src/utils/index.js';
|
|
20
|
-
import Debug from 'debug';
|
|
21
|
-
import git from 'isomorphic-git';
|
|
22
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
23
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
24
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
25
|
-
const __dirname = dirname(__filename);
|
|
26
|
-
Messages.importMessagesDirectory(__dirname);
|
|
27
|
-
const messages = Messages.loadMessages('@jayree/sfdx-plugin-manifest', 'gitdiff');
|
|
28
|
-
const logger = new ListrLogger({ useIcons: false });
|
|
29
|
-
const debug = Debug('jayree:manifest:git:diff');
|
|
30
|
-
const registryAccess = new RegistryAccess();
|
|
31
|
-
class GitDiff extends SfCommand {
|
|
32
|
-
async run() {
|
|
33
|
-
const { flags, args } = await this.parse(GitDiff);
|
|
34
|
-
const sourcepath = flags['source-dir'];
|
|
35
|
-
this.destructiveChangesOnly = flags['destructive-changes-only'];
|
|
36
|
-
this.outputDir = flags['output-dir'];
|
|
37
|
-
this.projectRoot = this.project.getPath();
|
|
38
|
-
this.sourceApiVersion = (await this.getSourceApiVersion());
|
|
39
|
-
this.destructiveChanges = join(this.outputDir, 'destructiveChanges.xml');
|
|
40
|
-
this.manifest = join(this.outputDir, 'package.xml');
|
|
41
|
-
debug({
|
|
42
|
-
outputDir: this.outputDir,
|
|
43
|
-
projectRoot: this.projectRoot,
|
|
44
|
-
});
|
|
45
|
-
const isContentTypeJSON = env.getString('SFDX_CONTENT_TYPE', '').toUpperCase() === 'JSON';
|
|
46
|
-
this.isOutputEnabled = !(this.argv.find((arg) => arg === '--json') ?? isContentTypeJSON);
|
|
47
|
-
const gitArgs = await getGitArgsFromArgv(args.ref1, args.ref2, this.argv, this.projectRoot);
|
|
48
|
-
debug({ gitArgs });
|
|
49
|
-
const tasks = new Listr([
|
|
50
|
-
{
|
|
51
|
-
title: `Execute 'git --no-pager diff --name-status --no-renames ${gitArgs.refString}'`,
|
|
52
|
-
task: async (ctx, task) => {
|
|
53
|
-
const { gitlines, warnings } = await getGitDiff(gitArgs.ref1, gitArgs.ref2, this.projectRoot);
|
|
54
|
-
this.gitLines = gitlines;
|
|
55
|
-
this.outputWarnings = warnings;
|
|
56
|
-
task.output = `Changed files: ${this.gitLines.length}`;
|
|
57
|
-
},
|
|
58
|
-
options: { persistentOutput: true },
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
// title: 'Warning output',
|
|
62
|
-
skip: () => !this.outputWarnings?.length,
|
|
63
|
-
task: (ctx, task) => {
|
|
64
|
-
debug({ warnings: this.outputWarnings });
|
|
65
|
-
const moreWarnings = this.outputWarnings.splice(5);
|
|
66
|
-
for (const message of this.outputWarnings) {
|
|
67
|
-
task.output = `Warning: unstaged file ${message}`;
|
|
68
|
-
}
|
|
69
|
-
task.output = moreWarnings.length ? `... ${moreWarnings.length} more warnings` : '';
|
|
70
|
-
},
|
|
71
|
-
options: { persistentOutput: true, bottomBar: 6 },
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
title: 'Create virtual tree container',
|
|
75
|
-
skip: () => !this.gitLines.length,
|
|
76
|
-
task: (ctx, task) => task.newListr([
|
|
77
|
-
{
|
|
78
|
-
title: `ref1: ${gitArgs.ref1}`,
|
|
79
|
-
task: async () => {
|
|
80
|
-
this.ref1VirtualTreeContainer = await createVirtualTreeContainer(gitArgs.ref1, this.projectRoot, this.gitLines.filter((l) => l.status === 'M').map((l) => l.path));
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
title: gitArgs.ref2 !== '' ? `ref2: ${gitArgs.ref2}` : 'ref2: (staging area)',
|
|
85
|
-
task: async () => {
|
|
86
|
-
this.ref2VirtualTreeContainer = await createVirtualTreeContainer(gitArgs.ref2, this.projectRoot, this.gitLines.filter((l) => l.status === 'M').map((l) => l.path));
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
], { concurrent: true }),
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
title: 'Analyze git diff results',
|
|
93
|
-
skip: () => !this.gitLines.length,
|
|
94
|
-
task: async (ctx, task) => {
|
|
95
|
-
if (sourcepath) {
|
|
96
|
-
this.fsPaths = sourcepath.map((filepath) => {
|
|
97
|
-
filepath = resolve(filepath);
|
|
98
|
-
if (!this.ref1VirtualTreeContainer.exists(filepath) &&
|
|
99
|
-
!this.ref2VirtualTreeContainer.exists(filepath)) {
|
|
100
|
-
throw new SfError(`The sourcepath "${filepath}" is not a valid source file path.`);
|
|
101
|
-
}
|
|
102
|
-
return filepath;
|
|
103
|
-
});
|
|
104
|
-
debug(`fsPaths: ${this.fsPaths.join(', ')}`);
|
|
105
|
-
}
|
|
106
|
-
const { manifest, output } = await getGitResults(this.gitLines, this.ref1VirtualTreeContainer, this.ref2VirtualTreeContainer, this.destructiveChangesOnly, this.fsPaths);
|
|
107
|
-
task.output = `Added: ${output.counts.added}, Deleted: ${output.counts.deleted}, Modified: ${output.counts.modified}, Unchanged: ${output.counts.unchanged}, Ignored: ${output.counts.ignored}${output.counts.error ? `, Errors: ${output.counts.error}` : ''}`;
|
|
108
|
-
this.outputErrors = output.errors;
|
|
109
|
-
debug({ manifest });
|
|
110
|
-
this.componentSet = fixComponentSetChilds(manifest);
|
|
111
|
-
this.componentSet.sourceApiVersion = this.sourceApiVersion;
|
|
112
|
-
},
|
|
113
|
-
options: { persistentOutput: true },
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
// title: 'Error output',
|
|
117
|
-
skip: () => !this.outputErrors?.length,
|
|
118
|
-
task: (ctx, task) => {
|
|
119
|
-
debug({ errors: this.outputErrors });
|
|
120
|
-
const moreErrors = this.outputErrors.splice(5);
|
|
121
|
-
for (const message of this.outputErrors) {
|
|
122
|
-
task.output = `Error: ${message}`;
|
|
123
|
-
}
|
|
124
|
-
task.output = moreErrors.length ? `... ${moreErrors.length} more errors` : '';
|
|
125
|
-
},
|
|
126
|
-
options: { persistentOutput: true, bottomBar: 6 },
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
title: 'Generate manifests',
|
|
130
|
-
skip: () => !this.componentSet?.size,
|
|
131
|
-
task: (ctx, task) => task.newListr([
|
|
132
|
-
{
|
|
133
|
-
title: this.manifest,
|
|
134
|
-
skip: () => !this.isOutputEnabled,
|
|
135
|
-
task: async () => {
|
|
136
|
-
await fs.ensureDir(dirname(this.manifest));
|
|
137
|
-
await fs.writeFile(this.manifest, await this.componentSet.getPackageXml());
|
|
138
|
-
},
|
|
139
|
-
options: { persistentOutput: true },
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
title: this.destructiveChanges,
|
|
143
|
-
skip: () => !this.componentSet.getTypesOfDestructiveChanges().length || !this.isOutputEnabled,
|
|
144
|
-
task: async () => {
|
|
145
|
-
await fs.ensureDir(dirname(this.destructiveChanges));
|
|
146
|
-
await fs.writeFile(this.destructiveChanges, await this.componentSet.getPackageXml(undefined, DestructiveChangesType.POST));
|
|
147
|
-
},
|
|
148
|
-
options: { persistentOutput: true },
|
|
149
|
-
},
|
|
150
|
-
], { concurrent: true }),
|
|
151
|
-
},
|
|
152
|
-
], {
|
|
153
|
-
rendererOptions: {
|
|
154
|
-
timer: {
|
|
155
|
-
...PRESET_TIMER,
|
|
156
|
-
condition: (duration) => duration > 250,
|
|
157
|
-
},
|
|
158
|
-
lazy: true,
|
|
159
|
-
collapseErrors: false,
|
|
160
|
-
collapseSubtasks: false,
|
|
161
|
-
},
|
|
162
|
-
silentRendererCondition: !this.isOutputEnabled,
|
|
163
|
-
fallbackRendererCondition: debug.enabled,
|
|
164
|
-
});
|
|
165
|
-
try {
|
|
166
|
-
await tasks.run();
|
|
167
|
-
return {
|
|
168
|
-
destructiveChanges: await this.componentSet?.getObject(DestructiveChangesType.POST),
|
|
169
|
-
manifest: await this.componentSet?.getObject(),
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
catch (e) {
|
|
173
|
-
if (debug.enabled && this.isOutputEnabled) {
|
|
174
|
-
logger.toStderr(e.message);
|
|
175
|
-
}
|
|
176
|
-
throw e;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
async getSourceApiVersion() {
|
|
180
|
-
const projectConfig = await this.project.resolveProjectConfig();
|
|
181
|
-
return getString(projectConfig, 'sourceApiVersion') ?? undefined;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
GitDiff.summary = messages.getMessage('summary');
|
|
185
|
-
GitDiff.description = messages.getMessage('description');
|
|
186
|
-
GitDiff.examples = messages.getMessages('examples');
|
|
187
|
-
GitDiff.args = {
|
|
188
|
-
ref1: Args.string({
|
|
189
|
-
required: true,
|
|
190
|
-
description: messages.getMessage('args.ref1.description'),
|
|
191
|
-
}),
|
|
192
|
-
ref2: Args.string({
|
|
193
|
-
description: messages.getMessage('args.ref2.description'),
|
|
194
|
-
}),
|
|
195
|
-
};
|
|
196
|
-
GitDiff.requiresProject = true;
|
|
197
|
-
GitDiff.flags = {
|
|
198
|
-
'source-dir': arrayWithDeprecation({
|
|
199
|
-
char: 'd',
|
|
200
|
-
summary: messages.getMessage('flags.source-dir.summary'),
|
|
201
|
-
description: messages.getMessage('flags.source-dir.description'),
|
|
202
|
-
deprecateAliases: true,
|
|
203
|
-
aliases: ['sourcepath', 'p'],
|
|
204
|
-
}),
|
|
205
|
-
'output-dir': Flags.directory({
|
|
206
|
-
summary: messages.getMessage('flags.output-dir.summary'),
|
|
207
|
-
description: messages.getMessage('flags.output-dir.description'),
|
|
208
|
-
default: '',
|
|
209
|
-
deprecateAliases: true,
|
|
210
|
-
aliases: ['outputdir', 'o'],
|
|
211
|
-
}),
|
|
212
|
-
'destructive-changes-only': Flags.boolean({
|
|
213
|
-
summary: messages.getMessage('flags.destructive-changes-only.summary'),
|
|
214
|
-
description: messages.getMessage('flags.destructive-changes-only.description'),
|
|
215
|
-
deprecateAliases: true,
|
|
216
|
-
aliases: ['destructivechangesonly'],
|
|
217
|
-
}),
|
|
218
|
-
};
|
|
219
|
-
export default GitDiff;
|
|
220
|
-
async function resolveRef(refOrig, dir) {
|
|
221
|
-
if (refOrig === '') {
|
|
222
|
-
return '';
|
|
223
|
-
}
|
|
224
|
-
const getCommitLog = async (ref) => {
|
|
225
|
-
try {
|
|
226
|
-
const [log] = await git.log({
|
|
227
|
-
fs,
|
|
228
|
-
dir,
|
|
229
|
-
ref,
|
|
230
|
-
depth: 1,
|
|
231
|
-
});
|
|
232
|
-
return { oid: log.oid, parents: log.commit.parent };
|
|
233
|
-
}
|
|
234
|
-
catch (error) {
|
|
235
|
-
throw new Error(`ambiguous argument '${ref}': unknown revision or path not in the working tree.
|
|
236
|
-
See more help with --help`);
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
if (!['~', '^'].some((el) => refOrig.includes(el))) {
|
|
240
|
-
return (await getCommitLog(refOrig)).oid;
|
|
241
|
-
}
|
|
242
|
-
const firstIndex = [refOrig.indexOf('^'), refOrig.indexOf('~')]
|
|
243
|
-
.filter((a) => a >= 0)
|
|
244
|
-
.reduce((a, b) => Math.min(a, b));
|
|
245
|
-
let path = refOrig.substring(firstIndex);
|
|
246
|
-
let ref = refOrig.substring(0, firstIndex);
|
|
247
|
-
while (path.length && ref !== undefined) {
|
|
248
|
-
if (path.startsWith('^')) {
|
|
249
|
-
path = path.substring(1);
|
|
250
|
-
let next = Number(path.substring(0, 1));
|
|
251
|
-
path = next ? path.substring(1) : path;
|
|
252
|
-
next = next ? next : 1;
|
|
253
|
-
// eslint-disable-next-line no-await-in-loop
|
|
254
|
-
ref = (await getCommitLog(ref)).parents[next - 1];
|
|
255
|
-
}
|
|
256
|
-
else if (path.startsWith('~')) {
|
|
257
|
-
path = path.substring(1);
|
|
258
|
-
let next = Number(path.substring(0, 1));
|
|
259
|
-
path = next ? path.substring(1) : path;
|
|
260
|
-
next = next ? next : 1;
|
|
261
|
-
for (let index = 0; index <= next - 1; index++) {
|
|
262
|
-
// eslint-disable-next-line no-await-in-loop
|
|
263
|
-
ref = (await getCommitLog(ref)).parents[0];
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
ref = undefined;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
if (ref === undefined) {
|
|
271
|
-
throw new Error(`ambiguous argument '${refOrig}': unknown revision or path not in the working tree.`);
|
|
272
|
-
}
|
|
273
|
-
return ref;
|
|
274
|
-
}
|
|
275
|
-
async function getGitArgsFromArgv(ref1, ref2, argv, dir) {
|
|
276
|
-
const newArgv = [];
|
|
277
|
-
while (argv.length) {
|
|
278
|
-
let [e] = argv.splice(0, 1);
|
|
279
|
-
if (e.includes('=')) {
|
|
280
|
-
// skip parameter=value
|
|
281
|
-
}
|
|
282
|
-
else if (e.includes('-')) {
|
|
283
|
-
// remove value
|
|
284
|
-
if (argv[0] && !argv[0].includes('-') && ![ref1, ref2].includes(argv[0])) {
|
|
285
|
-
[e] = argv.splice(0, 1);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
newArgv.push(e);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
argv = newArgv;
|
|
293
|
-
let refString = ref1;
|
|
294
|
-
const a = argv.join('.').split('.');
|
|
295
|
-
if ((a.length === 3 || a.length === 4) && typeof ref2 === 'undefined') {
|
|
296
|
-
ref1 = a[0];
|
|
297
|
-
ref2 = a[a.length - 1];
|
|
298
|
-
}
|
|
299
|
-
else if (a.length === 2 && typeof ref2 !== 'undefined') {
|
|
300
|
-
refString = `${ref1}..${ref2}`;
|
|
301
|
-
}
|
|
302
|
-
else if (a.length === 1) {
|
|
303
|
-
ref2 = '';
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
throw new Error(`Ambiguous ${format('argument%s', argv.length === 1 ? '' : 's')}: ${argv.join(', ')}
|
|
307
|
-
See more help with --help`);
|
|
308
|
-
}
|
|
309
|
-
ref1 = await resolveRef(ref1, dir);
|
|
310
|
-
ref2 = await resolveRef(ref2, dir);
|
|
311
|
-
if (a.length === 4) {
|
|
312
|
-
ref1 = (await git.findMergeBase({
|
|
313
|
-
fs,
|
|
314
|
-
dir,
|
|
315
|
-
oids: [ref2, ref1],
|
|
316
|
-
}))[0];
|
|
317
|
-
}
|
|
318
|
-
return { ref1, ref2, refString };
|
|
319
|
-
}
|
|
320
|
-
function ensureOSPath(path) {
|
|
321
|
-
return path.split(posix.sep).join(sep);
|
|
322
|
-
}
|
|
323
|
-
function ensureGitRelPath(dir, path) {
|
|
324
|
-
return relative(dir, path).split(sep).join(posix.sep);
|
|
325
|
-
}
|
|
326
|
-
async function createVirtualTreeContainer(ref, dir, modifiedFiles) {
|
|
327
|
-
const paths = (await git.listFiles({ fs, dir, ref })).map((p) => join(dir, ensureOSPath(p)));
|
|
328
|
-
const oid = ref ? await git.resolveRef({ fs, dir, ref }) : '';
|
|
329
|
-
const virtualDirectoryByFullPath = new Map();
|
|
330
|
-
for await (const filename of paths) {
|
|
331
|
-
let dirPath = dirname(filename);
|
|
332
|
-
virtualDirectoryByFullPath.set(dirPath, {
|
|
333
|
-
dirPath,
|
|
334
|
-
children: Array.from(new Set(virtualDirectoryByFullPath.get(dirPath)?.children ?? []).add({
|
|
335
|
-
name: basename(filename),
|
|
336
|
-
data: parseMetadataXml(filename) && modifiedFiles.includes(filename)
|
|
337
|
-
? oid
|
|
338
|
-
? Buffer.from((await git.readBlob({ fs, dir, oid, filepath: ensureGitRelPath(dir, filename) })).blob)
|
|
339
|
-
: await fs.readFile(ensureOSPath(filename))
|
|
340
|
-
: Buffer.from(''),
|
|
341
|
-
})),
|
|
342
|
-
});
|
|
343
|
-
const splits = filename.split(sep);
|
|
344
|
-
for (let i = 1; i < splits.length - 1; i++) {
|
|
345
|
-
dirPath = splits.slice(0, i + 1).join(sep);
|
|
346
|
-
virtualDirectoryByFullPath.set(dirPath, {
|
|
347
|
-
dirPath,
|
|
348
|
-
children: Array.from(new Set(virtualDirectoryByFullPath.get(dirPath)?.children ?? []).add(splits[i + 1])),
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
return new VirtualTreeContainer(Array.from(virtualDirectoryByFullPath.values()));
|
|
353
|
-
}
|
|
354
|
-
async function analyzeFile(path, ref1VirtualTreeContainer, ref2VirtualTreeContainer) {
|
|
355
|
-
if (!parseMetadataXml(path)) {
|
|
356
|
-
return { path, status: 0 };
|
|
357
|
-
}
|
|
358
|
-
const ref2resolver = new MetadataResolver(registryAccess, ref2VirtualTreeContainer);
|
|
359
|
-
const [ref2Component] = ref2resolver.getComponentsFromPath(path); // git path only conaints files
|
|
360
|
-
const ref1resolver = new MetadataResolver(registryAccess, ref1VirtualTreeContainer);
|
|
361
|
-
const [ref1Component] = ref1resolver.getComponentsFromPath(path); // git path only conaints files
|
|
362
|
-
if (ref1resolver.forceIgnoredPaths.has(path) || ref2resolver.forceIgnoredPaths.has(path)) {
|
|
363
|
-
return { path, status: -2 };
|
|
364
|
-
}
|
|
365
|
-
if (equal(await ref1Component.parseXml(), await ref2Component.parseXml())) {
|
|
366
|
-
return { path, status: -1 };
|
|
367
|
-
}
|
|
368
|
-
if (ref1Component.type.strictDirectoryName === true || !ref1Component.type.children) {
|
|
369
|
-
return { path, status: 0 };
|
|
370
|
-
}
|
|
371
|
-
const ref2ChildUniqueIdArray = ref2Component
|
|
372
|
-
.getChildren()
|
|
373
|
-
.map((childComponent) => getUniqueIdentifier(childComponent));
|
|
374
|
-
const ref1ChildUniqueIdArray = ref1Component
|
|
375
|
-
.getChildren()
|
|
376
|
-
.map((childComponent) => getUniqueIdentifier(childComponent));
|
|
377
|
-
const childComponentsNotInRef2 = ref1Component
|
|
378
|
-
.getChildren()
|
|
379
|
-
.filter((childComponent) => !ref2ChildUniqueIdArray.includes(getUniqueIdentifier(childComponent))); // deleted
|
|
380
|
-
const childComponentsNotInRef1 = ref2Component
|
|
381
|
-
.getChildren()
|
|
382
|
-
.filter((childComponent) => !ref1ChildUniqueIdArray.includes(getUniqueIdentifier(childComponent))); // added
|
|
383
|
-
const childComponentsInRef1AndRef2 = ref1Component
|
|
384
|
-
.getChildren()
|
|
385
|
-
.filter((childComponent) => ref2ChildUniqueIdArray.includes(getUniqueIdentifier(childComponent))); // modified?
|
|
386
|
-
debug({ childComponentsNotInRef2, childComponentsNotInRef1, childComponentsInRef1AndRef2 });
|
|
387
|
-
for await (const childComponentRef1 of childComponentsInRef1AndRef2) {
|
|
388
|
-
const [childComponentRef2] = ref2Component
|
|
389
|
-
.getChildren()
|
|
390
|
-
.filter((childComponent) => getUniqueIdentifier(childComponentRef1) === getUniqueIdentifier(childComponent));
|
|
391
|
-
if (!equal(await childComponentRef1.parseXml(), await childComponentRef2.parseXml())) {
|
|
392
|
-
childComponentsNotInRef1.push(childComponentRef2); // modified! -> add to added
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
debug({ childComponentsNotInRef1 });
|
|
396
|
-
return {
|
|
397
|
-
path,
|
|
398
|
-
status: 1 + childComponentsNotInRef2.length + childComponentsNotInRef1.length,
|
|
399
|
-
toManifest: childComponentsNotInRef1,
|
|
400
|
-
toDestructiveChanges: childComponentsNotInRef2,
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
function getUniqueIdentifier(component) {
|
|
404
|
-
return `${component.type.name}#${getString(component, component.type.uniqueIdElement)}`;
|
|
405
|
-
}
|
|
406
|
-
async function getFileStateChanges(commitHash1, commitHash2, dir) {
|
|
407
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
408
|
-
return git.walk({
|
|
409
|
-
fs,
|
|
410
|
-
dir,
|
|
411
|
-
trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })],
|
|
412
|
-
async map(filepath, [A, B]) {
|
|
413
|
-
if (filepath === '.' || (await A?.type()) === 'tree' || (await B?.type()) === 'tree') {
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
const Aoid = await A?.oid();
|
|
417
|
-
const Boid = await B?.oid();
|
|
418
|
-
let type = 'EQ';
|
|
419
|
-
if (Aoid !== Boid) {
|
|
420
|
-
type = 'M';
|
|
421
|
-
}
|
|
422
|
-
if (Aoid === undefined) {
|
|
423
|
-
type = 'A';
|
|
424
|
-
}
|
|
425
|
-
if (Boid === undefined) {
|
|
426
|
-
type = 'D';
|
|
427
|
-
}
|
|
428
|
-
if (type !== 'EQ') {
|
|
429
|
-
return {
|
|
430
|
-
path: join(dir, ensureOSPath(filepath)),
|
|
431
|
-
status: type,
|
|
432
|
-
};
|
|
433
|
-
}
|
|
434
|
-
},
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
async function getStatusMatrix(dir, ref) {
|
|
438
|
-
const getStatus = (row) => {
|
|
439
|
-
if ([
|
|
440
|
-
[0, 2, 2],
|
|
441
|
-
[0, 2, 3], // added, staged, with unstaged changes
|
|
442
|
-
].some((a) => a.every((val, index) => val === row[index]))) {
|
|
443
|
-
return 'A';
|
|
444
|
-
}
|
|
445
|
-
if ([
|
|
446
|
-
[1, 0, 0],
|
|
447
|
-
[1, 0, 1],
|
|
448
|
-
[1, 1, 0],
|
|
449
|
-
[1, 2, 0],
|
|
450
|
-
[1, 0, 3], // modified, staged, with unstaged deletion
|
|
451
|
-
].some((a) => a.every((val, index) => val === row[index]))) {
|
|
452
|
-
return 'D';
|
|
453
|
-
}
|
|
454
|
-
if ([
|
|
455
|
-
[1, 2, 1],
|
|
456
|
-
[1, 2, 2],
|
|
457
|
-
[1, 2, 3], // modified, staged, with unstaged changes
|
|
458
|
-
].some((a) => a.every((val, index) => val === row[index]))) {
|
|
459
|
-
return 'M';
|
|
460
|
-
}
|
|
461
|
-
return undefined;
|
|
462
|
-
};
|
|
463
|
-
const statusMatrix = await git.statusMatrix({ fs, dir, ref });
|
|
464
|
-
const warnings = statusMatrix
|
|
465
|
-
.filter((row) => [
|
|
466
|
-
[0, 2, 0],
|
|
467
|
-
[0, 0, 3],
|
|
468
|
-
[0, 2, 3],
|
|
469
|
-
[1, 2, 1],
|
|
470
|
-
[1, 0, 3],
|
|
471
|
-
[1, 1, 3],
|
|
472
|
-
[1, 2, 3],
|
|
473
|
-
[1, 1, 0],
|
|
474
|
-
[1, 2, 0],
|
|
475
|
-
[1, 0, 1], // deleted, unstaged
|
|
476
|
-
].some((a) => a.every((val, index) => val === row.slice(1)[index])))
|
|
477
|
-
.map((row) => join(dir, ensureOSPath(row[0])));
|
|
478
|
-
const gitlines = statusMatrix
|
|
479
|
-
.filter((row) => ![
|
|
480
|
-
[0, 0, 0],
|
|
481
|
-
[1, 1, 1],
|
|
482
|
-
[0, 0, 3],
|
|
483
|
-
[0, 2, 0],
|
|
484
|
-
[1, 1, 3], // modified, staged, with unstaged original file
|
|
485
|
-
].some((a) => a.every((val, index) => val === row.slice(1)[index])))
|
|
486
|
-
.map((row) => ({
|
|
487
|
-
path: join(dir, ensureOSPath(row[0])),
|
|
488
|
-
status: getStatus(row.slice(1)),
|
|
489
|
-
}));
|
|
490
|
-
return { warnings, lines: gitlines };
|
|
491
|
-
}
|
|
492
|
-
async function getGitDiff(ref1, ref2, dir) {
|
|
493
|
-
let gitlines;
|
|
494
|
-
let warnings = [];
|
|
495
|
-
const proj = await SfProject.resolve();
|
|
496
|
-
const resolveSourcePaths = proj.getUniquePackageDirectories().map((pDir) => pDir.fullPath);
|
|
497
|
-
if (ref2) {
|
|
498
|
-
gitlines = (await getFileStateChanges(ref1, ref2, dir)).filter((l) => resolveSourcePaths.some((f) => l.path.startsWith(f)));
|
|
499
|
-
}
|
|
500
|
-
else {
|
|
501
|
-
const { warnings: warn, lines } = await getStatusMatrix(dir, ref1);
|
|
502
|
-
warnings = warn.filter((l) => resolveSourcePaths.some((f) => l.startsWith(f)));
|
|
503
|
-
gitlines = lines.filter((l) => resolveSourcePaths.some((f) => l.path.startsWith(f)));
|
|
504
|
-
}
|
|
505
|
-
gitlines = gitlines.filter((line) => {
|
|
506
|
-
if (line.status === 'D') {
|
|
507
|
-
for (const sourcePath of resolveSourcePaths) {
|
|
508
|
-
const defaultFolder = join(sourcePath, 'main', 'default');
|
|
509
|
-
const filePath = line.path.replace(line.path.startsWith(defaultFolder) ? defaultFolder : sourcePath, '');
|
|
510
|
-
const target = gitlines.find((t) => t.path.endsWith(filePath) && t.status === 'A');
|
|
511
|
-
if (target) {
|
|
512
|
-
debug(`rename: ${line.path} -> ${target.path}`);
|
|
513
|
-
return false;
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
return true;
|
|
518
|
-
});
|
|
519
|
-
debug({ gitlines, warnings });
|
|
520
|
-
return { gitlines, warnings };
|
|
521
|
-
}
|
|
522
|
-
// eslint-disable-next-line complexity
|
|
523
|
-
async function getGitResults(gitLines, ref1VirtualTreeContainer, ref2VirtualTreeContainer, destructiveChangesOnly, fsPaths) {
|
|
524
|
-
const results = {
|
|
525
|
-
manifest: new ComponentSet(undefined, registryAccess),
|
|
526
|
-
output: {
|
|
527
|
-
unchanged: [],
|
|
528
|
-
ignored: { ref1: [], ref2: [] },
|
|
529
|
-
counts: { added: 0, deleted: 0, modified: 0, unchanged: 0, ignored: 0, error: 0 },
|
|
530
|
-
errors: [],
|
|
531
|
-
},
|
|
532
|
-
};
|
|
533
|
-
const ref1Resolver = new MetadataResolver(registryAccess, ref1VirtualTreeContainer);
|
|
534
|
-
const ref2Resolver = new MetadataResolver(registryAccess, ref2VirtualTreeContainer);
|
|
535
|
-
const getComponentsFromPath = (resolver, path) => {
|
|
536
|
-
let result = [];
|
|
537
|
-
try {
|
|
538
|
-
result = resolver.getComponentsFromPath(path);
|
|
539
|
-
}
|
|
540
|
-
catch (error) {
|
|
541
|
-
results.output.counts.error++;
|
|
542
|
-
results.output.errors.push(error.message);
|
|
543
|
-
}
|
|
544
|
-
return result;
|
|
545
|
-
};
|
|
546
|
-
const analyzedFilesPromises = [];
|
|
547
|
-
for (const [, { status, path }] of gitLines.entries()) {
|
|
548
|
-
if (!fsPaths || fsPaths.some((fsPath) => resolve(path).startsWith(fsPath))) {
|
|
549
|
-
if (status === 'D') {
|
|
550
|
-
for (const c of getComponentsFromPath(ref1Resolver, path)) {
|
|
551
|
-
if (c.xml === path || gitLines.find((x) => x.path === c.xml)) {
|
|
552
|
-
results.manifest.add(c, DestructiveChangesType.POST);
|
|
553
|
-
results.output.counts.deleted++;
|
|
554
|
-
}
|
|
555
|
-
else {
|
|
556
|
-
try {
|
|
557
|
-
if (c.xml) {
|
|
558
|
-
// in case a binary source file of a bundle was deleted, check if the bundle ist still valid and update instead of delete
|
|
559
|
-
ref2Resolver.getComponentsFromPath(c.xml);
|
|
560
|
-
}
|
|
561
|
-
if (!destructiveChangesOnly) {
|
|
562
|
-
results.manifest.add(c);
|
|
563
|
-
results.output.counts.added++;
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
catch (error) {
|
|
567
|
-
results.output.counts.error++;
|
|
568
|
-
results.output.errors.push(error.message);
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
else if (status === 'A') {
|
|
574
|
-
if (!destructiveChangesOnly) {
|
|
575
|
-
for (const c of getComponentsFromPath(ref2Resolver, path)) {
|
|
576
|
-
results.manifest.add(c);
|
|
577
|
-
results.output.counts.added++;
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
else {
|
|
582
|
-
analyzedFilesPromises.push(analyzeFile(path, ref1VirtualTreeContainer, ref2VirtualTreeContainer));
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
else {
|
|
586
|
-
debug(`${path} not included in sourcepath`);
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
for await (const check of analyzedFilesPromises) {
|
|
590
|
-
if (check.status === 0) {
|
|
591
|
-
if (!destructiveChangesOnly) {
|
|
592
|
-
for (const c of getComponentsFromPath(ref2Resolver, check.path)) {
|
|
593
|
-
results.manifest.add(c);
|
|
594
|
-
results.output.counts.modified++;
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
else if (check.status === -1) {
|
|
599
|
-
results.output.unchanged.push(check.path);
|
|
600
|
-
results.output.counts.unchanged++;
|
|
601
|
-
}
|
|
602
|
-
else if (check.status === -2) {
|
|
603
|
-
results.output.counts.ignored++;
|
|
604
|
-
results.output.ignored.ref2.push(check.path);
|
|
605
|
-
}
|
|
606
|
-
else {
|
|
607
|
-
if ((check.toDestructiveChanges && check.toDestructiveChanges.length > 0) ||
|
|
608
|
-
(check.toManifest && check.toManifest.length > 0 && !destructiveChangesOnly)) {
|
|
609
|
-
results.output.counts.modified++;
|
|
610
|
-
}
|
|
611
|
-
if (check.toDestructiveChanges) {
|
|
612
|
-
for (const c of check.toDestructiveChanges) {
|
|
613
|
-
results.manifest.add(c, DestructiveChangesType.POST);
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
if (!destructiveChangesOnly && check.toManifest) {
|
|
617
|
-
for (const c of check.toManifest) {
|
|
618
|
-
results.manifest.add(c);
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
results.output.ignored = {
|
|
624
|
-
ref1: Array.from(ref1Resolver.forceIgnoredPaths),
|
|
625
|
-
ref2: results.output.ignored.ref2.concat(Array.from(ref2Resolver.forceIgnoredPaths)),
|
|
626
|
-
};
|
|
627
|
-
results.output.counts.ignored =
|
|
628
|
-
results.output.counts.ignored + ref1Resolver.forceIgnoredPaths.size + ref2Resolver.forceIgnoredPaths.size;
|
|
629
|
-
return results;
|
|
630
|
-
}
|
|
631
|
-
function fixComponentSetChilds(cs) {
|
|
632
|
-
let sourceComponents = cs.getSourceComponents();
|
|
633
|
-
// SDR library is more strict and avoids fixes like this
|
|
634
|
-
const childsTobeReplacedByParent = [
|
|
635
|
-
...Object.keys(registry.types.workflow.children?.types ?? {}),
|
|
636
|
-
...Object.keys(registry.types.sharingrules.children?.types ?? {}),
|
|
637
|
-
...Object.keys(registry.types.customobjecttranslation.children?.types ?? {}),
|
|
638
|
-
...Object.keys(registry.types.bot.children?.types ?? {}),
|
|
639
|
-
];
|
|
640
|
-
sourceComponents = sourceComponents.map((component) => {
|
|
641
|
-
if (!component.isMarkedForDelete() && childsTobeReplacedByParent.includes(component.type.id) && component.parent) {
|
|
642
|
-
debug(`replace: ${component.type.name}:${component.fullName} -> ${component.parent.type.name}:${component.parent.fullName}`);
|
|
643
|
-
return component.parent;
|
|
644
|
-
}
|
|
645
|
-
return component;
|
|
646
|
-
});
|
|
647
|
-
return new ComponentSet(sourceComponents, registryAccess);
|
|
648
|
-
}
|
|
649
|
-
//# sourceMappingURL=diff.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../../../src/commands/jayree/manifest/legacy/git/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"$ref": "#/definitions/GitDiffCommandResult",
|
|
4
|
-
"definitions": {
|
|
5
|
-
"GitDiffCommandResult": {
|
|
6
|
-
"type": "object",
|
|
7
|
-
"properties": {
|
|
8
|
-
"destructiveChanges": {
|
|
9
|
-
"type": "object"
|
|
10
|
-
},
|
|
11
|
-
"manifest": {
|
|
12
|
-
"type": "object"
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
"required": ["destructiveChanges", "manifest"],
|
|
16
|
-
"additionalProperties": false
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|