Эквивалент JGit для коммитов git с момента последней команды тега

Учитывая эту команду git git log ``git describe --tags --abbrev=0``..HEAD --oneline

Я хотел бы иметь эквивалент в JGit. Я нашел такие методы, как git.log().addRange() но не мог понять, какие ценности он ожидает или где я могу позвонить git describe в рамках API. Я старался git.describe() но методы цепочки не имели для меня никакого смысла в отношении нативного API git CLI.

1 ответ

Решение

Я не могу понять смысл DescribeCommand вывод тоже. Таким образом, я предлагаю обойти DescribeCommand и повторить историю, начиная с HEAD в обратном направлении, как это:

Collection<Ref> allTags = git.getRepository().getRefDatabase().getRefs( "refs/tags/" ).values();
RevWalk revWalk = new RevWalk( git.getRepository() );
revWalk.markStart( revWalk.parseCommit( git.getRepository().resolve( "HEAD" ) ) );
RevCommit next = revWalk.next();
while( next != null ) {
  // ::pseudo code:: 
  // in real, iterate over allTags and compare each tag.getObjectId() with next
  if( allTags.contains( next ) ) { 
    // remember next and exit while loop
  }
  next = revWalk.next();
}
revWalk.close();

Обратите внимание, что аннотированные теги должны быть неочищенными: список коммитов, связанных с данным тегом с помощью JGit

После того, как вы пометили коммит, вы можете передать результат в LogCommand как это:

ObjectId headCommitId = git.getRepository().resolve( "HEAD" );
Iterable<RevCommit> commits = git.log().addRange( headCommitId, taggedCommit ).call();

Это немного расплывчато, но я надеюсь, что это поможет вам начать.

Другие вопросы по тегам