Re: [PATCH 1/2] add--interactive: ignore mode change in 'p'atch command
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:44:26
Jeff King [off-list ref] writes:
When a path is examined in the patch subcommand, any mode changes in the file are given to use in the diff header by git-diff. If no hunks are staged, then we throw out that header. But if _any_ hunks are staged, we use the header, and the mode is changed. Since the 'p'atch command should just be dealing with hunks that are shown to the user, it makes sense to just ignore mode changes entirely. We do squirrel away the mode, though, since a future patch will allow users to select the mode update.
I agree that treating each logical block of the metainformation as if it
is a hunk on its own makes sense. Possibly, it would be useful to make
the interactive patch session look like this:
diff --git a/gostak b/doshes
old mode 100644
new mode 100755
Stage the mode change [y/n/a/d/j/J/?]?
similarity index 90%
rename from gostak
rename to doshes
Stage the name change [y/n/a/d/j/J/?]?
@@ -1,5 +1,5 @@
The
-gostak
+Gostak
distims
doshes
Stage this hunk [y/n/a/d/j/J/?]?
Handlilng the rename needs a bit more thought and enhancements not just in
your parse_diff_header() code but the way we extract the diff text (we
would need to first find renames by whole-tree diff and then feed two
(src,dst) paths in parse_diff() to obtain the text), but it should be
doable.
By the way, why was it done as a new sub called from parse_diff() and not
as a part of parse_diff() itself?