]> source.dussan.org Git - jgit.git/commit
ResolveMerger: choose OURS on gitlink when ignoreConflicts 20/162920/20
authorDemetr Starshov <dstarshov@google.com>
Wed, 12 Aug 2020 21:47:15 +0000 (14:47 -0700)
committerDemetr Starshov <dstarshov@google.com>
Thu, 27 Aug 2020 01:39:48 +0000 (18:39 -0700)
commitc084729f79c840e74557a5df38b5259247c4ddbd
tree60992f1f467412f684879deaa5338cc5316e47b6
parent29e998a0e6415fe2f1439be5fe28537c6d3d3dea
ResolveMerger: choose OURS on gitlink when ignoreConflicts

Option ignoreConflicts is used when a caller want to create a virtual
commit and use it in a future merge (recursive merge) or show it on
UI (e.g. Gerrit). According to contract in case of ignoreConflicts
ResolveMerger should populate only stage 0 for entries with merge
conflicts as if there is no conflict. Current implementation breaks
this contract for cases when gitlink revision is ambiguous.

Therefore, always select 'ours' when we merge in ignoreConflicts mode.
This will satisfy the contract contract, so recursive merge can
succeed, however it is an arbitrary decision, so it is not guaranteed
to select best GITLINK in all cases.

GITLINK merging is a special case of recursive merge because of
limitations of GITLINK type of entry. It can't contain more than 1 sha-1
so jgit can't write merge conflicts in place like it can with a blob.
Ideally we could signal the conflict with a special value (like
'0000...'), but that must be supported by all tooling (git fsck, c-git)."

Signed-off-by: Demetr Starshov <dstarshov@google.com>
Change-Id: Id4e9bebc8e828f7a1ef9f83259159137df477d89
org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/GitlinkMergeTest.java
org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java