Re: feature suggestion: optimize common parts for checkout --conflict=diff3
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:56:19
Junio C Hamano [off-list ref] writes:
You could make it "1234<AB|5=AX><C|=C><DE|6=YE>789", and that is technically correct (what there were in the shared original for the conflicted part is 5 and then 6), but the representation pretends that it knows more than there actually is information, which may be somewhat misleading. All these three are equally plausible split of the original "56": 1234<AB|=AX><C|=C><DE|56=YE>789 1234<AB|5=AX><C|=C><DE|6=YE>789 1234<AB|56=AX><C|=C><DE|=YE>789 and picking one over others would be a mere heuristic. All three are technically correct representations and it is just the matter of which one is the easiest to understand. So, this is the kind of "misleading but not incorrect".
I forgot to say that youu could even do something silly like: 1234<AB|=AX><C|56=C><DE|=YE>789 ;-)
In all these cases, the middle part would look like this:
<<<<<<< ours
C
||||||| base
=======
C
>>>>>>> theirs
in order to honor the explicit "I want to view all three versions to
examine the situation" aka "--conflict=diff3" option. We cannot
reduce it to just "C". That will make it "not just misleading but
is actively wrong".I also forgot to say that the issue is the same to reduce 1234<AB|=AX><C|=C><DE|56=YE>789 to 1234<A|=A><B|=X><C|=C><D|56=Y><E|=E>789 which is unconditionally correct and then for all x reduce <x|=x> to x, yielding 1234A<B|=X>C<D|56=Y>E789 which your zealous-diff3 would do. So squashing that <C|=C> in the middle would be consistent if you take the zealous-diff3 route. But again, that is discarding the information of the original, which the user explicitly asked from "diff3 -m", i.e. show all three to examine the situation. If the user wants to operate _without_ the original, the user would have asked for "RCS merge" style output, so I am still not sure if that is a sensible mode of operation for diff3 to begin with.