如何在 jGit 中使用 RevFilter
?
我找到了有关完成特定任务 ( getting the commits made between two dates ) 的问题的答案,答案是使用 RevFilter
的特定子类。但是,我不知道如何使用 RevFilter
!
特别是,我想知道我需要做什么才能得到我链接的问题的答案,该问题说
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 talk about filters
所以文档对我没有帮助。尽管我的印象是使用过滤器是使用 jGit 的基本部分,但还没有人问过如何在 StackOverflow 上使用它们!
最佳答案
从源代码来看,您所需要做的就是创建一个 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
类来创建自己的过滤器。
关于java - 如何在 jGit 中使用过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27993576/