This is an automated email from the ASF dual-hosted git repository.

olamy pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/maven-build-cache-extension.git


The following commit(s) were added to refs/heads/master by this push:
     new fded5cc  [MBUILDCACHE-76] add project version as part of hash key 
(#117)
fded5cc is described below

commit fded5cc45cdd7d213551eadc3825e705c99ea528
Author: Olivier Lamy <ol...@apache.org>
AuthorDate: Sat Dec 23 19:24:46 2023 +1000

    [MBUILDCACHE-76] add project version as part of hash key (#117)
    
    Signed-off-by: Olivier Lamy <ol...@apache.org>
---
 .../buildcache/DefaultProjectInputCalculator.java  |  7 +++--
 .../buildcache/checksum/MavenProjectInput.java     | 20 ++++++++++---
 .../maven/buildcache/its/CoreExtensionTest.java    | 33 ++++++++++++++++++++++
 src/test/projects/core-extension/pom.xml           | 16 +++++++++++
 4 files changed, 70 insertions(+), 6 deletions(-)

diff --git 
a/src/main/java/org/apache/maven/buildcache/DefaultProjectInputCalculator.java 
b/src/main/java/org/apache/maven/buildcache/DefaultProjectInputCalculator.java
index 30bd052..2a1217f 100644
--- 
a/src/main/java/org/apache/maven/buildcache/DefaultProjectInputCalculator.java
+++ 
b/src/main/java/org/apache/maven/buildcache/DefaultProjectInputCalculator.java
@@ -72,8 +72,11 @@ public class DefaultProjectInputCalculator implements 
ProjectInputCalculator {
 
     @Override
     public ProjectsInputInfo calculateInput(MavenProject project) {
-        LOGGER.info("Going to calculate checksum for project [groupId=" + 
project.getGroupId() + ", artifactId="
-                + project.getArtifactId() + "]");
+        LOGGER.info(
+                "Going to calculate checksum for project [groupId={}, 
artifactId={}, version={}]",
+                project.getGroupId(),
+                project.getArtifactId(),
+                project.getVersion());
 
         String key = BuilderCommon.getKey(project);
         // NOTE: Do not use ConcurrentHashMap.computeIfAbsent() here because 
of recursive calls
diff --git 
a/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java 
b/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java
index 8dacf33..4b75dd4 100644
--- a/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java
+++ b/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java
@@ -24,6 +24,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.Writer;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.DirectoryStream;
 import java.nio.file.FileVisitResult;
 import java.nio.file.Files;
@@ -178,8 +179,8 @@ public class MavenProjectInput {
 
         final long t1 = System.currentTimeMillis();
 
-        // hash items: effective pom + input files + dependencies
-        final int count = 1 + inputFiles.size() + dependenciesChecksum.size();
+        // hash items: effective pom + version + input files + dependencies
+        final int count = 2 + inputFiles.size() + dependenciesChecksum.size();
         final List<DigestItem> items = new ArrayList<>(count);
         final HashChecksum checksum = 
config.getHashFactory().createChecksum(count);
 
@@ -189,6 +190,14 @@ public class MavenProjectInput {
                     remoteCache.findBaselineBuild(project).map(b -> 
b.getDto().getProjectsInputInfo());
         }
 
+        DigestItem projectVersion = new DigestItem();
+        projectVersion.setType("version");
+        projectVersion.setIsText("yes");
+        projectVersion.setValue(project.getVersion());
+        items.add(projectVersion);
+
+        checksum.update(project.getVersion().getBytes(StandardCharsets.UTF_8));
+
         DigestItem effectivePomChecksum = DigestUtils.pom(checksum, 
effectivePom);
         items.add(effectivePomChecksum);
         final boolean compareWithBaseline = config.isBaselineDiffEnabled() && 
baselineHolder.isPresent();
@@ -227,9 +236,12 @@ public class MavenProjectInput {
 
         final long t2 = System.currentTimeMillis();
 
-        for (DigestItem item : projectsInputInfoType.getItems()) {
-            LOGGER.debug("Hash calculated, item: {}, hash: {}", 
item.getType(), item.getHash());
+        if (LOGGER.isDebugEnabled()) {
+            for (DigestItem item : projectsInputInfoType.getItems()) {
+                LOGGER.debug("Hash calculated, item: {}, hash: {}", 
item.getType(), item.getHash());
+            }
         }
+
         LOGGER.info(
                 "Project inputs calculated in {} ms. {} checksum [{}] 
calculated in {} ms.",
                 t1 - t0,
diff --git 
a/src/test/java/org/apache/maven/buildcache/its/CoreExtensionTest.java 
b/src/test/java/org/apache/maven/buildcache/its/CoreExtensionTest.java
index a788da4..cdd5b83 100644
--- a/src/test/java/org/apache/maven/buildcache/its/CoreExtensionTest.java
+++ b/src/test/java/org/apache/maven/buildcache/its/CoreExtensionTest.java
@@ -41,4 +41,37 @@ public class CoreExtensionTest {
         verifier.verifyErrorFreeLog();
         verifier.verifyTextInLog("Found cached build, restoring " + 
PROJECT_NAME + " from cache");
     }
+
+    @Test
+    void simple_build_change_version_build_install_again(Verifier verifier) 
throws VerificationException {
+        verifier.setAutoclean(false);
+
+        verifier.setLogFileName("../log-1.txt");
+        verifier.executeGoal("install");
+        verifier.verifyErrorFreeLog();
+        verifier.verifyArtifactPresent("org.apache.maven.caching.test.simple", 
"simple", "0.0.1-SNAPSHOT", "jar");
+
+        verifier.setLogFileName("../log-2.txt");
+        verifier.executeGoal("install");
+        verifier.verifyErrorFreeLog();
+        verifier.verifyTextInLog("Found cached build, restoring " + 
PROJECT_NAME + " from cache");
+
+        verifier.setLogFileName("../log-3.txt");
+        verifier.getCliOptions().clear();
+        verifier.addCliOption("-DoldVersion=0.0.1-SNAPSHOT");
+        verifier.addCliOption("-DnewVersion=0.0.2-SNAPSHOT");
+        verifier.executeGoal("versions:set");
+        verifier.verifyErrorFreeLog();
+
+        verifier.getCliOptions().clear();
+        verifier.setLogFileName("../log-4.txt");
+        verifier.executeGoal("install");
+        verifier.verifyErrorFreeLog();
+        verifier.verifyArtifactPresent("org.apache.maven.caching.test.simple", 
"simple", "0.0.2-SNAPSHOT", "jar");
+
+        verifier.setLogFileName("../log-5.txt");
+        verifier.executeGoal("install");
+        verifier.verifyErrorFreeLog();
+        verifier.verifyTextInLog("Found cached build, restoring " + 
PROJECT_NAME + " from cache");
+    }
 }
diff --git a/src/test/projects/core-extension/pom.xml 
b/src/test/projects/core-extension/pom.xml
index cd309b7..6aa0978 100644
--- a/src/test/projects/core-extension/pom.xml
+++ b/src/test/projects/core-extension/pom.xml
@@ -29,4 +29,20 @@
         <maven.compiler.target>1.8</maven.compiler.target>
     </properties>
 
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>versions-maven-plugin</artifactId>
+                    <version>2.16.0</version>
+                    <configuration>
+                        <generateBackupPoms>false</generateBackupPoms>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
 </project>
\ No newline at end of file

Reply via email to