Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我使用RevFilter时,我的RevWalk不是';不要选择任何提交_Java_Jgit - Fatal编程技术网

Java 当我使用RevFilter时,我的RevWalk不是';不要选择任何提交

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

我正在使用jGit浏览存储库中的提交。当我单独使用
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
没有像我在代码中期望的那样工作,即使它是为您的代码工作的。您的答案如何帮助我诊断我的问题?它是作为一个起点,您可以逐渐改变以匹配您的代码,并可能在过程中发现问题。如果这对您不起作用,您能否提供更多信息,说明提交是如何创建的,或者提交的时间戳是什么?您是否调试了过滤器并查看它是否被调用以及它的功能?