Я знаю, как сгенерировать файл, содержащий diff3: просто скопируйте после теста diff3.
Предположим, что diff3 будет содержать:
context1
<<<<<<< master
ours
||||||| base
base
=======
theirs
>>>>>>> topic
context2
Что я хочу, чтобы получить следующую карту:
line origin
-------------------
context1 -> CONTEXT
ours -> OURS
base -> BASE
theirs -> THEIRS
context2 -> CONTEXT
возможно, в цикле обратного вызова, как это делается для строк сравнения на git_diff_print, который передает git_diff_line
обратному вызову, который содержит атрибут origin
со значениями типа GIT_DIFF_LINE_CONTEXT
Конечно, я мог бы разобрать файл и поискать маркеры конфликта <<<
, но это привело бы к неоднозначности, если бы сам файл содержал маркеры, поэтому я не хочу этого делать.
В качестве альтернативы, если бы я мог получить составной diff (формат diff по умолчанию во время разрешения конфликта слияния), как:
context1
++<<<<<<< master
+ours
++||||||| base
++base
++=======
+ theirs
++>>>>>>> topic
context2
это также было бы возможным решением, так как в этом формате не может быть двусмысленности из-за символов +
и пробела. Это, однако, было бы менее хорошо, так как мне все равно пришлось бы вручную анализировать вещи, для которых libgit2 уже имеет проанализированную информацию, которую он использовал для создания файла в первую очередь.
Я хочу сделать это, потому что внедряю инструмент разрешения слияний для GitLab: https://github.com/gitlabhq/gitlabhq/pull/7345
Изменить
Поскольку это кажется невозможным, я сделал предложение с интерфейсом по адресу: https://github.com/libgit2/libgit2/issues/2568