Java 当我使用RevFilter时,我的RevWalk不是';不要选择任何提交
我正在使用jGit浏览存储库中的提交。当我单独使用Java 当我使用RevFilter时,我的RevWalk不是';不要选择任何提交,java,jgit,Java,Jgit,我正在使用jGit浏览存储库中的提交。当我单独使用RevWalk类时,我会返回存储库中的所有提交。但是,当我使用revWalk.setFilter()添加筛选器时,我不再获得任何提交,即使我确定存在符合筛选器条件的提交 这是我的密码: RevWalk walk = new RevWalk(repo); // These two lines give me trouble: // RevFilter filter = CommitTimeRevFilter.between(sin
RevWalk
类时,我会返回存储库中的所有提交。但是,当我使用revWalk.setFilter()
添加筛选器时,我不再获得任何提交,即使我确定存在符合筛选器条件的提交
这是我的密码:
RevWalk walk = new RevWalk(repo);
// These two lines give me trouble:
// RevFilter filter = CommitTimeRevFilter.between(sinceDate, untilDate);
// walk.setRevFilter(filter);
Ref head = repo.getRef("refs/heads/master");
RevCommit headCommit = walk.parseCommit(head.getObjectId());
// omitting some exception handling for conciseness
walk.markStart(headCommit);
List<MyCommitPOCO> commits = new LinkedList<>();
for(RevCommit commit : walk) {
MyCommitPOCO processedCommit = processRevCommit(commit);
commits.add(processedCommit);
}
walk.dispose();
return commits;
RevWalk=newrevwalk(回购);
//这两行给我带来了麻烦:
//RevFilter filter=committemerevfilter.between(sinceDate,untilDate);
//walk.setRevFilter(filter);
Ref head=回购getRef(“Ref/head/master”);
RevCommit-headCommit=walk.parseCommit(head.getObjectId());
//为了简洁起见,省略了一些异常处理
walk.markStart(headCommit);
列表提交=新建LinkedList();
for(RevCommit提交:walk){
MyCommitPOCO processedCommit=processRevCommit(commit);
add(processedCommit);
}
走。处置();
返回承诺;
当我在没有顶部注释掉的两行代码的情况下运行这段代码时,遍历walk
的提交的for循环会处理我存储库中的每个提交,这是我所期望的。然而,当我用RevFilter
取消对行的注释时,for循环甚至不会在单个提交上迭代,这在我看来是不对的。我已尝试使用多个值运行程序,这些值分别为sinceDate
和untilDate
,我知道这些值适用于我尝试使用的存储库,但我所做的任何尝试都不起作用
当我使用
RevFilter
时,为什么我的RevWalk
不允许我迭代任何提交?当我取消注释时,导致问题的两行代码有什么问题?我发现committeremevfilter
按预期工作。您是否调试了代码以查看所需的提交是否到达筛选代码
下面是一个可以作为起点的测试。它以1、2、3、4秒的时间戳进行四次提交,然后使用带有时间过滤器的RevWalk收集第2秒和第3秒之间的提交:
public class RevWalkFilterLearningTest {
@Rule
public final TemporaryFolder tempFolder = new TemporaryFolder();
private Git git;
@Test
public void testTimeFilter() throws Exception {
commit( 1000 );
commit( 2000 );
commit( 3000 );
commit( 4000 );
RevWalk revWalk = new RevWalk( git.getRepository() );
RevFilter filter = CommitTimeRevFilter.between( new Date( 2000 ), new Date( 3000 ) );
revWalk.setRevFilter( filter );
Ref headRef = git.getRepository().getRef( Constants.HEAD );
RevCommit headCommit = revWalk.parseCommit( headRef.getObjectId() );
revWalk.markStart( headCommit );
int count = 0;
for( RevCommit revCommit : revWalk ) {
count++;
}
assertEquals( 2, count );
}
private void commit( int time ) throws Exception {
PersonIdent committer = new PersonIdent( "committer", "committer@example.com" );
git.commit().setCommitter( new PersonIdent( committer, new Date( time ) ) ).setMessage( "msg" ).call();
}
@Before
public void setUp() throws GitAPIException {
git = Git.init().setDirectory( tempFolder.getRoot() ).call();
}
@After
public void tearDown() {
git.close();
}
}
我不明白这是怎么回答我的问题的。
committemerevfilter
没有像我在代码中期望的那样工作,即使它是为您的代码工作的。您的答案如何帮助我诊断我的问题?它是作为一个起点,您可以逐渐改变以匹配您的代码,并可能在过程中发现问题。如果这对您不起作用,您能否提供更多信息,说明提交是如何创建的,或者提交的时间戳是什么?您是否调试了过滤器并查看它是否被调用以及它的功能?