Skip to content

Commit 476b5ec

Browse files
authored
fix: Supersede managers exclusively (#37737)
1 parent b4b3410 commit 476b5ec

File tree

2 files changed

+26
-13
lines changed

2 files changed

+26
-13
lines changed

lib/workers/repository/extract/supersedes.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ describe('workers/repository/extract/supersedes', () => {
7070
expect(extractResults).toEqual([
7171
{
7272
manager: 'bun',
73-
packageFiles: [{ packageFile: 'package.json', deps: [] }],
73+
packageFiles: [],
7474
},
7575
{
7676
manager: 'npm',

lib/workers/repository/extract/supersedes.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ import { get } from '../../../modules/manager';
33
import type { ExtractResults } from './types';
44

55
export function processSupersedesManagers(extracts: ExtractResults[]): void {
6+
const rejected: Record<string, string[]> = {};
7+
68
for (const primaryExtract of extracts) {
9+
const primaryManager = primaryExtract.manager;
710
const secondaryManagers = get(primaryExtract.manager, 'supersedesManagers');
811
if (!is.nonEmptyArray(secondaryManagers)) {
912
continue;
@@ -26,19 +29,29 @@ export function processSupersedesManagers(extracts: ExtractResults[]): void {
2629
continue;
2730
}
2831

29-
secondaryExtract.packageFiles = secondaryExtract.packageFiles.filter(
30-
({ packageFile, lockFiles }) => {
31-
if (is.nonEmptyArray(lockFiles)) {
32-
return true;
33-
}
34-
35-
if (!primaryPackageFiles.includes(packageFile)) {
36-
return true;
37-
}
32+
for (const { packageFile, lockFiles } of secondaryExtract.packageFiles) {
33+
if (is.nonEmptyArray(lockFiles)) {
34+
rejected[primaryManager] ??= [];
35+
rejected[primaryManager].push(packageFile);
36+
continue;
37+
}
38+
39+
if (primaryPackageFiles.includes(packageFile)) {
40+
rejected[secondaryManager] ??= [];
41+
rejected[secondaryManager].push(packageFile);
42+
}
43+
}
44+
}
45+
}
3846

39-
return false;
40-
},
41-
);
47+
for (const extract of extracts) {
48+
const rejectedFiles = rejected[extract.manager];
49+
if (!is.nonEmptyArray(rejectedFiles) || !extract.packageFiles) {
50+
continue;
4251
}
52+
53+
extract.packageFiles = extract.packageFiles.filter(
54+
({ packageFile }) => !rejectedFiles.includes(packageFile),
55+
);
4356
}
4457
}

0 commit comments

Comments
 (0)