Skip to content

Commit 46250ee

Browse files
committed
fix: don't pull remote changes where type isn't in SDR registry
1 parent 5e9076e commit 46250ee

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

src/sourceTracking.ts

+16-8
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,10 @@ export class SourceTracking extends AsyncCreatable {
199199
await this.ensureRemoteTracking();
200200
const remoteChanges = await this.remoteSourceTrackingService.retrieveUpdates();
201201
this.logger.debug('remoteChanges', remoteChanges);
202-
const filteredChanges = remoteChanges.filter(remoteFilterByState[options.state]);
202+
const filteredChanges = remoteChanges
203+
.filter(remoteFilterByState[options.state])
204+
// skip any remote types not in the registry. Will emit node warnings
205+
.filter((rce) => this.registrySupportsType(rce.type));
203206
if (options.format === 'ChangeResult') {
204207
return filteredChanges.map((change) => remoteChangeElementToChangeResult(change)) as T[];
205208
}
@@ -554,6 +557,13 @@ export class SourceTracking extends AsyncCreatable {
554557
return results;
555558
}
556559

560+
private registrySupportsType(type: string): boolean {
561+
if (this.registry.findType((metadataType) => metadataType.name === type)) {
562+
return true;
563+
}
564+
process.emitWarning(`Unable to find type ${type} in registry`);
565+
return false;
566+
}
557567
/**
558568
* uses SDR to translate remote metadata records into local file paths
559569
*/
@@ -565,26 +575,24 @@ export class SourceTracking extends AsyncCreatable {
565575
this.logger.debug('populateFilePaths for change elements', elements);
566576
// component set generated from an array of ComponentLike from all the remote changes
567577
// but exclude the ones that aren't in the registry
578+
const expectedSkippedElements: ChangeResult[] = [];
568579
const remoteChangesAsComponentLike = elements
569580
.map((element) => {
570-
if (
571-
typeof element.type === 'string' &&
572-
typeof element.name === 'string' &&
573-
this.registry.getTypeByName(element.type)
574-
) {
581+
if (typeof element.type === 'string' && typeof element.name === 'string') {
575582
return {
576583
type: element.type,
577-
fullName: element?.name,
584+
fullName: element.name,
578585
};
579586
}
580587
process.emitWarning(`Not present in registry: ${element.type}`);
588+
expectedSkippedElements.push(element);
581589
})
582590
.filter(componentLikeGuard) as ComponentLike[];
583591

584592
const remoteChangesAsComponentSet = new ComponentSet(remoteChangesAsComponentLike);
585593

586594
this.logger.debug(` the generated component set has ${remoteChangesAsComponentSet.size.toString()} items`);
587-
if (remoteChangesAsComponentSet.size < elements.length) {
595+
if (remoteChangesAsComponentSet.size < elements.length - expectedSkippedElements.length) {
588596
// iterate the elements to see which ones didn't make it into the component set
589597
throw new Error(
590598
`unable to generate complete component set for ${elements

0 commit comments

Comments
 (0)