JGIT: первая итерация для итерируемого <RevCommit>результата log () очищает его - PullRequest
0 голосов
/ 14 декабря 2018

У меня только что возникла очень запутанная проблема: я использую 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 () - нет. "

1 Ответ

0 голосов
/ 15 декабря 2018

Все примеры, которые я могу видеть, зацикливаются только в этом списке один раз , как в jgit/api/CommitAndLogCommandTest.java.

Но любой ходок может быть сброшен вего порядок обхода до определенного коммита eclipse/jgit/revwalk/ObjectWalk.java#markStart"

Поэтому попробуйте сбросить свой список до первого элемента до вызова второго Iterables.size(gitLog).

...