2015-01-16 55 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

哦,我想清楚了我的問題,我在作者提交時間和修訂提交時間時讓自己感到困惑。修訂提交時間出現在正確的時間,我只是有問題將時間轉換爲人類可讀的日期。 –

相關問題