Эквивалент 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();
Это немного расплывчато, но я надеюсь, что это поможет вам начать.