Вызов git diff для определенной директории с помощью libgit2 - PullRequest
0 голосов
/ 20 февраля 2019

Вызов 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.

1 Ответ

0 голосов
/ 20 февраля 2019

Если вы хотите ограничить diff определенной папкой, то установите pathspec опций diff для интересующих вас путей.

Например:

char *path = "path/of/the/directory/inside/repo";
diffopts.pathspec.count = 1;
diffopts.pathspec.strings = &path;
git_diff_index_to_index(&diff, repo, NULL, index, &diffopts);
...