Вызов git diff с определенной директорией довольно прост для cmd, но мне нужно вызвать его из программы на c ++.Я немного запутался во всех различных функциях diff, которые предоставляет libgit2, но с помощью этого вопроса я получил его, показав результаты для всего репо.Для определенного пути я пытался использовать git_index_get_bypath
, но он всегда завершается ошибкой с сообщением об отмене.
git_index_get_bypath(index, "path/of/the/directory/inside/repo", GIT_INDEX_STAGE_NORMAL);
Кроме того, каждый раз, когда я изменяю путь репо на более конкретный каталог внутри него, он падает с ошибкой подтвержденияи сообщение об отмене, которое имеет смысл.
Я звоню git_diff_index_to_index(&diff, repo, NULL, index, &diffopts);
, чтобы узнать разницу с diffopts.flags = GIT_DIFF_FORMAT_NAME_ONLY;
ОБНОВЛЕНИЕ
git_repository *repo = NULL;
git_index *index = NULL;
git_diff *diff;
git_diff_options diffopts;
const char * REPO_PATH = "path/to/repo/";
//tried to be more specific with .../repo/.git but its the same thing
char *DIR_PATH = "path/to/repo/specific/dir";
git_repository_open(&repo, REPO_PATH);
diffopts = GIT_DIFF_OPTIONS_INIT;
diffopts.flags = GIT_DIFF_FORMAT_NAME_ONLY;
//diffopts.pathspec.count = 1;
//diffopts.pathspec.strings = &DIR_PATH;
git_repository_index(&index, repo);
git_diff_index_to_workdir(&diff, repo, index, &diffopts);
size_t num_deltas = git_diff_num_deltas(diff);
//do stuff with diff
Не комментируя
diffopts.pathspec.count = 1;
diffopts.pathspec.strings = &DIR_PATH;
git_diff_num_deltas
возвращает 0.