@jayree/sfdx-plugin-manifest 2.5.3 → 2.6.1

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 CHANGED
@@ -1,3 +1,25 @@
1
+ ## [2.6.1](https://github.com/jayree/sfdx-plugin-manifest/compare/v2.6.0...v2.6.1) (2023-01-01)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * update changelog ([0829ae1](https://github.com/jayree/sfdx-plugin-manifest/commit/0829ae1362fec75ede6c8d63f669fabb6d6c1243))
7
+
8
+ # [2.6.0](https://github.com/jayree/sfdx-plugin-manifest/compare/v2.5.3...v2.6.0) (2023-01-01)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **gitdiff:** fix diff status of childComponents ([ef13e60](https://github.com/jayree/sfdx-plugin-manifest/commit/ef13e600df02bf23aa764084686c0eb789055c20))
14
+
15
+
16
+ ### Features
17
+
18
+ * **manifest:beta:git:diff:** added new beta command manifest:beta:git:diff ([f4b6242](https://github.com/jayree/sfdx-plugin-manifest/commit/f4b6242e52a4a04d1279e2090dcf1fe37aca2ff2))
19
+
20
+ I recommend that you try the new manifest:beta:git:diff command.\
21
+ I plan to make the beta command generally available in the near future.
22
+
1
23
  ## [2.5.3](https://github.com/jayree/sfdx-plugin-manifest/compare/v2.5.2...v2.5.3) (2022-12-31)
2
24
 
3
25
 
package/README.md CHANGED
@@ -22,7 +22,7 @@ $ sfdx plugins:install @jayree/sfdx-plugin-manifest
22
22
  $ sfdx jayree:[COMMAND]
23
23
  running command...
24
24
  $ sfdx plugins
25
- @jayree/sfdx-plugin-manifest 2.5.3
25
+ @jayree/sfdx-plugin-manifest 2.6.1
26
26
  $ sfdx help jayree:[COMMAND]
27
27
  USAGE
28
28
  $ sfdx jayree:COMMAND
@@ -33,10 +33,69 @@ USAGE
33
33
  ## Commands
34
34
 
35
35
  <!-- commands -->
36
+ * [`sfdx jayree:manifest:beta:git:diff`](#sfdx-jayreemanifestbetagitdiff)
36
37
  * [`sfdx jayree:manifest:cleanup`](#sfdx-jayreemanifestcleanup)
37
38
  * [`sfdx jayree:manifest:generate`](#sfdx-jayreemanifestgenerate)
38
39
  * [`sfdx jayree:manifest:git:diff`](#sfdx-jayreemanifestgitdiff)
39
40
 
41
+ ### `sfdx jayree:manifest:beta:git:diff`
42
+
43
+ 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
44
+
45
+ ```
46
+ USAGE
47
+ $ sfdx jayree:manifest:beta:git:diff [-p <array>] [-o <string>] [-d] [--apiversion <string>] [--json] [--loglevel
48
+ trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]
49
+
50
+ ARGUMENTS
51
+ REF1 base commit or branch
52
+ REF2 commit or branch to compare to the base commit
53
+
54
+ FLAGS
55
+ -d, --destructivechangesonly create a destructiveChanges manifest
56
+ only (package.xml will be empty)
57
+ -o, --outputdir=<value> directory to save the created
58
+ manifest files
59
+ -p, --sourcepath=<value> comma-separated list of paths to the
60
+ local source files to include in the
61
+ manifest
62
+ --apiversion=<value> override the api version used for
63
+ api requests made by this command
64
+ --json format output as json
65
+ --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL) [default: warn] logging level for
66
+ this command invocation
67
+
68
+ DESCRIPTION
69
+ create a project manifest and destructiveChanges manifest that lists the metadata components you want to deploy or
70
+ delete based on changes in your git history
71
+ Use this command to create a manifest and destructiveChanges manifest file based on the difference (git diff) of two
72
+ git refs.
73
+
74
+ You can use all ways to spell <commit> which are valid for 'git diff'.
75
+ (See https://git-scm.com/docs/git-diff)
76
+
77
+ EXAMPLES
78
+ $ sfdx jayree:manifest:beta:git:diff <commit> <commit>
79
+
80
+ $ sfdx jayree:manifest:git:diff <commit>..<commit>
81
+
82
+ uses the changes between two arbitrary <commit>
83
+
84
+ $ sfdx jayree:manifest:beta:git:diff <commit>...<commit>
85
+
86
+ uses the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>.
87
+
88
+ $ sfdx jayree:manifest:beta:git:diff branchA..branchB
89
+
90
+ uses the diff of what is unique in branchB (REF2) and unique in branchA (REF1)
91
+
92
+ $ sfdx jayree:manifest:beta:git:diff branchA...branchB
93
+
94
+ uses the diff of what is unique in branchB (REF2)
95
+ ```
96
+
97
+ _See code: [src/commands/jayree/manifest/beta/git/diff.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v2.6.1/src/commands/jayree/manifest/beta/git/diff.ts)_
98
+
40
99
  ### `sfdx jayree:manifest:cleanup`
41
100
 
42
101
  removes those tags from a manifest file that are present in a second manifest file
@@ -63,7 +122,7 @@ EXAMPLES
63
122
  $ sfdx jayree:manifest:cleanup --manifest=package.xml --file=packageignore.xml
64
123
  ```
65
124
 
66
- _See code: [src/commands/jayree/manifest/cleanup.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v2.5.3/src/commands/jayree/manifest/cleanup.ts)_
125
+ _See code: [src/commands/jayree/manifest/cleanup.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v2.6.1/src/commands/jayree/manifest/cleanup.ts)_
67
126
 
68
127
  ### `sfdx jayree:manifest:generate`
69
128
 
@@ -106,7 +165,7 @@ EXAMPLES
106
165
  <Package xmlns='http://soap.sforce.com/2006/04/metadata'>...</Package>
107
166
  ```
108
167
 
109
- _See code: [src/commands/jayree/manifest/generate.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v2.5.3/src/commands/jayree/manifest/generate.ts)_
168
+ _See code: [src/commands/jayree/manifest/generate.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v2.6.1/src/commands/jayree/manifest/generate.ts)_
110
169
 
111
170
  ### `sfdx jayree:manifest:git:diff`
112
171
 
@@ -160,5 +219,5 @@ EXAMPLES
160
219
  uses the diff of what is unique in branchB (REF2)
161
220
  ```
162
221
 
163
- _See code: [src/commands/jayree/manifest/git/diff.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v2.5.3/src/commands/jayree/manifest/git/diff.ts)_
222
+ _See code: [src/commands/jayree/manifest/git/diff.ts](https://github.com/jayree/sfdx-plugin-manifest/blob/v2.6.1/src/commands/jayree/manifest/git/diff.ts)_
164
223
  <!-- commandsstop -->
@@ -0,0 +1,38 @@
1
+ import { ComponentSet, OptionalTreeRegistryOptions } from '@salesforce/source-deploy-retrieve';
2
+ import Debug from 'debug';
3
+ export declare const debug: Debug.Debugger;
4
+ export interface FromGitDiffOptions extends OptionalTreeRegistryOptions {
5
+ /**
6
+ * Git ref to resolve components against
7
+ */
8
+ ref: string | string[];
9
+ /**
10
+ * File paths or directory paths to resolve components against
11
+ */
12
+ fsPaths?: string[];
13
+ }
14
+ export declare class ComponentSetExtra extends ComponentSet {
15
+ /**
16
+ * Resolve metadata components from git diff <ref> HEAD.
17
+ *
18
+ * @param ref Git ref to resolve components against HEAD
19
+ * @returns ComponentSet of source resolved components
20
+ */
21
+ static fromGitDiff(ref: string): Promise<ComponentSet>;
22
+ /**
23
+ * Resolve metadata components from git diff <ref1> <ref2>.
24
+ *
25
+ * @param refs Git refs to resolve components against
26
+ * @returns ComponentSet of source resolved components
27
+ */
28
+ static fromGitDiff(refs: string[]): Promise<ComponentSet>;
29
+ /**
30
+ * Resolve metadata components from git diff.
31
+ * Customize the resolution process using an options object, such as specifying filters
32
+ * and resolving against a different file system abstraction (see {@link TreeContainer}).
33
+ *
34
+ * @param options
35
+ * @returns ComponentSet of source resolved components
36
+ */
37
+ static fromGitDiff(options: FromGitDiffOptions): Promise<ComponentSet>;
38
+ }
@@ -0,0 +1,66 @@
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 { ComponentSet, DestructiveChangesType, registry as untypedRegistry, } from '@salesforce/source-deploy-retrieve';
8
+ import { SfProject } from '@salesforce/core';
9
+ import Debug from 'debug';
10
+ import { GitDiffResolver } from '../resolve/gitDiffResolver.js';
11
+ export const debug = Debug('sf:gitDiff:ComponentSetExtra');
12
+ export class ComponentSetExtra extends ComponentSet {
13
+ static async fromGitDiff(input) {
14
+ let fsPaths;
15
+ let registry;
16
+ let tree;
17
+ let ref1;
18
+ let ref2;
19
+ if (Array.isArray(input)) {
20
+ ref1 = input[0];
21
+ ref2 = input[1];
22
+ }
23
+ else if (typeof input === 'object') {
24
+ if (Array.isArray(input.ref)) {
25
+ ref1 = input.ref[0];
26
+ ref2 = input.ref[1];
27
+ }
28
+ else {
29
+ ref1 = input.ref;
30
+ }
31
+ fsPaths = input.fsPaths;
32
+ registry = input.registry ?? registry;
33
+ tree = input.tree ?? tree;
34
+ }
35
+ else {
36
+ ref1 = input;
37
+ }
38
+ const proj = await SfProject.resolve();
39
+ fsPaths = fsPaths || proj.getUniquePackageDirectories().map((pDir) => pDir.fullPath);
40
+ const gitDiffResolver = new GitDiffResolver();
41
+ const inclusiveFilter = await gitDiffResolver.resolve(ref1, ref2, fsPaths);
42
+ const components = ComponentSet.fromSource({
43
+ fsPaths,
44
+ include: inclusiveFilter,
45
+ tree,
46
+ registry,
47
+ });
48
+ const childsTobeReplacedByParent = [
49
+ ...Object.keys(untypedRegistry.types.workflow.children.types),
50
+ ...Object.keys(untypedRegistry.types.sharingrules.children.types),
51
+ ...Object.keys(untypedRegistry.types.customobjecttranslation.children.types),
52
+ ...Object.keys(untypedRegistry.types.bot.children.types),
53
+ ];
54
+ for (const component of inclusiveFilter.getSourceComponents()) {
55
+ if (component.isMarkedForDelete()) {
56
+ components.add(component, DestructiveChangesType.POST);
57
+ }
58
+ else if (childsTobeReplacedByParent.includes(component.type.id)) {
59
+ debug(`add parent ${component.parent.type.name}:${component.parent.fullName} of ${component.type.name}:${component.fullName} to manifest`);
60
+ components.add(component.parent);
61
+ }
62
+ }
63
+ return components;
64
+ }
65
+ }
66
+ //# sourceMappingURL=componentSetExtra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentSetExtra.js","sourceRoot":"","sources":["../../../src/SDR-extra/collections/componentSetExtra.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,YAAY,EAGZ,sBAAsB,EAEtB,QAAQ,IAAI,eAAe,GAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAa3D,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IA0B1C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAA6C;QAC3E,IAAI,OAAiB,CAAC;QACtB,IAAI,QAAwB,CAAC;QAC7B,IAAI,IAAmB,CAAC;QACxB,IAAI,IAAuB,CAAC;QAC5B,IAAI,IAAY,CAAC;QAEjB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SACjB;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC5B,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACrB;iBAAM;gBACL,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;aAClB;YACD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC;YACtC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC;SAC3B;aAAM;YACL,IAAI,GAAG,KAAK,CAAC;SACd;QAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;QACvC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAErF,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE3E,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;YACzC,OAAO;YACP,OAAO,EAAE,eAAe;YACxB,IAAI;YACJ,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,0BAA0B,GAAG;YACjC,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC7D,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;YACjE,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5E,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;SACzD,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,eAAe,CAAC,mBAAmB,EAAE,EAAE;YAC7D,IAAI,SAAS,CAAC,iBAAiB,EAAE,EAAE;gBACjC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;aACxD;iBAAM,IAAI,0BAA0B,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACjE,KAAK,CACH,cAAc,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,cAAc,CACpI,CAAC;gBACF,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aAClC;SACF;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { ComponentSet } from '@salesforce/source-deploy-retrieve';
2
+ import Debug from 'debug';
3
+ export declare const debug: Debug.Debugger;
4
+ /**
5
+ * Resolver for metadata type and component objects from a git diff result
6
+ *
7
+ * @internal
8
+ */
9
+ export declare class GitDiffResolver {
10
+ private ref1VirtualTreeContainer;
11
+ private ref2VirtualTreeContainer;
12
+ private ref1Resolver;
13
+ private ref2Resolver;
14
+ private static getFileStatus;
15
+ resolve(ref1: string, ref2: string, fsPaths: string[]): Promise<ComponentSet>;
16
+ private getComponentSet;
17
+ private getChildComponentStatus;
18
+ }
@@ -0,0 +1,192 @@
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 path from 'path';
8
+ import { ComponentSet, RegistryAccess, MetadataResolver, SourceComponent, DestructiveChangesType, } from '@salesforce/source-deploy-retrieve';
9
+ import { SfProject, SfError } from '@salesforce/core';
10
+ import fs from 'fs-extra';
11
+ import { parseMetadataXml } from '@salesforce/source-deploy-retrieve/lib/src/utils/index.js';
12
+ import equal from 'fast-deep-equal';
13
+ import Debug from 'debug';
14
+ import { resolveMultiRefString, resolveSingleRefString, getFileState, getStatus } from '../utils/git-extra.js';
15
+ import { VirtualTreeContainerExtra } from './treeContainersExtra.js';
16
+ export const debug = Debug('sf:gitDiff:resolver');
17
+ const registryAccess = new RegistryAccess();
18
+ /**
19
+ * Resolver for metadata type and component objects from a git diff result
20
+ *
21
+ * @internal
22
+ */
23
+ export class GitDiffResolver {
24
+ static async getFileStatus(ref1, ref2, dir, resolveSourcePaths) {
25
+ let files;
26
+ if (ref2) {
27
+ files = (await getFileState(ref1, ref2, dir)).filter((l) => resolveSourcePaths.some((f) => l.path.startsWith(f)));
28
+ }
29
+ else {
30
+ files = await getStatus(dir, ref1);
31
+ files = files.filter((l) => resolveSourcePaths.some((f) => l.path.startsWith(f)));
32
+ }
33
+ files = files.filter((file) => {
34
+ if (file.status === 'D') {
35
+ for (const sourcePath of resolveSourcePaths) {
36
+ const defaultFolder = path.join(sourcePath, 'main', 'default');
37
+ const filePath = file.path.replace(file.path.startsWith(defaultFolder) ? defaultFolder : sourcePath, '');
38
+ const target = files.find((t) => t.path.endsWith(filePath) && t.status === 'A');
39
+ if (target) {
40
+ return false;
41
+ }
42
+ }
43
+ }
44
+ return true;
45
+ });
46
+ return files;
47
+ }
48
+ async resolve(ref1, ref2, fsPaths) {
49
+ const proj = await SfProject.resolve();
50
+ if (ref2 === undefined) {
51
+ const { ref1: r1, ref2: r2 } = await resolveMultiRefString({ ref: ref1, dir: proj.getPath(), fs });
52
+ ref1 = r1;
53
+ ref2 = r2;
54
+ }
55
+ else {
56
+ const [r1, r2] = await Promise.all([
57
+ resolveSingleRefString({ ref: ref1, dir: proj.getPath(), fs }),
58
+ resolveSingleRefString({ ref: ref2, dir: proj.getPath(), fs }),
59
+ ]);
60
+ ref1 = r1;
61
+ ref2 = r2;
62
+ }
63
+ debug({ ref1, ref2 });
64
+ const fileStatus = await GitDiffResolver.getFileStatus(ref1, ref2, proj.getPath(), fsPaths);
65
+ debug({ fileStatus });
66
+ const [ref1VirtualTreeContainer, ref2VirtualTreeContainer] = await Promise.all([
67
+ VirtualTreeContainerExtra.fromGitRef(ref1, proj.getPath(), fileStatus.filter((l) => l.status === 'M').map((l) => l.path)),
68
+ VirtualTreeContainerExtra.fromGitRef(ref2, proj.getPath(), fileStatus.filter((l) => l.status === 'M').map((l) => l.path)),
69
+ ]);
70
+ this.ref1VirtualTreeContainer = ref1VirtualTreeContainer;
71
+ this.ref2VirtualTreeContainer = ref2VirtualTreeContainer;
72
+ fsPaths = fsPaths.map((filepath) => {
73
+ filepath = path.resolve(filepath);
74
+ if (!this.ref1VirtualTreeContainer.exists(filepath) && !this.ref2VirtualTreeContainer.exists(filepath)) {
75
+ throw new SfError(`The sourcepath "${filepath}" is not a valid source file path.`);
76
+ }
77
+ return filepath;
78
+ });
79
+ debug({ fsPaths });
80
+ this.ref1Resolver = new MetadataResolver(registryAccess, this.ref1VirtualTreeContainer);
81
+ this.ref2Resolver = new MetadataResolver(registryAccess, this.ref2VirtualTreeContainer);
82
+ return this.getComponentSet(fileStatus, fsPaths);
83
+ }
84
+ async getComponentSet(gitLines, fsPaths) {
85
+ const results = new ComponentSet(undefined, registryAccess);
86
+ const childComponentPromises = [];
87
+ for (const [, { status, path: fpath }] of gitLines.entries()) {
88
+ if (!fsPaths || fsPaths.some((fsPath) => path.resolve(fpath).startsWith(fsPath))) {
89
+ if (status === 'D') {
90
+ for (const c of this.ref1Resolver.getComponentsFromPath(fpath)) {
91
+ // if the component supports partial delete AND there are files that are not deleted,
92
+ // set the component for deploy, not for delete.
93
+ if (!!c.type.supportsPartialDelete && c.content && this.ref2VirtualTreeContainer.exists(c.content)) {
94
+ // all bundle types have a directory name
95
+ try {
96
+ this.ref2Resolver
97
+ .getComponentsFromPath(path.resolve(c.content))
98
+ .filter((input) => input instanceof SourceComponent)
99
+ .map((nonDeletedComponent) => {
100
+ results.add(nonDeletedComponent);
101
+ });
102
+ }
103
+ catch (e) {
104
+ debug(`unable to find component at ${c.content}. That's ok if it was supposed to be deleted`);
105
+ }
106
+ }
107
+ else {
108
+ results.add(c, DestructiveChangesType.POST);
109
+ }
110
+ }
111
+ }
112
+ else if (status === 'A') {
113
+ for (const c of this.ref2Resolver.getComponentsFromPath(fpath)) {
114
+ results.add(c);
115
+ }
116
+ }
117
+ else {
118
+ childComponentPromises.push(this.getChildComponentStatus(fpath));
119
+ }
120
+ }
121
+ }
122
+ for await (const check of childComponentPromises) {
123
+ if (check.status === 0) {
124
+ for (const c of this.ref2Resolver.getComponentsFromPath(check.path)) {
125
+ results.add(c);
126
+ }
127
+ }
128
+ else if (check.status === -1) {
129
+ // unchanged file
130
+ }
131
+ else {
132
+ for (const c of check.toDestructiveChanges) {
133
+ results.add(c, DestructiveChangesType.POST);
134
+ }
135
+ for (const c of check.toManifest) {
136
+ results.add(c);
137
+ }
138
+ }
139
+ }
140
+ debug({
141
+ forceIgnoredPaths: {
142
+ ref1: Array.from(this.ref1Resolver.forceIgnoredPaths),
143
+ ref2: Array.from(this.ref2Resolver.forceIgnoredPaths),
144
+ },
145
+ });
146
+ return results;
147
+ }
148
+ async getChildComponentStatus(fpath) {
149
+ if (!parseMetadataXml(fpath)) {
150
+ return { path: fpath, status: 0 };
151
+ }
152
+ const [ref2Component] = this.ref2Resolver.getComponentsFromPath(fpath); // git path only conaints files
153
+ const [ref1Component] = this.ref1Resolver.getComponentsFromPath(fpath); // git path only conaints files
154
+ if (equal(await ref1Component.parseXml(), await ref2Component.parseXml())) {
155
+ return { path: fpath, status: -1 };
156
+ }
157
+ if (ref1Component.type.strictDirectoryName === true || !ref1Component.type.children) {
158
+ return { path: fpath, status: 0 };
159
+ }
160
+ const getUniqueIdentifier = (component) => `${component.type.name}#${component[component.type.uniqueIdElement]}`;
161
+ const ref2ChildUniqueIdArray = ref2Component
162
+ .getChildren()
163
+ .map((childComponent) => getUniqueIdentifier(childComponent));
164
+ const ref1ChildUniqueIdArray = ref1Component
165
+ .getChildren()
166
+ .map((childComponent) => getUniqueIdentifier(childComponent));
167
+ const childComponentsNotInRef2 = ref1Component
168
+ .getChildren()
169
+ .filter((childComponent) => !ref2ChildUniqueIdArray.includes(getUniqueIdentifier(childComponent))); // deleted
170
+ const childComponentsNotInRef1 = ref2Component
171
+ .getChildren()
172
+ .filter((childComponent) => !ref1ChildUniqueIdArray.includes(getUniqueIdentifier(childComponent))); // added
173
+ const childComponentsInRef1AndRef2 = ref1Component
174
+ .getChildren()
175
+ .filter((childComponent) => ref2ChildUniqueIdArray.includes(getUniqueIdentifier(childComponent))); // modified?
176
+ for await (const childComponentRef1 of childComponentsInRef1AndRef2) {
177
+ const [childComponentRef2] = ref2Component
178
+ .getChildren()
179
+ .filter((childComponent) => getUniqueIdentifier(childComponentRef1) === getUniqueIdentifier(childComponent));
180
+ if (!equal(await childComponentRef1.parseXml(), await childComponentRef2.parseXml())) {
181
+ childComponentsNotInRef1.push(childComponentRef2); // modified! -> add to added
182
+ }
183
+ }
184
+ return {
185
+ path: fpath,
186
+ status: 1 + childComponentsNotInRef2.length + childComponentsNotInRef1.length,
187
+ toManifest: childComponentsNotInRef1,
188
+ toDestructiveChanges: childComponentsNotInRef2,
189
+ };
190
+ }
191
+ }
192
+ //# sourceMappingURL=gitDiffResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitDiffResolver.js","sourceRoot":"","sources":["../../../src/SDR-extra/resolve/gitDiffResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { VirtualTreeContainer } from '@salesforce/source-deploy-retrieve';
2
+ export declare class VirtualTreeContainerExtra extends VirtualTreeContainer {
3
+ /**
4
+ * Designed for recreating virtual files from a git ref
5
+ * To support use of MetadataResolver to also resolve metadata xmls file names can be provided
6
+ *
7
+ * @param ref git ref
8
+ * @param dir git dir
9
+ * @param includeBufferForFiles full paths to modified files
10
+ * @returns VirtualTreeContainer
11
+ */
12
+ static fromGitRef(ref: string, dir: string, includeBufferForFiles: string[]): Promise<VirtualTreeContainer>;
13
+ }
@@ -0,0 +1,51 @@
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 path from 'path';
8
+ import { VirtualTreeContainer } from '@salesforce/source-deploy-retrieve';
9
+ import { parseMetadataXml } from '@salesforce/source-deploy-retrieve/lib/src/utils/index.js';
10
+ import fs from 'fs-extra';
11
+ import { listFullPathFiles, getOid, readBlobAsBuffer } from '../utils/git-extra.js';
12
+ export class VirtualTreeContainerExtra extends VirtualTreeContainer {
13
+ /**
14
+ * Designed for recreating virtual files from a git ref
15
+ * To support use of MetadataResolver to also resolve metadata xmls file names can be provided
16
+ *
17
+ * @param ref git ref
18
+ * @param dir git dir
19
+ * @param includeBufferForFiles full paths to modified files
20
+ * @returns VirtualTreeContainer
21
+ */
22
+ static async fromGitRef(ref, dir, includeBufferForFiles) {
23
+ const paths = await listFullPathFiles(dir, ref);
24
+ const oid = await getOid(dir, ref);
25
+ const virtualDirectoryByFullPath = new Map();
26
+ for await (const filename of paths) {
27
+ let dirPath = path.dirname(filename);
28
+ virtualDirectoryByFullPath.set(dirPath, {
29
+ dirPath,
30
+ children: Array.from(new Set(virtualDirectoryByFullPath.get(dirPath)?.children ?? []).add({
31
+ name: path.basename(filename),
32
+ data: parseMetadataXml(filename) && includeBufferForFiles.includes(filename)
33
+ ? oid
34
+ ? await readBlobAsBuffer(dir, oid, filename)
35
+ : await fs.readFile(filename)
36
+ : Buffer.from(''),
37
+ })),
38
+ });
39
+ const splits = filename.split(path.sep);
40
+ for (let i = 1; i < splits.length - 1; i++) {
41
+ dirPath = splits.slice(0, i + 1).join(path.sep);
42
+ virtualDirectoryByFullPath.set(dirPath, {
43
+ dirPath,
44
+ children: Array.from(new Set(virtualDirectoryByFullPath.get(dirPath)?.children ?? []).add(splits[i + 1])),
45
+ });
46
+ }
47
+ }
48
+ return new VirtualTreeContainer(Array.from(virtualDirectoryByFullPath.values()));
49
+ }
50
+ }
51
+ //# sourceMappingURL=treeContainersExtra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treeContainersExtra.js","sourceRoot":"","sources":["../../../src/SDR-extra/resolve/treeContainersExtra.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAoB,MAAM,oCAAoC,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEpF,MAAM,OAAO,yBAA0B,SAAQ,oBAAoB;IACjE;;;;;;;;OAQG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAC5B,GAAW,EACX,GAAW,EACX,qBAA+B;QAE/B,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnC,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAA4B,CAAC;QACvE,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,KAAK,EAAE;YAClC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrC,0BAA0B,CAAC,GAAG,CAAC,OAAO,EAAE;gBACtC,OAAO;gBACP,QAAQ,EAAE,KAAK,CAAC,IAAI,CAClB,IAAI,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;oBACnE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC7B,IAAI,EACF,gBAAgB,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBACpE,CAAC,CAAC,GAAG;4BACH,CAAC,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC;4BAC5C,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAC/B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;iBACtB,CAAC,CACH;aACF,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1C,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChD,0BAA0B,CAAC,GAAG,CAAC,OAAO,EAAE;oBACtC,OAAO;oBACP,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC1G,CAAC,CAAC;aACJ;SACF;QACD,OAAO,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;CACF"}
@@ -0,0 +1,65 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { CallbackFsClient, PromiseFsClient } from 'isomorphic-git';
3
+ import Debug from 'debug';
4
+ export declare const debug: Debug.Debugger;
5
+ export interface GetCommitLogOptions {
6
+ /**
7
+ * File paths or directory paths to resolve components against
8
+ */
9
+ ref: string;
10
+ /**
11
+ * File paths or directory paths to resolve components against
12
+ */
13
+ dir: string;
14
+ /**
15
+ * File paths or directory paths to resolve components against
16
+ */
17
+ fs: CallbackFsClient | PromiseFsClient;
18
+ }
19
+ interface MultiRefStringOptions {
20
+ /**
21
+ * File paths or directory paths to resolve components against
22
+ */
23
+ ref: string;
24
+ /**
25
+ * File paths or directory paths to resolve components against
26
+ */
27
+ dir: string;
28
+ /**
29
+ * File paths or directory paths to resolve components against
30
+ */
31
+ fs: CallbackFsClient | PromiseFsClient;
32
+ }
33
+ export declare function resolveMultiRefString(options: MultiRefStringOptions): Promise<{
34
+ ref1: string;
35
+ ref2: string;
36
+ }>;
37
+ interface SingleRefStringOptions {
38
+ /**
39
+ * File paths or directory paths to resolve components against
40
+ */
41
+ ref: string;
42
+ /**
43
+ * File paths or directory paths to resolve components against
44
+ */
45
+ dir: string;
46
+ /**
47
+ * File paths or directory paths to resolve components against
48
+ */
49
+ fs: CallbackFsClient | PromiseFsClient;
50
+ }
51
+ export declare function resolveSingleRefString(options: SingleRefStringOptions): Promise<string>;
52
+ export declare function getFileState(commitHash1: string, commitHash2: string, dir: string): Promise<[
53
+ {
54
+ path: string;
55
+ status: string;
56
+ }
57
+ ]>;
58
+ export declare function getStatus(dir: string, ref: string): Promise<Array<{
59
+ path: string;
60
+ status: string;
61
+ }>>;
62
+ export declare function listFullPathFiles(dir: string, ref: string): Promise<string[]>;
63
+ export declare function getOid(dir: string, ref: string): Promise<string>;
64
+ export declare function readBlobAsBuffer(dir: string, oid: string, filename: string): Promise<Buffer>;
65
+ export {};