public static List getRevCommits()

in maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java [407:489]


    public static List<RevCommit> getRevCommits(
            Repository repo,
            RevSort[] sortings,
            String fromRev,
            String toRev,
            final Date fromDate,
            final Date toDate,
            int maxLines)
            throws IOException, MissingObjectException, IncorrectObjectTypeException {

        List<RevCommit> revs = new ArrayList<>();

        ObjectId fromRevId = fromRev != null ? repo.resolve(fromRev) : null;
        ObjectId toRevId = toRev != null ? repo.resolve(toRev) : null;

        if (sortings == null || sortings.length == 0) {
            sortings = new RevSort[] {RevSort.TOPO, RevSort.COMMIT_TIME_DESC};
        }

        try (RevWalk walk = new RevWalk(repo)) {
            for (final RevSort s : sortings) {
                walk.sort(s, true);
            }

            if (fromDate != null && toDate != null) {
                // walk.setRevFilter( CommitTimeRevFilter.between( fromDate, toDate ) );
                walk.setRevFilter(new RevFilter() {
                    @Override
                    public boolean include(RevWalk walker, RevCommit cmit)
                            throws StopWalkException, MissingObjectException, IncorrectObjectTypeException,
                                    IOException {
                        int cmtTime = cmit.getCommitTime();

                        return (cmtTime >= (fromDate.getTime() / 1000)) && (cmtTime <= (toDate.getTime() / 1000));
                    }

                    @Override
                    public RevFilter clone() {
                        return this;
                    }
                });
            } else {
                if (fromDate != null) {
                    walk.setRevFilter(CommitTimeRevFilter.after(fromDate));
                }
                if (toDate != null) {
                    walk.setRevFilter(CommitTimeRevFilter.before(toDate));
                }
            }

            if (fromRevId != null) {
                RevCommit c = walk.parseCommit(fromRevId);
                c.add(RevFlag.UNINTERESTING);
                RevCommit real = walk.parseCommit(c);
                walk.markUninteresting(real);
            }

            if (toRevId != null) {
                RevCommit c = walk.parseCommit(toRevId);
                c.remove(RevFlag.UNINTERESTING);
                RevCommit real = walk.parseCommit(c);
                walk.markStart(real);
            } else {
                final ObjectId head = repo.resolve(Constants.HEAD);
                if (head == null) {
                    throw new RuntimeException("Cannot resolve " + Constants.HEAD);
                }
                RevCommit real = walk.parseCommit(head);
                walk.markStart(real);
            }

            int n = 0;
            for (final RevCommit c : walk) {
                n++;
                if (maxLines != -1 && n > maxLines) {
                    break;
                }

                revs.add(c);
            }
            return revs;
        }
    }