From ad9d2b971eef44603fc84ce5d1452b612862553c Mon Sep 17 00:00:00 2001
From: RahulGautamSingh <rahultesnik@gmail.com>
Date: Thu, 9 May 2024 11:52:39 +0545
Subject: [PATCH] fix(versioning/pep440): log debug message if `newVersion` is
 excluded from range (#28950)

---
 lib/modules/versioning/pep440/range.spec.ts | 47 ++++++++++++++-------
 lib/modules/versioning/pep440/range.ts      | 13 ++++++
 2 files changed, 45 insertions(+), 15 deletions(-)

diff --git a/lib/modules/versioning/pep440/range.spec.ts b/lib/modules/versioning/pep440/range.spec.ts
index 193d558fd6..5c913f39dc 100644
--- a/lib/modules/versioning/pep440/range.spec.ts
+++ b/lib/modules/versioning/pep440/range.spec.ts
@@ -1,17 +1,34 @@
-import { checkRangeAndRemoveUnnecessaryRangeLimit } from './range';
+import { logger } from '../../../logger';
+import { checkRangeAndRemoveUnnecessaryRangeLimit, getNewValue } from './range';
 
-it.each`
-  rangeInput           | newVersion | expected
-  ${'==4.1.*,>=3.2.2'} | ${'4.1.1'} | ${'==4.1.*'}
-  ${'==4.0.*,>=3.2.2'} | ${'4.0.0'} | ${'==4.0.*'}
-  ${'==7.2.*'}         | ${'7.2.0'} | ${'==7.2.*'}
-`(
-  'checkRange("$rangeInput, "$newVersion"") === "$expected"',
-  ({ rangeInput, newVersion, expected }) => {
-    const res = checkRangeAndRemoveUnnecessaryRangeLimit(
-      rangeInput,
-      newVersion,
+describe('modules/versioning/pep440/range', () => {
+  it.each`
+    rangeInput           | newVersion | expected
+    ${'==4.1.*,>=3.2.2'} | ${'4.1.1'} | ${'==4.1.*'}
+    ${'==4.0.*,>=3.2.2'} | ${'4.0.0'} | ${'==4.0.*'}
+    ${'==7.2.*'}         | ${'7.2.0'} | ${'==7.2.*'}
+  `(
+    'checkRange("$rangeInput, "$newVersion"") === "$expected"',
+    ({ rangeInput, newVersion, expected }) => {
+      const res = checkRangeAndRemoveUnnecessaryRangeLimit(
+        rangeInput,
+        newVersion,
+      );
+      expect(res).toEqual(expected);
+    },
+  );
+
+  it('returns null without warning if new version is excluded from range', () => {
+    const res = getNewValue({
+      currentValue: '>=1.25.0,<2,!=1.32.0',
+      rangeStrategy: 'auto',
+      newVersion: '1.32.0',
+      currentVersion: '1.25.0',
+    });
+    expect(res).toBeNull();
+    expect(logger.debug).toHaveBeenCalledWith(
+      'Cannot calculate new value as the newVersion:`1.32.0` is excluded from range: `>=1.25.0,<2,!=1.32.0`',
     );
-    expect(res).toEqual(expected);
-  },
-);
+    expect(logger.warn).not.toHaveBeenCalled();
+  });
+});
diff --git a/lib/modules/versioning/pep440/range.ts b/lib/modules/versioning/pep440/range.ts
index 0c94a3c4c8..ea36bb335b 100644
--- a/lib/modules/versioning/pep440/range.ts
+++ b/lib/modules/versioning/pep440/range.ts
@@ -129,6 +129,18 @@ export function getNewValue({
     return null;
   }
 
+  // return early if newVersion is excluded from range
+  if (
+    ranges.some(
+      (range) => range.operator === '!=' && range.version === newVersion,
+    )
+  ) {
+    logger.debug(
+      `Cannot calculate new value as the newVersion:\`${newVersion}\` is excluded from range: \`${currentValue}\``,
+    );
+    return null;
+  }
+
   switch (rangeStrategy) {
     case 'auto':
     case 'replace':
@@ -191,6 +203,7 @@ export function getNewValue({
     newVersion,
   );
 
+  // istanbul ignore if
   if (!satisfies(newVersion, checkedResult)) {
     // we failed at creating the range
     logger.warn(
-- 
GitLab