Another merge test case from the kernel tree.
- From
Junio C Hamano <junkio@cox.net>
- Date
- Sep 14, 2005, 05:56 UTC
- Message-ID
- <7vpsrcqjj6.fsf_-_@assigned-by-dhcp.cox.net>
- In-Reply-To
- <7vzmqk2u1w.fsf_-_@assigned-by-dhcp.cox.net>
One more merge test case you would be interested. What's most interesting about this commit is that it has three merge bases, not two.
commit c820884e4f35a40f88b787c3891a23d629ef6bfd Merge: aa2dca4563b0629ecd9d9994dfdf39f29ff1b43f 357d596bd552ad157a906289ab13ea6ba7e66e3d Author: Tony Luck <tony.luck@intel.com> Date: Sun Sep 11 18:35:10 2005 -0700
Auto-update from upstream
Attempt to reproduce this commit is somewhat troubling. The 'stupid' strategy and git-resolve resolves cleanly and Tony's commit matches what 'git-resolve' does (obviously that is the algorithm everybody uses).
But the 'resolve' strategy says this is case #16 (and resolves this case differently but I think it is just by luck). This indicates that Tony _might_ have committed what he did not wanted to. The path involved is arch/mips/kernel/offset.c.
[Tony, I think you've seen this one once in different
commit. The terminology "case #16" means your merge has
more than one merge base candidates: Ancestor#1 -- -- Your tree
X
Ancestor#2 -- -- Other tree and when a path in your tree matches Ancestor #i and the
same path in the other tree matches Ancestor #j (i!=j). The default git merge algorithm picks a single ancestor that
gives the least number of conflicting paths during the
merge, and compares your tree and other tree against it and
pick the one that changed since that ancestor if only one
side changed that path. But in case #16, depending on which
ancestor we pick, the result may come from your tree or
other tree, and obviously we do a wrong thing with 50%
probability. Thie _could_ indicate that you _might_ be losing a reverted
you made in your line of development being overwritten by
what the other tree did.]BTW, Fredrik, the 'recursive' merge dies with this:
Trying merge strategy recursive...
Merging 357d596bd552ad157a906289ab13ea6ba7e66e3d with aa2dca4563b0629ecd9d9994dfdf39f29ff1b43f
Merging:
357d596bd552ad157a906289ab13ea6ba7e66e3d Merge branch 'release' of master.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6
aa2dca4563b0629ecd9d9994dfdf39f29ff1b43f Manual merge of kernel/sched.c and arch/ia64/kernel/mca_asm.S
found 3 common ancestor(s):
a1cddb88920b915eaba10712ecfd0fc698b00a22 [IA64-SGI] Add new vendor-specific SAL calls for:
6cf07a8cc86a0b471466c7fe45892f7ef434015b [IA64] Fix nasty VMLPT problem...
49a28cc8fd26f5317c47a9aeb2bdd1c33e21738e [IA64] MCA/INIT: remove obsolete unwind code
Merging:
a1cddb88920b915eaba10712ecfd0fc698b00a22 [IA64-SGI] Add new vendor-specific SAL calls for:
6cf07a8cc86a0b471466c7fe45892f7ef434015b [IA64] Fix nasty VMLPT problem...
found 1 common ancestor(s):
d8971fcb702e24d1e22c77fd1772f182ffee87e3 [INET]: compile errors when DEBUG is defined
Traceback (most recent call last):
File "/home/junio/bin/Linux/git-merge-recursive", line 429, in ?
firstBranch, secondBranch, graph)
File "/home/junio/bin/Linux/git-merge-recursive", line 54, in merge
graph, callDepth+1)
File "/home/junio/bin/Linux/git-merge-recursive", line 62, in merge
runProgram(['git-read-tree', h1.tree()])
File "/home/junio/share/git-core/python/gitMergeCommon.py", line 93, in runProgram
raise ProgramError(progStr, out)
ProgramError: git-read-tree 1d20af805193ab9982a48cb4c828c0f6af034c6c: fatal: failed to unpack tree object 1d20af805193ab9982a48cb4c828c0f6af034c6c