我有一个非常令人困惑的问题: 我正在使用JGit,并且在检索git日志后,返回的结果Iterable如果被迭代将自动清空。
代码:
Iterable<RevCommit> gitLog = git.log()
.addRange(refFromID, refToID)
.setRevFilter(RevFilter.NO_MERGES)
.call();
System.out.println("Size of Iterable: " + Iterables.size(gitLog)); //triggers first iteration. Size is >0
System.out.println("Size of Iterable: " + Iterables.size(gitLog)); //second iteration triggered. Size is now = 0
在这种情况下,Google没有帮助-到目前为止,我没有发现任何东西,也没有任何人遇到这个问题。
即使resetting the RevWalk也没有任何改变:
“一个RevWalk实例只能使用一次来生成结果。第二次运行需要创建一个新的RevWalk实例,或者在再次启动之前调用reset()。” [...]
“ reset():重置内部状态并允许再次使用此实例。” [...]
”提供的迭代器在此实例的配置所描述的RevCommits列表上。应用程序应限制自己使用提供的Iterator或next(),但切勿同时在同一RevWalk上使用两者。迭代器可以缓冲RevCommits,而next()不缓冲。”
答案 0 :(得分:0)
我只能看到的所有示例都一次遍历该列表,例如jgit/api/CommitAndLogCommandTest.java
。
但是任何步行者都可以reset in its walk order进行特定的eclipse/jgit/revwalk/ObjectWalk.java#markStart"
因此,请尝试将您的列表重置为它的第一个元素,然后再调用第二个Iterables.size(gitLog)
。