У меня только что возникла очень запутанная проблема: я использую 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 не помог в этом случае - я не нашел ничего или кого-либо, кто имел бы эту проблему до сих пор.
Даже Сброс RevWalk ничего не меняет:
«Экземпляр RevWalk можно использовать только один раз для генерации результатов. Для повторного запуска требуется создать новый экземпляр RevWalk или вызвать reset () перед повторным запуском».[...]
"reset (): Сбрасывает внутреннее состояние и позволяет снова использовать этот экземпляр."[...]
"Предлагаемый итератор находится над списком RevCommits, описанным конфигурацией этого экземпляра. Приложения должны ограничивать себя использованием либо предоставленного Iterator, либо next (), но никогда не использовать оба нав то же время RevWalk. Итератор может буферизовать RevCommits, а next () - нет. "