2015-01-16 96 views
2

如何在jGit中使用RevFilter如何在jGit中使用过滤器?

我发现了一个关于完成特定任务(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谈过滤器

所以文档不帮我。尽管我的印象是使用过滤器是使用jGit的基本部分,但没人问过如何在StackOverflow上使用它们!

回答

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 
} 

该过滤器本质上只是一个判断是否从步行者获得提交。您可以在org.eclipse.jgit.revwalk.filter包中找到许多过滤器。或者,您可以通过扩展RevFilter课程来创建自己的课程。

+0

我在使用您的答案时出现问题。见http://stackoverflow.com/questions/28056917/when-i-use-a-revfilter-my-revwalk-isnt-selecting-any-commits – Kevin

+0

我现在正在尝试它。但到目前为止,我的印象是,jgit所经历的时间与您设定的时间并不完全相同。就像有一个重大的抵消。在我的测试中,自2014年初以来,我正在查看的回购协议已进行了修订。2015年尝试为修订版设置筛选器将于2014年12月15日前完成提交。有些东西似乎没有了。 –

+1

哦,我想清楚了我的问题,我在作者提交时间和修订提交时间时让自己感到困惑。修订提交时间出现在正确的时间,我只是有问题将时间转换为人类可读的日期。 –

相关问题