add--interactive: ignore unmerged entries in patch mode
commit4066bd6797a36ece00ffcb4814edc11e5ed25f68
authorJeff King <peff@peff.net>
Thu, 5 Apr 2012 12:30:08 +0000 (5 08:30 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 5 Apr 2012 16:01:03 +0000 (5 09:01 -0700)
tree9427f208af1e919824a68193443659658abed964
parent4961210b17725e3e3e975d84a5f7f718da5f218e
add--interactive: ignore unmerged entries in patch mode

When "add -p" sees an unmerged entry, it shows the combined
diff and then immediately skips the hunk. This can be
confusing in a variety of ways, depending on whether there
are other changes to stage (in which case you get the
superfluous combined diff output in between other hunks) or
not (in which case you get the combined diff and the program
exits immediately, rather than seeing "No changes").

The current behavior was not planned, and is just what the
implementation happens to do. Instead, let's explicitly
remove unmerged entries from our list of modified files, and
print a warning that we are ignoring them.

We can cheaply find which entries are unmerged by adding
"--raw" output to the "diff-files --numstat" we already run.
There is one non-obvious thing we must change when parsing
this combined output. Before this patch, when we saw a
numstat line for a file that did not have index changes, we
would create a new record with 'unchanged' in the 'INDEX'
field.  Because "--raw" comes before "--numstat", we must
move this special-case down to the raw-line case (and it is
sufficient to move it rather than handle it in both places,
since any file which has a --numstat will also have a --raw
entry).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-add--interactive.perl
t/t3701-add-interactive.sh