git-gui: Improve the display of merge conflicts.
authorShawn O. Pearce <spearce@spearce.org>
Sun, 21 Jan 2007 17:30:51 +0000 (12:30 -0500)
committerShawn O. Pearce <spearce@spearce.org>
Mon, 22 Jan 2007 03:47:53 +0000 (22:47 -0500)
commit3b4db3c1a3b9be66b46d8bd64560ee3f14f1084d
tree4c764402619808c1815dd4ab3fb549320fa5ebbb
parent82cb8706bb9f4f43c72e0228ad33d91c29448f3f
git-gui: Improve the display of merge conflicts.

If a file has a merge conflict we want it to show up in the 'Changed
But Not Updated' file list rather than the 'Changes To Be Committed'
file list.  This way the user can mostly ignore the left side (the
HEAD<->index comparsion) while resolving a merge and instead focus
on the merge conflicts, which are just shown on the right hand side.

This requires detecting the U state in the index side and drawing
it as though it were _, then forcing the working directory side to
have a U state.  We have to delay this until presentation time as
we don't want to change our internal state data to be different
from what Git is telling us (I tried, the patch for that was ugly
and didn't work).

When showing a working directory diff and its a merge conflict we
don't want to use diff-files as this would wind up showing any
automatically merged hunks obtained from MERGE_HEAD in the diff.
These are not usually very interesting as they were completed by
the system.  Instead we just want to see the conflicts.  Fortunately
the diff porcelain-ish frontend (aka 'git diff') detects the case of
an unmerged file and generates a --cc diff against HEAD and MERGE_HEAD.
So we now force any working directory diff with an index state of 'U'
to go through that difference path.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
git-gui.sh