public ProjectsInputInfo calculateChecksum()

in src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java [207:275]


    public ProjectsInputInfo calculateChecksum() throws IOException {
        final long t0 = System.currentTimeMillis();

        final String effectivePom = getEffectivePom(normalizedModelProvider.normalizedModel(project));
        final SortedSet<Path> inputFiles = isPom(project) ? Collections.emptySortedSet() : getInputFiles();
        final SortedMap<String, String> dependenciesChecksum = getMutableDependencies();

        final long t1 = System.currentTimeMillis();

        // hash items: effective pom + input files + dependencies
        final int count = 1 + inputFiles.size() + dependenciesChecksum.size();
        final List<DigestItem> items = new ArrayList<>(count);
        final HashChecksum checksum = config.getHashFactory().createChecksum(count);

        Optional<ProjectsInputInfo> baselineHolder = Optional.empty();
        if (config.isBaselineDiffEnabled()) {
            baselineHolder =
                    remoteCache.findBaselineBuild(project).map(b -> b.getDto().getProjectsInputInfo());
        }

        DigestItem effectivePomChecksum = DigestUtils.pom(checksum, effectivePom);
        items.add(effectivePomChecksum);
        final boolean compareWithBaseline = config.isBaselineDiffEnabled() && baselineHolder.isPresent();
        if (compareWithBaseline) {
            checkEffectivePomMatch(baselineHolder.get(), effectivePomChecksum);
        }

        boolean sourcesMatched = true;
        for (Path file : inputFiles) {
            DigestItem fileDigest = DigestUtils.file(checksum, baseDirPath, file);
            items.add(fileDigest);
            if (compareWithBaseline) {
                sourcesMatched &= checkItemMatchesBaseline(baselineHolder.get(), fileDigest);
            }
        }
        if (compareWithBaseline) {
            LOGGER.info("Source code: {}", sourcesMatched ? "MATCHED" : "OUT OF DATE");
        }

        boolean dependenciesMatched = true;
        for (Map.Entry<String, String> entry : dependenciesChecksum.entrySet()) {
            DigestItem dependencyDigest = DigestUtils.dependency(checksum, entry.getKey(), entry.getValue());
            items.add(dependencyDigest);
            if (compareWithBaseline) {
                dependenciesMatched &= checkItemMatchesBaseline(baselineHolder.get(), dependencyDigest);
            }
        }

        if (compareWithBaseline) {
            LOGGER.info("Dependencies: {}", dependenciesMatched ? "MATCHED" : "OUT OF DATE");
        }

        final ProjectsInputInfo projectsInputInfoType = new ProjectsInputInfo();
        projectsInputInfoType.setChecksum(checksum.digest());
        projectsInputInfoType.getItems().addAll(items);

        final long t2 = System.currentTimeMillis();

        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,
                config.getHashFactory().getAlgorithm(),
                projectsInputInfoType.getChecksum(),
                t2 - t1);
        return projectsInputInfoType;
    }