From 291defc7e1ab2c472be26b945784ca065061795d Mon Sep 17 00:00:00 2001
From: Johannes Feichtner <343448+Churro@users.noreply.github.com>
Date: Wed, 13 Mar 2024 06:04:21 +0100
Subject: [PATCH] feat(manager/gradle): add support for new header used by
 gradle-consistent-versions plugin (#27895)

---
 .../extract/consistent-versions-plugin.spec.ts      | 13 ++++++++++++-
 .../gradle/extract/consistent-versions-plugin.ts    | 10 +++++-----
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/lib/modules/manager/gradle/extract/consistent-versions-plugin.spec.ts b/lib/modules/manager/gradle/extract/consistent-versions-plugin.spec.ts
index c5e89a4dd9..dcf567152b 100644
--- a/lib/modules/manager/gradle/extract/consistent-versions-plugin.spec.ts
+++ b/lib/modules/manager/gradle/extract/consistent-versions-plugin.spec.ts
@@ -20,6 +20,18 @@ describe('modules/manager/gradle/extract/consistent-versions-plugin', () => {
     expect(usesGcv('othersub/versions.props', fsMock)).toBeFalse();
   });
 
+  it('detects lock file header introduced with gradle-consistent-versions version 2.20.0', () => {
+    const fsMock = {
+      'build.gradle.kts': `(this file contains) 'com.palantir.consistent-versions'`,
+      'versions.props': `org.apache.lucene:* = 1.2.3`,
+      'versions.lock': stripIndent`
+        # Run ./gradlew writeVersionsLock to regenerate this file
+        org.apache.lucene:lucene-core:1.2.3`,
+    };
+
+    expect(usesGcv('versions.props', fsMock)).toBeTrue();
+  });
+
   it('gradle-consistent-versions plugin correct position for CRLF and LF', () => {
     const crlfProps = parsePropsFile(`a.b:c.d=1\r\na.b:c.e=2`);
     expect(crlfProps).toBeArrayOfSize(2);
@@ -47,7 +59,6 @@ describe('modules/manager/gradle/extract/consistent-versions-plugin', () => {
     expect(parsedProps[0]).toMatchObject({ size: 1 }); // no 7 is valid exact dep
     expect(parsedProps[1]).toMatchObject({ size: 1 }); // no 8 is valid glob dep
 
-    // lockfile
     const parsedLock = parseLockFile(stripIndent`
       # comment:foo.bar:1 (10 constraints: 95be0c15)
       123.foo:bar:2 (10 constraints: 95be0c15)
diff --git a/lib/modules/manager/gradle/extract/consistent-versions-plugin.ts b/lib/modules/manager/gradle/extract/consistent-versions-plugin.ts
index 8a1d602a2d..032fa1c086 100644
--- a/lib/modules/manager/gradle/extract/consistent-versions-plugin.ts
+++ b/lib/modules/manager/gradle/extract/consistent-versions-plugin.ts
@@ -8,8 +8,9 @@ import { isDependencyString, versionLikeSubstring } from '../utils';
 
 export const VERSIONS_PROPS = 'versions.props';
 export const VERSIONS_LOCK = 'versions.lock';
-const LOCKFILE_HEADER_TEXT =
-  '# Run ./gradlew --write-locks to regenerate this file';
+export const LOCKFIlE_HEADER_TEXT = regEx(
+  /^# Run \.\/gradlew (?:--write-locks|writeVersionsLock) to regenerate this file/,
+);
 
 /**
  * Determines if Palantir gradle-consistent-versions is in use, https://github.com/palantir/gradle-consistent-versions.
@@ -26,9 +27,8 @@ export function usesGcv(
     versionsPropsFilename,
     VERSIONS_LOCK,
   );
-  return (
-    fileContents[versionsLockFile]?.startsWith(LOCKFILE_HEADER_TEXT) ?? false
-  );
+
+  return !!fileContents[versionsLockFile]?.match(LOCKFIlE_HEADER_TEXT);
 }
 
 /**
-- 
GitLab