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