如何在jGit中使用过滤器?

时间:2015-01-16 22:08:10

标签: java jgit

如何在jGit中使用RevFilter

我找到了一个关于完成特定任务(getting the commits made between two dates)的问题的答案,答案说使用RevFilter的特定子类。但是,我不知道如何使用RevFilter s!

特别是,我想知道我需要做些什么来回答我所链接的问题,其中说

Date since = getClock();
Date until = getClock();
RevFilter between = CommitTimeRevFilter.between(since, until);

并使用它来实际迭代两个日期之间的提交。类似的东西:

RevFilter between = CommitTimeRevFilter.between(since, until);
RevWalk walk = new RevWalk(repository);
walk.magicallyApplyFilters(between);
for(RevCommit commit : RevWalk) {
    // Do my thing
}

我已阅读jGit文档。可悲的是,in the section that would show how to use filters,有一条线:

  

TODO谈论过滤器

因此文档对我没有帮助。虽然我觉得使用过滤器是使用jGit的基本部分,但是没有其他人问过如何在StackOverflow上使用它们!

1 个答案:

答案 0 :(得分:2)

根据来源判断,您需要做的就是创建RevWalk迭代器的实例,设置过滤器,然后遍历walker。

RevWalk walk = new RevWalk(repo);
walk.markStart(walk.parseCommit(repo.resolve(Constants.HEAD)));
walk.sort(RevSort.REVERSE); // chronological order
final LocalDate thisYear = new LocalDate(2015, 1, 1); // joda
walk.setRevFilter(CommitTimeRevFilter.after(thisYear.toDate()));
for(RevCommit commit : walk) {
    // do your thing
}

过滤器基本上只是关于是否从walker中提交提交的谓词。您可以在org.eclipse.jgit.revwalk.filter包中找到许多过滤器。或者您可以通过扩展RevFilter类来创建自己的类。