Я пишу приложение для Mac, которое позволит мне отображать только те строки, которые содержат определенный текст в качестве подстроки. По сути, я пытаюсь создать ту функцию, которую исходное дерево предлагает своим пользователям. Постановка выбранных строк в куски. Моя логика выбора заключалась бы в том, чтобы выбрать строки, содержащие определенный текст, в качестве подстроки. Но я не мог понять, как этого добиться с помощью libgit2.
Я инициализировал репо следующим образом
int error = git_repository_open(&repo, gitRepoString.UTF8String);
Затем я создаю diff-индекс для рабочего каталога, как показано ниже.
error = git_diff_index_to_workdir(&diff, repo, NULL, NULL);
После этого я могу перебирать куски и строки в каждом куске, используя функции обратного вызова, как показано ниже.
error = git_diff_foreach(diff, each_file_cb,
each_binary_cb,
each_hunk_cb,
each_line_cb,
&d);
и обратные вызовы вызываются для каждой строки в фрагменте.
int each_line_cb(const git_diff_delta *delta,
const git_diff_hunk *hunk,
const git_diff_line *line,
void *payload)
{
return 0;
}
Теперь я понимаю, что мне нужно как-то создать патч и добавить в патч только нужные строки в diff.
Может ли кто-нибудь направить в правильном направлении? Если libgit2 еще не позволяет это сделать, есть ли какая-либо другая библиотека, которая может позволить мне это сделать. Также исходное дерево atlassian, похоже, использует libgit2 под капотом. Как они могли это реализовать?
Кстати, git CLI позволяет сделать это с помощью исправлений, как указано в этом ответе. https://stackoverflow.com/a/32311872/569497