From 6af55c2cfe362653635845843a8f80c7e1c0884e Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Thu, 23 Jan 2025 08:27:07 -0300
Subject: [PATCH] fix(cargo): Skip "replace" range upgrade if new version still
 matches (#33773)

---
 lib/modules/versioning/cargo/index.spec.ts | 1 +
 lib/modules/versioning/cargo/index.ts      | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/lib/modules/versioning/cargo/index.spec.ts b/lib/modules/versioning/cargo/index.spec.ts
index 8198b12f40..0c5e6a5ae5 100644
--- a/lib/modules/versioning/cargo/index.spec.ts
+++ b/lib/modules/versioning/cargo/index.spec.ts
@@ -132,6 +132,7 @@ describe('modules/versioning/cargo/index', () => {
     ${'5.0'}                 | ${'bump'}     | ${'5.0.0'}     | ${'6.1.7'}      | ${'6.1.7'}
     ${'0.5'}                 | ${'bump'}     | ${'0.5.0'}     | ${'0.5.1'}      | ${'0.5.1'}
     ${'0.5'}                 | ${'bump'}     | ${'0.5.0'}     | ${'0.6.1'}      | ${'0.6.1'}
+    ${'1.2'}                 | ${'replace'}  | ${'1.2.3'}     | ${'1.3.0'}      | ${'1.2'}
     ${'5.0'}                 | ${'replace'}  | ${'5.0.0'}     | ${'5.1.7'}      | ${'5.0'}
     ${'5.0'}                 | ${'replace'}  | ${'5.0.0'}     | ${'6.1.7'}      | ${'6.0'}
     ${'0.5'}                 | ${'replace'}  | ${'0.5.0'}     | ${'0.6.1'}      | ${'0.6'}
diff --git a/lib/modules/versioning/cargo/index.ts b/lib/modules/versioning/cargo/index.ts
index c78fc095ce..e8309f06a6 100644
--- a/lib/modules/versioning/cargo/index.ts
+++ b/lib/modules/versioning/cargo/index.ts
@@ -106,6 +106,9 @@ function getNewValue({
     res += newVersion;
     return res;
   }
+  if (rangeStrategy === 'replace' && matches(newVersion, currentValue)) {
+    return currentValue;
+  }
   const newSemver = npm.getNewValue({
     currentValue: cargo2npm(currentValue),
     rangeStrategy,
@@ -142,6 +145,7 @@ function getNewValue({
     const components = currentValue.split('.').length;
     newCargo = withoutCaret.split('.').slice(0, components).join('.');
   }
+
   return newCargo;
 }
 
-- 
GitLab