From 044f643cd7bf6e0862417f52637b3a79c4ae5636 Mon Sep 17 00:00:00 2001
From: Sebastian Poxhofer <secustor@users.noreply.github.com>
Date: Sun, 4 Feb 2024 22:42:46 +0100
Subject: [PATCH] fix(packageRules/package*): consider packageNames for
 package* excludes (#27047)

---
 lib/util/package-rules/package-names.spec.ts  | 13 ++++++++++++
 lib/util/package-rules/package-names.ts       | 20 +++++++++++++++---
 .../package-rules/package-prefixes.spec.ts    | 13 ++++++++++++
 lib/util/package-rules/package-prefixes.ts    | 21 ++++++++++++++++---
 4 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/lib/util/package-rules/package-names.spec.ts b/lib/util/package-rules/package-names.spec.ts
index 83552a798f..f33b00c7e1 100644
--- a/lib/util/package-rules/package-names.spec.ts
+++ b/lib/util/package-rules/package-names.spec.ts
@@ -56,4 +56,17 @@ describe('util/package-rules/package-names', () => {
       expect(result).toBeFalse();
     });
   });
+
+  it('should excludePackageName', () => {
+    const result = packageNameMatcher.excludes(
+      {
+        depName: 'abc',
+        packageName: 'def',
+      },
+      {
+        excludePackageNames: ['def'],
+      },
+    );
+    expect(result).toBeTrue();
+  });
 });
diff --git a/lib/util/package-rules/package-names.ts b/lib/util/package-rules/package-names.ts
index a6476d2877..7af49f4beb 100644
--- a/lib/util/package-rules/package-names.ts
+++ b/lib/util/package-rules/package-names.ts
@@ -32,15 +32,29 @@ export class PackageNameMatcher extends Matcher {
   }
 
   override excludes(
-    { depName }: PackageRuleInputConfig,
-    { excludePackageNames }: PackageRule,
+    { depName, packageName }: PackageRuleInputConfig,
+    packageRule: PackageRule,
   ): boolean | null {
+    const { excludePackageNames } = packageRule;
     if (is.undefined(excludePackageNames)) {
       return null;
     }
     if (is.undefined(depName)) {
       return false;
     }
-    return excludePackageNames.includes(depName);
+
+    if (is.string(packageName) && excludePackageNames.includes(packageName)) {
+      return true;
+    }
+
+    if (excludePackageNames.includes(depName)) {
+      logger.once.info(
+        { packageRule, packageName, depName },
+        'Use excludeDepNames instead of excludePackageNames',
+      );
+      return true;
+    }
+
+    return false;
   }
 }
diff --git a/lib/util/package-rules/package-prefixes.spec.ts b/lib/util/package-rules/package-prefixes.spec.ts
index 424a5f8442..b68aa0a65c 100644
--- a/lib/util/package-rules/package-prefixes.spec.ts
+++ b/lib/util/package-rules/package-prefixes.spec.ts
@@ -55,5 +55,18 @@ describe('util/package-rules/package-prefixes', () => {
       );
       expect(result).toBeFalse();
     });
+
+    it('should return true if packageName matched', () => {
+      const result = packagePrefixesMatcher.excludes(
+        {
+          depName: 'abc1',
+          packageName: 'def1',
+        },
+        {
+          excludePackagePrefixes: ['def'],
+        },
+      );
+      expect(result).toBeTrue();
+    });
   });
 });
diff --git a/lib/util/package-rules/package-prefixes.ts b/lib/util/package-rules/package-prefixes.ts
index 74eb59c7f4..bb9b015b2e 100644
--- a/lib/util/package-rules/package-prefixes.ts
+++ b/lib/util/package-rules/package-prefixes.ts
@@ -34,9 +34,10 @@ export class PackagePrefixesMatcher extends Matcher {
   }
 
   override excludes(
-    { depName }: PackageRuleInputConfig,
-    { excludePackagePrefixes }: PackageRule,
+    { depName, packageName }: PackageRuleInputConfig,
+    packageRule: PackageRule,
   ): boolean | null {
+    const { excludePackagePrefixes } = packageRule;
     if (is.undefined(excludePackagePrefixes)) {
       return null;
     }
@@ -44,6 +45,20 @@ export class PackagePrefixesMatcher extends Matcher {
       return false;
     }
 
-    return excludePackagePrefixes.some((prefix) => depName.startsWith(prefix));
+    if (
+      is.string(packageName) &&
+      excludePackagePrefixes.some((prefix) => packageName.startsWith(prefix))
+    ) {
+      return true;
+    }
+    if (excludePackagePrefixes.some((prefix) => depName.startsWith(prefix))) {
+      logger.once.info(
+        { packageName, depName },
+        'Use excludeDepPatterns instead of excludePackagePrefixes',
+      );
+      return true;
+    }
+
+    return false;
   }
 }
-- 
GitLab