how to print diff files in libgit2?

守給你的承諾、 提交于 2019-12-11 05:14:18

问题


I tried this

string path = "path/to/my/repo";
git_libgit2_init();
const char * REPO_PATH = path.c_str();
git_repository * repo = nullptr;
git_repository_open(&repo, REPO_PATH);

git_diff_options diffopts = GIT_DIFF_OPTIONS_INIT;
git_diff *diff;
diffopts.flags = GIT_CHECKOUT_NOTIFY_CONFLICT;
git_diff_index_to_workdir(&diff, repo, NULL, &diffopts);
git_diff_format_t format = GIT_DIFF_FORMAT_NAME_ONLY;

if (0!=git_diff_print(diff, format, NULL,NULL)) cerr << "git_diff_print() failed" << endl;

git_diff_free(diff);
git_repository_free(repo);
git_libgit2_shutdown();

but I don't know what to send as a 3th and 4th parameter to function git_diff_print(), some ideas?

in libgit2 API, there is such declaration of this function

git_diff_print(git_diff *diff, git_diff_format_t format, git_diff_line_cb print_cb, void *payload);

but I don't know what are that last 2 parameters and how to send them to this function

When I try this example :

https://libgit2.github.com/libgit2/ex/HEAD/diff.html#git_diff_print-9

,it's not working for me


回答1:


Finally, I got the information another way, there is my solution :

git_libgit2_init();
const char * REPO_PATH = path.c_str();
git_repository * repo = nullptr;
git_repository_open(&repo, REPO_PATH);

git_diff_options diffopts = GIT_DIFF_OPTIONS_INIT;
git_diff *diff;
diffopts.flags = GIT_CHECKOUT_NOTIFY_CONFLICT;
git_diff_index_to_workdir(&diff, repo, NULL, &diffopts);

size_t num_deltas = git_diff_num_deltas(diff);
if (num_deltas != 0){
    const git_diff_delta *delta = git_diff_get_delta(diff, 0);
    int i = 0;
    cerr << "Your local changes to the following files would be overwritten by checkout : " << endl;

    while (i<num_deltas) {
        delta = git_diff_get_delta(diff, i);
        git_diff_file file = delta->new_file;
        cerr << "\t" << file.path << endl;
        i++;

    }
    cerr << "Please commit your changes before you switch branches. " << endl;

}
else cout << "All files OK, can checkout now" << endl;

git_diff_free(diff);
git_repository_free(repo);
git_libgit2_shutdown();


来源:https://stackoverflow.com/questions/43752123/how-to-print-diff-files-in-libgit2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!