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