2015-01-16 5 views
2

jGit에서 RevFilter을 어떻게 사용합니까?jGit에서 필터를 사용하려면 어떻게해야합니까?

특정 작업 (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 문서를 읽었습니다. 필터 그래서 문서 나에게 도움이되지 않습니다

에 대한

TODO 토론 : 슬프게도, in the section that would show how to use filters는 라인이있다. 그리고 필터를 사용하는 것이 jGit을 사용하는 기본 요소라는 인상을 받지만 다른 누구도 StackOverflow에서 필터를 사용하는 방법을 아직 묻지 않았습니다!

답변

2

소스로 판단하면 RevWalk 반복기의 인스턴스를 만들고 필터를 설정 한 다음 워커를 반복해야합니다.

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

아, 내 문제를 알아 냈어. 나는 편집 커밋 시간이있는 저자 커밋 시간과 혼동하고 있었다. 개정 커밋 시간이 정확한 시간에 나타나고 있습니다. 시간을 사람이 읽을 수있는 날짜로 변환하는 데 문제가있었습니다. –

관련 문제