libgit2 - разность двух текстовых блобов

0

Я хотел бы запрограммировать что-то похожее на "git diff blobish blobish" с libgit2

вот мой код до сих пор

git_repository* repo;
git_repository_open(&repo, path/to/repository);
git_blob *oldBlob, *newBlob;
git_oid old_oid, new_oid;
const char* oldBlobHash = "92fd12351a4e4d6f10d30516149c624e6b9e3dc9";
git_oid_fromstr(&old_oid, oldBlobHash);
git_blob_lookup(&oldBlob, repo, &old_oid);
const char* newBlobHash = "80bf2770cdbb9580bc040d49775fccd405f534dc";
git_oid_fromstr(&new_oid, newBlobHash);
git_blob_lookup(&newBlob, repo, &new_oid);

git_diff_blobs(oldBlob,
        NULL,
        newBlob,
        NULL,
        NULL,?, ?, ?, ?); //what should I put in the question marks?

.... // how do I continue from here?

когда я запускаю "git diff 92fd1235 80bf2770" в командной строке, которую я получаю

diff --git a/92fd12351a4e4d6f10d30516149c624e6b9e3dc9 b/80bf2770cdbb9580bc040d49775fccd405f534dc
index 92fd123..80bf277 100644
--- a/92fd12351a4e4d6f10d30516149c624e6b9e3dc9
+++ b/80bf2770cdbb9580bc040d49775fccd405f534dc
@@ -1 +1 @@
-file1 v2
\ No newline at end of file
+file1 v4
\ No newline at end of file

как я могу заполнить свой код, чтобы получить тот же результат, что и git?

Теги:
libgit2

1 ответ

3
Лучший ответ

git_diff - это жанровый интерфейс для линейных различий, поэтому вы можете использовать свои функции для работы с отдельными строками и файлами.

Если вы ищете что-то, что дает вам текстовый результат, созданный git diff и аналогичными утилитами, было бы проще пройти через git_patch API.

Вы можете позвонить

git_patch_from_blobs()

который предоставит вам объект git_patch который вы затем можете передать

git_patch_to_buf()

который выведет содержимое в унифицированном формате diff на git_buf который вы можете использовать для печати на любом файле/экране, который вы хотите.

Вы также можете сделать это вручную, предоставив некоторые обратные вызовы, которые добавили бы информацию в какую-либо структуру данных по вашему выбору, которую затем можно преобразовать в унифицированный diff или бок о бок или что-то еще, но для случая пользователя, который вы упомянули, API-интерфейс патча намного проще.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню