use of org.eclipse.jgit.revwalk.RevSort in project maven-scm by apache.
the class JGitUtils method getRevCommits.
/**
* Get a list of commits between two revisions.
*
* @param repo the repository to work on
* @param sortings sorting
* @param fromRev start revision
* @param toRev if null, falls back to head
* @param fromDate from which date on
* @param toDate until which date
* @param maxLines max number of lines
* @return a list of commits, might be empty, but never <code>null</code>
* @throws IOException
* @throws MissingObjectException
* @throws IncorrectObjectTypeException
*/
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<RevCommit>();
RevWalk walk = new RevWalk(repo);
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 };
}
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;
}
Aggregations