display more info for DigestItem
Signed-off-by: Olivier Lamy <olamy@apache.org>
diff --git a/src/main/java/org/apache/maven/buildcache/checksum/DigestUtils.java b/src/main/java/org/apache/maven/buildcache/checksum/DigestUtils.java
index da0f3f2..d890312 100644
--- a/src/main/java/org/apache/maven/buildcache/checksum/DigestUtils.java
+++ b/src/main/java/org/apache/maven/buildcache/checksum/DigestUtils.java
@@ -49,14 +49,15 @@ public class DigestUtils {
private static final ThreadLocal<UniversalDetector> ENCODING_DETECTOR =
ThreadLocal.withInitial(() -> new UniversalDetector(null));
- public static DigestItem pom(HashChecksum checksum, String effectivePom) {
- return item("pom", effectivePom, checksum.update(effectivePom.getBytes(UTF_8)));
+ public static DigestItem pom(HashChecksum checksum, String effectivePom, String info) {
+ return item("pom", effectivePom, checksum.update(effectivePom.getBytes(UTF_8)), info);
}
public static DigestItem file(HashChecksum checksum, Path basedir, Path file) throws IOException {
byte[] content = Files.readAllBytes(file);
String normalized = normalize(basedir, file);
- DigestItem item = item("file", normalized, checksum.update(content));
+ DigestItem item = item(
+ "file", normalized, checksum.update(content), file.getFileName().toString());
try {
populateContentDetails(file, content, item);
} catch (IOException ignore) {
@@ -122,8 +123,8 @@ private static boolean isBinary(String contentType) {
"application/pdf");
}
- public static DigestItem dependency(HashChecksum checksum, String key, String hash) {
- return item("dependency", key, checksum.update(hash));
+ public static DigestItem dependency(HashChecksum checksum, String key, String hash, String info) {
+ return item("dependency", key, checksum.update(hash), info);
}
private static String normalize(Path basedirPath, Path file) {
@@ -138,11 +139,12 @@ private static Path relativize(Path basedirPath, Path file) {
}
}
- private static DigestItem item(String type, String reference, String hash) {
+ private static DigestItem item(String type, String reference, String hash, String info) {
final DigestItem item = new DigestItem();
item.setType(type);
item.setValue(reference);
item.setHash(hash);
+ item.setInfo(info);
return item;
}
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 4f812c4..f5ceeeb 100644
--- a/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java
+++ b/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java
@@ -31,20 +31,7 @@
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Properties;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.TreeMap;
-import java.util.TreeSet;
+import java.util.*;
import java.util.function.Predicate;
import org.apache.commons.lang3.StringUtils;
@@ -209,7 +196,7 @@ public ProjectsInputInfo calculateChecksum() throws IOException {
final String effectivePom = getEffectivePom(normalizedModelProvider.normalizedModel(project));
final SortedSet<Path> inputFiles = isPom(project) ? Collections.emptySortedSet() : getInputFiles();
- final SortedMap<String, String> dependenciesChecksum = getMutableDependencies();
+ final SortedMap<String, DependencyInfo> dependenciesChecksum = getMutableDependencies();
final long t1 = System.currentTimeMillis();
@@ -224,7 +211,10 @@ public ProjectsInputInfo calculateChecksum() throws IOException {
remoteCache.findBaselineBuild(project).map(b -> b.getDto().getProjectsInputInfo());
}
- DigestItem effectivePomChecksum = DigestUtils.pom(checksum, effectivePom);
+ DigestItem effectivePomChecksum = DigestUtils.pom(
+ checksum,
+ effectivePom,
+ project.getGroupId() + ":" + project.getArtifactId() + ":" + project.getVersion());
items.add(effectivePomChecksum);
final boolean compareWithBaseline = config.isBaselineDiffEnabled() && baselineHolder.isPresent();
if (compareWithBaseline) {
@@ -244,8 +234,9 @@ public ProjectsInputInfo calculateChecksum() throws IOException {
}
boolean dependenciesMatched = true;
- for (Map.Entry<String, String> entry : dependenciesChecksum.entrySet()) {
- DigestItem dependencyDigest = DigestUtils.dependency(checksum, entry.getKey(), entry.getValue());
+ for (Map.Entry<String, DependencyInfo> entry : dependenciesChecksum.entrySet()) {
+ DigestItem dependencyDigest =
+ DigestUtils.dependency(checksum, entry.getKey(), entry.getValue().hash, entry.getValue().info);
items.add(dependencyDigest);
if (compareWithBaseline) {
dependenciesMatched &= checkItemMatchesBaseline(baselineHolder.get(), dependencyDigest);
@@ -262,9 +253,17 @@ public ProjectsInputInfo calculateChecksum() throws IOException {
final long t2 = System.currentTimeMillis();
- for (DigestItem item : projectsInputInfoType.getItems()) {
- LOGGER.debug("Hash calculated, item: {}, hash: {}", item.getType(), item.getHash());
+ if (LOGGER.isDebugEnabled()) {
+ projectsInputInfoType.getItems().sort(INSTANCE);
+ for (DigestItem item : projectsInputInfoType.getItems()) {
+ LOGGER.debug(
+ "Hash calculated, item type: {}, info: {}, hash: {}",
+ item.getType(),
+ item.getInfo(),
+ item.getHash());
+ }
}
+
LOGGER.info(
"Project inputs calculated in {} ms. {} checksum [{}] calculated in {} ms.",
t1 - t0,
@@ -274,6 +273,26 @@ public ProjectsInputInfo calculateChecksum() throws IOException {
return projectsInputInfoType;
}
+ private static final DigestItemInfoComparator INSTANCE = new DigestItemInfoComparator();
+
+ private static class DigestItemInfoComparator implements Comparator<DigestItem> {
+ @Override
+ public int compare(DigestItem o1, DigestItem o2) {
+ String s1 = o1.getInfo();
+ String s2 = o2.getInfo();
+ if (s1 == null && s2 == null) {
+ return 0;
+ }
+ if (s1 == null) {
+ return -1;
+ }
+ if (s2 == null) {
+ return 1;
+ }
+ return s1.compareTo(s2);
+ }
+ }
+
private void checkEffectivePomMatch(ProjectsInputInfo baselineBuild, DigestItem effectivePomChecksum) {
Optional<DigestItem> pomHolder = Optional.empty();
for (DigestItem it : baselineBuild.getItems()) {
@@ -401,7 +420,7 @@ private SortedSet<Path> getInputFiles() {
}
LOGGER.info(
- "Found {} input files. Project dir processing: {}, plugins: {} millis",
+ "Found {} input files. Project dir processing: {} ms, plugins: {} millis",
sorted.size(),
walkKnownPathsFinished,
pluginsFinished);
@@ -642,8 +661,18 @@ private boolean isFilteredOutSubpath(Path path) {
return false;
}
- private SortedMap<String, String> getMutableDependencies() throws IOException {
- SortedMap<String, String> result = new TreeMap<>();
+ private static class DependencyInfo {
+ private final String hash;
+ private final String info;
+
+ DependencyInfo(String hash, String info) {
+ this.hash = hash;
+ this.info = info;
+ }
+ }
+
+ private SortedMap<String, DependencyInfo> getMutableDependencies() throws IOException {
+ SortedMap<String, DependencyInfo> result = new TreeMap<>();
for (Dependency dependency : project.getDependencies()) {
@@ -675,7 +704,8 @@ private SortedMap<String, String> getMutableDependencies() throws IOException {
projectHash = resolved.getHash();
}
result.put(
- KeyUtils.getVersionlessArtifactKey(repoSystem.createDependencyArtifact(dependency)), projectHash);
+ KeyUtils.getVersionlessArtifactKey(repoSystem.createDependencyArtifact(dependency)),
+ new DependencyInfo(projectHash, dependency.toString()));
}
return result;
}
diff --git a/src/main/java/org/apache/maven/buildcache/xml/DtoUtils.java b/src/main/java/org/apache/maven/buildcache/xml/DtoUtils.java
index 7f17f80..dec449b 100644
--- a/src/main/java/org/apache/maven/buildcache/xml/DtoUtils.java
+++ b/src/main/java/org/apache/maven/buildcache/xml/DtoUtils.java
@@ -74,6 +74,7 @@ public static DigestItem createdDigestedByProjectChecksum(Artifact artifact, Str
dit.setHash(projectChecksum);
dit.setFileChecksum(artifact.getFileHash());
dit.setValue(getArtifactKey(artifact));
+ dit.setInfo(artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion());
return dit;
}
@@ -83,6 +84,7 @@ public static DigestItem createDigestedFile(org.apache.maven.artifact.Artifact a
dit.setHash(fileHash);
dit.setFileChecksum(fileHash);
dit.setValue(getArtifactKey(artifact));
+ dit.setInfo(artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion());
return dit;
}
diff --git a/src/main/mdo/build-cache-build.mdo b/src/main/mdo/build-cache-build.mdo
index c9febc2..b4e45d1 100644
--- a/src/main/mdo/build-cache-build.mdo
+++ b/src/main/mdo/build-cache-build.mdo
@@ -379,6 +379,10 @@
<name>eol</name>
<type>String</type>
</field>
+ <field xml.attribute="true">
+ <name>info</name>
+ <type>String</type>
+ </field>
</fields>
</class>