jGit, использующий RevWalk для получения RevCommit, ничего не возвращает

Я новичок в jGit и Git. Я пытаюсь запросить историю фиксации репозитория git, но я хотел бы получить только фиксацию определенного пользователя. Читая документы, я увидел, что RevWalk позволит мне добавлять RevFilters, чтобы ограничить поиск.

Во-первых, я использую объект Git и его метод журнала для вывода списка коммитов, и это работает очень хорошо. Но при использовании RevWalk ничего не происходит.

public static void main(String[] args) throws IOException, GitAPIException {
    FileRepositoryBuilder builder = new FileRepositoryBuilder();
    Repository repository = builder.setGitDir(new File("/home/joan/testGit/testMockito/.git"))
    .readEnvironment().findGitDir().build();

    //This works but I get all the commits
    Git git = new Git(repository);
    Iterable<RevCommit> log = git.log().call();
    for (Iterator<RevCommit> iterator = log.iterator(); iterator.hasNext();) {
        RevCommit rev = iterator.next();
        System.out.println(rev.getAuthorIdent().getName());
        System.out.println(rev.getFullMessage());
    }

    RevWalk walk = new RevWalk(repository);
    for (Iterator<RevCommit> iterator = walk.iterator(); iterator.hasNext();) {
        //It never cames in this block

        RevCommit rev = iterator.next();
        System.out.println(rev.getAuthorIdent().getName());
        System.out.println(rev.getFullMessage());
    }

}

Любой совет? Я делаю что-то неправильно?

Спасибо.


person jomaora    schedule 08.08.2012    source источник


Ответы (2)


Вам нужно добавить коммиты в RevWalk, вызвав markStart, прежде чем повторять его.

Например, чтобы запустить RevWalk с коммитом HEAD текущего репозитория:

walk.markStart(walk.parseCommit(repository.resolve("HEAD")));

person Kevin Sawicki    schedule 08.08.2012
comment
Спасибо, Кевин. Вы правы, я добавил HEAD и получил список коммитов. :) - person jomaora; 09.08.2012

Почему бы просто не использовать LogCommand из org.eclipse.jgit.api?

Git git = new Git(db);

Iterable<RevCommit> log = git.log().call();

Затем вы можете отфильтровать автора на основе коммитов, которые вы возвращаете. Я также рекомендую взглянуть на Gitective, который находится на уровень выше JGit. Вы можете узнать, как реализовать с ним вещи, связанные с JGit: https://github.com/kevinsawicki/gitective/

Вы можете сделать что-то вроде этого:

PersonIdent person = new PersonIdent("Chris", "[email protected]");

filters.add(new AuthorFilter(person));

А потом можно звонить CommitFinder... с нужными фильтрами...

person Chris Aniszczyk    schedule 08.08.2012