如何在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上使用它们!
答案 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
类来创建自己的类。