protected ChangeLogScmResult executeChangeLogCommand()

in maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java [102:160]


    protected ChangeLogScmResult executeChangeLogCommand(
            ScmProviderRepository repo,
            ScmFileSet fileSet,
            Date startDate,
            Date endDate,
            ScmBranch branch,
            String datePattern,
            ScmVersion startVersion,
            ScmVersion endVersion,
            ScmVersion version)
            throws ScmException {
        Git git = null;
        boolean isARangeChangeLog = startVersion != null || endVersion != null;

        try {
            git = JGitUtils.openRepo(fileSet.getBasedir());

            boolean versionOnly = startVersion == null && endVersion == null && version != null;

            String startRev;
            String endRev;

            if (versionOnly) {
                startRev = null;
                endRev = version.getName();
            } else {
                startRev = startVersion != null ? startVersion.getName() : (isARangeChangeLog ? "HEAD" : null);
                endRev = endVersion != null ? endVersion.getName() : (isARangeChangeLog ? "HEAD" : null);
            }

            List<ChangeEntry> gitChanges =
                    this.whatchanged(git.getRepository(), null, startRev, endRev, startDate, endDate, -1);

            List<ChangeSet> modifications = new ArrayList<>(gitChanges.size());

            for (ChangeEntry change : gitChanges) {
                ChangeSet scmChange = new ChangeSet();

                scmChange.setAuthor(change.getAuthorName());
                scmChange.setComment(change.getBody());
                scmChange.setDate(change.getAuthorDate());
                scmChange.setRevision(change.getCommitHash());
                scmChange.setTags(change.getTags());
                // X TODO scmChange.setFiles( change.get )

                modifications.add(scmChange);
            }

            ChangeLogSet changeLogSet = new ChangeLogSet(modifications, startDate, endDate);
            changeLogSet.setStartVersion(startVersion);
            changeLogSet.setEndVersion(endVersion);

            return new ChangeLogScmResult("JGit changelog", changeLogSet);
        } catch (Exception e) {
            throw new ScmException("JGit changelog failure!", e);
        } finally {
            JGitUtils.closeRepo(git);
        }
    }