in src/main/java/org/apache/maven/buildcache/CacheControllerImpl.java [495:546]
public void produceDiffReport(CacheResult cacheResult, Build build) {
MavenProject project = cacheResult.getContext().getProject();
Optional<Build> baselineHolder = remoteCache.findBaselineBuild(project);
if (baselineHolder.isPresent()) {
Build baseline = baselineHolder.get();
String outputDirectory = project.getBuild().getDirectory();
Path reportOutputDir = Paths.get(outputDirectory, "incremental-maven");
LOGGER.info("Saving cache builds diff to: {}", reportOutputDir);
Diff diff = new CacheDiff(build.getDto(), baseline.getDto(), cacheConfig).compare();
try {
Files.createDirectories(reportOutputDir);
final ProjectsInputInfo baselineInputs = baseline.getDto().getProjectsInputInfo();
final String checksum = baselineInputs.getChecksum();
Files.write(
reportOutputDir.resolve("buildinfo-baseline-" + checksum + ".xml"),
xmlService.toBytes(baseline.getDto()),
TRUNCATE_EXISTING,
CREATE);
Files.write(
reportOutputDir.resolve("buildinfo-" + checksum + ".xml"),
xmlService.toBytes(build.getDto()),
TRUNCATE_EXISTING,
CREATE);
Files.write(
reportOutputDir.resolve("buildsdiff-" + checksum + ".xml"),
xmlService.toBytes(diff),
TRUNCATE_EXISTING,
CREATE);
final Optional<DigestItem> pom =
CacheDiff.findPom(build.getDto().getProjectsInputInfo());
if (pom.isPresent()) {
Files.write(
reportOutputDir.resolve("effective-pom-" + checksum + ".xml"),
pom.get().getValue().getBytes(StandardCharsets.UTF_8),
TRUNCATE_EXISTING,
CREATE);
}
final Optional<DigestItem> baselinePom = CacheDiff.findPom(baselineInputs);
if (baselinePom.isPresent()) {
Files.write(
reportOutputDir.resolve("effective-pom-baseline-" + baselineInputs.getChecksum() + ".xml"),
baselinePom.get().getValue().getBytes(StandardCharsets.UTF_8),
TRUNCATE_EXISTING,
CREATE);
}
} catch (IOException e) {
LOGGER.error("Cannot produce build diff for project", e);
}
} else {
LOGGER.info("Cannot find project in baseline build, skipping diff");
}
}