libgit2: найти все коммиты между двумя тегами?

Мне было интересно, как найти все коммиты между двумя тегами в Git, используя C-API? Я знаю, что это легко сделать с помощью инструмента CLI:

git log [первый коммит]..[второй коммит] --pretty=oneline

Тем не менее, я не могу понять, как это сделать с C API. Проблема, с которой я застрял, заключается в том, что на графике заканчивается цикл.

Вот некоторый код Objective-C, который я использовал с Objective-Git, однако, поскольку большинство людей не знают Objective-C, я рад получить ответ в C API или каком-либо другом Git API. Я полагаю, что мне придется вести словарь ранее пройденных коммитов или что-то в этом роде?

- (void)traverseCommits: (GTCommit *)start withGoal: (GTCommit *)goal withHistory: (NSMutableDictionary *)history{
    NSLog(@"%@", start.shortSHA);
    if ([start.SHA isEqualToString:goal.SHA]) {
        return;
    }
    for (GTCommit *c in start.parents) {
        //[history setObject:c forKey:c.SHA];
        if(![c.SHA isEqualToString:goal.SHA])
            [self traverseCommits:c withGoal:goal withHistory:history];

    }
}

1 ответ

Решение

revwalk функции предназначены для этого вида использования. Нажмите новый тег с git_revwalk_push_ref и скрыть старый тег с git_revwalk_hide_ref, Затем пройдитесь по диапазону с git_revwalk_next,

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