@@ -18,10 +18,6 @@ import Component from '../../dependency/Component';
18
18
import PackageComponentDiff from '../diff/PackageComponentDiff' ;
19
19
20
20
export default class CreateDiffPackageImp extends CreateSourcePackageImpl {
21
-
22
-
23
-
24
-
25
21
public constructor (
26
22
protected projectDirectory : string ,
27
23
protected sfpPackage : SfpPackage ,
@@ -36,104 +32,97 @@ export default class CreateDiffPackageImp extends CreateSourcePackageImpl {
36
32
return PackageType . Diff ;
37
33
}
38
34
39
- printAdditionalPackageSpecificHeaders ( ) { }
35
+ printAdditionalPackageSpecificHeaders ( ) { }
40
36
41
37
isEmptyPackage ( projectDirectory : string , packageDirectory : string ) {
42
38
return PackageEmptyChecker . isEmptyFolder ( projectDirectory , packageDirectory ) ;
43
39
}
44
40
45
41
async preCreatePackage ( sfpPackage : SfpPackage ) {
46
-
47
42
const devhubOrg = await SFPOrg . create ( { aliasOrUsername : this . packageCreationParams . devHub } ) ;
43
+
48
44
//Fetch Baseline commit from DevHub
49
45
let commitsOfPackagesInstalledInDevHub = await this . getCommitsOfPackagesInstalledInDevHub ( devhubOrg ) ;
50
46
51
47
if ( this . packageCreationParams . revisionFrom ) {
52
48
this . sfpPackage . commitSHAFrom = this . packageCreationParams . revisionFrom ;
53
- }
54
- else if ( commitsOfPackagesInstalledInDevHub [ this . sfpPackage . packageName ] ) {
49
+ } else if ( commitsOfPackagesInstalledInDevHub [ this . sfpPackage . packageName ] ) {
55
50
this . sfpPackage . commitSHAFrom = commitsOfPackagesInstalledInDevHub [ this . sfpPackage . packageName ] ;
56
51
} else {
57
52
this . sfpPackage . commitSHAFrom = this . sfpPackage . sourceVersion ;
58
53
}
59
54
60
-
61
55
if ( this . packageCreationParams . revisionTo ) {
62
56
this . sfpPackage . commitSHATo = this . packageCreationParams . revisionTo ;
63
- }
64
- else {
57
+ } else {
65
58
this . sfpPackage . commitSHATo = this . sfpPackage . sourceVersion ;
66
59
}
67
60
}
68
61
69
-
70
62
private async getCommitsOfPackagesInstalledInDevHub ( diffTargetSfpOrg : SFPOrg ) {
71
63
let installedArtifacts = await diffTargetSfpOrg . getInstalledArtifacts ( ) ;
72
- let packagesInstalledInOrgMappedToCommits =
73
- await this . mapInstalledArtifactstoPkgAndCommits ( installedArtifacts ) ;
64
+ let packagesInstalledInOrgMappedToCommits = await this . mapInstalledArtifactstoPkgAndCommits ( installedArtifacts ) ;
74
65
return packagesInstalledInOrgMappedToCommits ;
75
66
}
76
67
77
-
78
68
public async createPackage ( sfpPackage : SfpPackage ) {
79
-
80
-
81
69
//Unresolved SHAs can be same if the package is not installed in the org or is the same
82
- if ( this . sfpPackage . commitSHAFrom != this . sfpPackage . commitSHATo )
83
- {
84
- try {
85
- let packageComponentDiffer : PackageComponentDiff = new PackageComponentDiff (
86
- this . logger ,
87
- this . sfpPackage . packageName ,
88
- this . sfpPackage . commitSHAFrom ,
89
- this . sfpPackage . commitSHATo ,
90
- true
91
- ) ;
92
- await packageComponentDiffer . build ( path . join ( sfpPackage . workingDirectory , 'diff' ) ) ;
93
- } catch ( error ) {
94
- //if both are same after git resolution.. just do nothing, treat is a normal source package
95
- if ( error . message . includes ( "Unable to compute diff, as both commits are same" ) )
96
- {
97
- SFPLogger . log (
98
- `Both commits are same, treating it as an empty package` ,
99
- LoggerLevel . WARN ,
100
- this . logger
70
+ if ( this . sfpPackage . commitSHAFrom != this . sfpPackage . commitSHATo ) {
71
+ try {
72
+ let packageComponentDiffer : PackageComponentDiff = new PackageComponentDiff (
73
+ this . logger ,
74
+ this . sfpPackage . packageName ,
75
+ this . sfpPackage . commitSHAFrom ,
76
+ this . sfpPackage . commitSHATo ,
77
+ true
101
78
) ;
102
- //Create an empty diff directory to force skip of packages
103
- const diffSrcDir = path . join ( sfpPackage . workingDirectory , `diff/${ sfpPackage . packageDirectory } ` ) ;
104
- fs . mkdirpSync ( diffSrcDir ) ;
105
- }
106
- else
107
- throw error ;
108
- }
79
+ await packageComponentDiffer . build ( path . join ( sfpPackage . workingDirectory , 'diff' ) ) ;
80
+ } catch ( error ) {
81
+ //if both are same after git resolution.. just do nothing, treat is a normal source package
82
+ if ( error . message . includes ( 'Unable to compute diff, as both commits are same' ) ) {
83
+ SFPLogger . log (
84
+ `Both commits are same, treating it as an empty package` ,
85
+ LoggerLevel . WARN ,
86
+ this . logger
87
+ ) ;
88
+ //Create an empty diff directory to force skip of packages
89
+ const diffSrcDir = path . join ( sfpPackage . workingDirectory , `diff/${ sfpPackage . packageDirectory } ` ) ;
90
+ fs . mkdirpSync ( diffSrcDir ) ;
91
+ } else throw error ;
92
+ }
109
93
110
- await this . introspectDiffPackageCreated ( sfpPackage , this . params , this . logger ) ;
94
+ await this . introspectDiffPackageCreated ( sfpPackage , this . params , this . logger ) ;
111
95
112
- await this . replaceSourceWithDiff ( sfpPackage . workingDirectory , sfpPackage . packageDirectory , `diff/${ sfpPackage . packageDirectory } ` )
96
+ await this . replaceSourceWithDiff (
97
+ sfpPackage . workingDirectory ,
98
+ sfpPackage . packageDirectory ,
99
+ `diff/${ sfpPackage . packageDirectory } `
100
+ ) ;
113
101
114
- SFPStatsSender . logGauge ( 'package.metadatacount' , sfpPackage . metadataCount , {
115
- package : sfpPackage . packageName ,
116
- type : sfpPackage . packageType ,
117
- } ) ;
118
- }
102
+ SFPStatsSender . logGauge ( 'package.metadatacount' , sfpPackage . metadataCount , {
103
+ package : sfpPackage . packageName ,
104
+ type : sfpPackage . packageType ,
105
+ } ) ;
106
+ }
119
107
}
120
108
121
- postCreatePackage ( sfpPackage ) { }
122
-
109
+ postCreatePackage ( sfpPackage ) { }
123
110
124
-
125
- private async replaceSourceWithDiff ( workingDirectory : string , packageDirectory : string , diffPackageDirectory : string ) {
111
+ private async replaceSourceWithDiff (
112
+ workingDirectory : string ,
113
+ packageDirectory : string ,
114
+ diffPackageDirectory : string
115
+ ) {
126
116
const srcDir = path . join ( workingDirectory , packageDirectory ) ;
127
117
const diffSrcDir = path . join ( workingDirectory , diffPackageDirectory ) ;
128
118
129
119
// Check if src directories exist, if so remove them
130
- if ( fs . pathExistsSync ( srcDir ) )
131
- await fs . remove ( srcDir ) ;
120
+ if ( fs . pathExistsSync ( srcDir ) ) await fs . remove ( srcDir ) ;
132
121
133
122
// Rename diff/src directory to src
134
- if ( fs . pathExistsSync ( diffSrcDir ) )
135
- await fs . move ( diffSrcDir , srcDir ) ;
136
- else { // Ensure package directory exists
123
+ if ( fs . pathExistsSync ( diffSrcDir ) ) await fs . move ( diffSrcDir , srcDir ) ;
124
+ else {
125
+ // Ensure package directory exists
137
126
await fs . mkdirpSync ( diffSrcDir ) ;
138
127
await fs . move ( diffSrcDir , srcDir ) ;
139
128
}
@@ -147,69 +136,66 @@ export default class CreateDiffPackageImp extends CreateSourcePackageImpl {
147
136
//remove diffSrcDir
148
137
if ( fs . pathExistsSync ( path . join ( workingDirectory , 'diff' ) ) )
149
138
fs . rmSync ( path . join ( workingDirectory , 'diff' ) , { recursive : true , force : true } ) ;
150
-
151
-
152
139
}
153
140
154
-
155
- async mapInstalledArtifactstoPkgAndCommits (
156
- installedArtifacts : any ,
157
- ) {
141
+ async mapInstalledArtifactstoPkgAndCommits ( installedArtifacts : any ) {
158
142
let packagesMappedToLastKnownCommitId : { [ p : string ] : string } = { } ;
159
- if ( installedArtifacts != null ) {
160
- packagesMappedToLastKnownCommitId =
161
- getPackagesToCommits ( installedArtifacts ) ;
162
- }
143
+ packagesMappedToLastKnownCommitId = await getPackagesToCommits ( installedArtifacts ) ;
144
+
163
145
return packagesMappedToLastKnownCommitId ;
164
146
165
- function getPackagesToCommits ( installedArtifacts : any ) : {
166
- [ p : string ] : string ;
167
- } {
147
+ async function getPackagesToCommits ( installedArtifacts : any ) : Promise < { [ p : string ] : string } > {
168
148
const packagesToCommits : { [ p : string ] : string } = { } ;
149
+ let jsonOverrides = { } ;
150
+
151
+ // Add an option to override diff package from during debugging
152
+ // Also useful for when the record is yet to be baselined
153
+ try {
154
+ const jsonData = await fs . readFile ( 'diffPackageOverrides.json' , 'utf8' ) ;
155
+ jsonOverrides = JSON . parse ( jsonData ) ;
156
+ } catch ( error ) {
157
+ console . log ( 'No JSON override file found or there is an error reading it' ) ;
158
+ }
169
159
170
- // Construct map of artifact and associated commit Id
171
- installedArtifacts . forEach ( ( artifact ) => {
172
- packagesToCommits [ artifact . Name ] = artifact . CommitId__c ;
173
- //Override for debugging purposes
174
- if ( process . env . VALIDATE_OVERRIDE_PKG )
175
- packagesToCommits [ process . env . VALIDATE_OVERRIDE_PKG ] =
176
- process . env . VALIDATE_PKG_COMMIT_ID ;
160
+ // Merge the installedArtifacts data with the JSON overrides
161
+ if ( installedArtifacts ) {
162
+ installedArtifacts . forEach ( ( artifact ) => {
163
+ packagesToCommits [ artifact . Name ] = artifact . CommitId__c ;
164
+ } ) ;
165
+ }
166
+
167
+ // Add additional packages from the JSON overrides that are not in installedArtifacts
168
+ Object . keys ( jsonOverrides ) . forEach ( ( pkgName ) => {
169
+ if ( ! packagesToCommits . hasOwnProperty ( pkgName ) ) {
170
+ packagesToCommits [ pkgName ] = jsonOverrides [ pkgName ] ;
171
+ }
177
172
} ) ;
178
173
179
- if ( process . env . VALIDATE_REMOVE_PKG )
180
- delete packagesToCommits [ process . env . VALIDATE_REMOVE_PKG ] ;
174
+ if ( process . env . VALIDATE_REMOVE_PKG ) delete packagesToCommits [ process . env . VALIDATE_REMOVE_PKG ] ;
181
175
182
176
return packagesToCommits ;
183
177
}
184
178
}
185
179
186
-
187
-
188
180
private async introspectDiffPackageCreated (
189
181
sfpPackage : SfpPackage ,
190
182
packageParams : SfpPackageParams ,
191
183
logger : Logger
192
184
) : Promise < void > {
193
-
194
-
195
185
let workingDirectory = path . join ( sfpPackage . workingDirectory , 'diff' ) ;
196
186
if ( fs . existsSync ( path . join ( workingDirectory , sfpPackage . packageDirectory ) ) ) {
197
187
let changedComponents = new PackageToComponent (
198
188
sfpPackage . packageName ,
199
189
path . join ( workingDirectory , sfpPackage . packageDirectory )
200
190
) . generateComponents ( ) ;
201
191
202
-
203
-
204
192
let impactedApexTestClassFetcher : ImpactedApexTestClassFetcher = new ImpactedApexTestClassFetcher (
205
193
sfpPackage ,
206
194
changedComponents ,
207
195
logger
208
196
) ;
209
197
let impactedTestClasses = await impactedApexTestClassFetcher . getImpactedTestClasses ( ) ;
210
198
211
-
212
-
213
199
//Convert again for finding the values in the diff package
214
200
let sourceToMdapiConvertor = new SourceToMDAPIConvertor (
215
201
workingDirectory ,
@@ -222,24 +208,23 @@ export default class CreateDiffPackageImp extends CreateSourcePackageImpl {
222
208
223
209
const packageManifest : PackageManifest = await PackageManifest . create ( mdapiDirPath ) ;
224
210
225
-
226
211
sfpPackage . payload = packageManifest . manifestJson ;
227
212
sfpPackage . apexTestClassses = impactedTestClasses ;
228
- sfpPackage . apexClassWithOutTestClasses = getOnlyChangedClassesFromPackage ( changedComponents , sfpPackage . apexClassesSortedByTypes ) ;
213
+ sfpPackage . apexClassWithOutTestClasses = getOnlyChangedClassesFromPackage (
214
+ changedComponents ,
215
+ sfpPackage . apexClassesSortedByTypes
216
+ ) ;
229
217
sfpPackage . isApexFound = packageManifest . isApexInPackage ( ) ;
230
218
sfpPackage . isProfilesFound = packageManifest . isProfilesInPackage ( ) ;
231
219
sfpPackage . isPermissionSetGroupFound = packageManifest . isPermissionSetGroupsFoundInPackage ( ) ;
232
220
sfpPackage . isPayLoadContainTypesSupportedByProfiles = packageManifest . isPayLoadContainTypesSupportedByProfiles ( ) ;
233
221
234
-
235
222
sfpPackage . metadataCount = await MetadataCount . getMetadataCount (
236
223
workingDirectory ,
237
224
sfpPackage . packageDescriptor . path
238
225
) ;
239
226
rimraf . sync ( mdapiDirPath ) ;
240
- }
241
- else {
242
-
227
+ } else {
243
228
//Souce Diff Directory is empty
244
229
sfpPackage . payload = { } ;
245
230
sfpPackage . apexTestClassses = [ ] ;
@@ -251,7 +236,6 @@ export default class CreateDiffPackageImp extends CreateSourcePackageImpl {
251
236
sfpPackage . metadataCount = 0 ;
252
237
}
253
238
254
-
255
239
function getOnlyChangedClassesFromPackage (
256
240
changedComponents : Component [ ] ,
257
241
apexClassesSortedByTypes : ApexSortedByType
@@ -267,25 +251,21 @@ export default class CreateDiffPackageImp extends CreateSourcePackageImpl {
267
251
}
268
252
269
253
// Get the names of all classes in the ApexSortedByType
270
- let apexClassNames = apexClassesSortedByTypes . class . map ( cls => cls . name ) ;
271
- let interfaces = apexClassesSortedByTypes . interface . map ( cls => cls . name ) ;
272
- const apexTestClassNames = apexClassesSortedByTypes . testClass . map ( cls => cls . name ) ;
273
- apexClassNames = apexClassNames . filter ( name => ! apexTestClassNames . includes ( name ) ) ;
274
- apexClassNames = apexClassNames . filter ( name => ! interfaces . includes ( name ) ) ;
275
-
254
+ let apexClassNames = apexClassesSortedByTypes . class . map ( ( cls ) => cls . name ) ;
255
+ let interfaces = apexClassesSortedByTypes . interface . map ( ( cls ) => cls . name ) ;
256
+ const apexTestClassNames = apexClassesSortedByTypes . testClass . map ( ( cls ) => cls . name ) ;
257
+ apexClassNames = apexClassNames . filter ( ( name ) => ! apexTestClassNames . includes ( name ) ) ;
258
+ apexClassNames = apexClassNames . filter ( ( name ) => ! interfaces . includes ( name ) ) ;
276
259
277
260
// Filter changedComponents based on class names in ApexSortedByType and type === 'ApexClass'
278
- const filteredComponents = changedComponents . filter ( component =>
279
- apexClassNames . includes ( component . fullName ) && component . type === 'ApexClass'
261
+ const filteredComponents = changedComponents . filter (
262
+ ( component ) => apexClassNames . includes ( component . fullName ) && component . type === 'ApexClass'
280
263
) ;
281
264
282
265
// Extract the fullName property from the filtered components
283
- const filteredChangedClasses = filteredComponents . map ( component => component . fullName ) ;
266
+ const filteredChangedClasses = filteredComponents . map ( ( component ) => component . fullName ) ;
284
267
285
268
return filteredChangedClasses ;
286
269
}
287
-
288
270
}
289
-
290
-
291
271
}
0 commit comments