Make git replay print detailed conflict information
At the moment Gitaly uses git-merge-tree to implement UserRebase. When this command runs into a conflict, it shows something like this:
$ git merge-tree main other
3f4097153c43f17c0000f0fb18cbe09fb5e4a847
100644 9c59e24b8393179a5d712de4f990178df5734d99 1 a
100644 ef399f1933d46d8397ee58564d931a6c23f4a213 2 a
100644 e019be006cf33489e2d0177a3837a2384eddebc5 3 a
100644 4cf5aa5f9a644263dbe3d6e78bcbef45487a802c 2 b
100644 ce013625030ba8dba906f756967f9e9ca394464a 3 b
Auto-merging a
CONFLICT (content): Merge conflict in a
Auto-merging b
CONFLICT (add/add): Merge conflict in b
In that output we see the <mode> <oid> <side> <path> for each conflict. The <side> is where this version of that path lives. 1 is the merge-base and 2 and 3 are the branches we're trying to merge.
Gitaly uses this output to fill MergeTreeConflictError and from that RebaseConflictError and eventually gitalypb.UserRebaseConfirmableError_RebaseConflict.
When git-replay runs into a conflict, it promptly die()s.
We should make git-replay print more details about the conflict.
Edited by Toon Claes