From 0fba18f9068cdb93260f99c755191b5331ccc69d Mon Sep 17 00:00:00 2001 From: Mathias Gartner <Mathias-Gartner@users.noreply.github.com> Date: Wed, 12 Mar 2025 17:50:47 +0100 Subject: [PATCH] fix(nuget): PackageSourceMapping: give the longest path precedence (#34752) Co-authored-by: Rhys Arkins <rhys@arkins.net> Co-authored-by: Michael Kriese <michael.kriese@gmx.de> --- lib/modules/manager/nuget/util.spec.ts | 17 ++++++++++++++++- lib/modules/manager/nuget/util.ts | 6 +++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/modules/manager/nuget/util.spec.ts b/lib/modules/manager/nuget/util.spec.ts index 19721c8aab..c6d8b72193 100644 --- a/lib/modules/manager/nuget/util.spec.ts +++ b/lib/modules/manager/nuget/util.spec.ts @@ -240,7 +240,11 @@ describe('modules/manager/nuget/util', () => { { name: 'contoso.com', url: 'https://contoso.com/packages/', - sourceMappedPackagePatterns: ['Contoso.*', 'NuGet.Common'], + sourceMappedPackagePatterns: [ + 'Contoso.*', + 'NuGet.Common', + 'AdventureWorks*', + ], }, { name: 'contoso.test', @@ -250,6 +254,7 @@ describe('modules/manager/nuget/util', () => { 'Contoso.Test.*', 'NuGet.*', 'NuGet.Common*', + 'AdventureWorks.Test.*', ], }, ]; @@ -282,6 +287,16 @@ describe('modules/manager/nuget/util', () => { depName: 'Contoso.Test.SomePackage', registryUrls: ['https://contoso.test/packages/'], }); + + expect( + applyRegistries( + { depName: 'AdventureWorks.Test.SomePackage' }, + registries, + ), + ).toEqual({ + depName: 'AdventureWorks.Test.SomePackage', + registryUrls: ['https://contoso.test/packages/'], + }); }); it('applies registry to package name case insensitive', () => { diff --git a/lib/modules/manager/nuget/util.ts b/lib/modules/manager/nuget/util.ts index a03962693e..4d62e014fd 100644 --- a/lib/modules/manager/nuget/util.ts +++ b/lib/modules/manager/nuget/util.ts @@ -197,6 +197,7 @@ export function applyRegistries( * Sorts patterns by specificity: * 1. Exact match patterns * 2. Wildcard match patterns + * The longest pattern has precedence. */ function sortPatterns( a: [string, Registry[]], @@ -210,7 +211,10 @@ function sortPatterns( return -1; } - return a[0].localeCompare(b[0]) * -1; + const aTrim = a[0].slice(0, -1); + const bTrim = b[0].slice(0, -1); + + return aTrim.localeCompare(bTrim) * -1; } export async function findGlobalJson( -- GitLab