Jonathan Nieder wrote:
Junio C Hamano wrote:
quoted
+test_expect_success 'apply (-p2) diff, mode change only' '
+ cat >patch.chmod <<-\EOF &&
+ diff --git a/sub/file1 b/sub/file1
+ old mode 100644
+ new mode 100755
+ EOF
+ chmod 644 file1 &&
+ git apply -p2 patch.chmod &&
+ test -x file1
I had thought -p was only supposed to apply to traditional patches.
Maybe a documentation update would avoid confusion?
-p<n>
Remove <n> leading slashes from traditional diff paths.
The default is 1.
Currently, if the patch is mode-change only then the filename is taken
from the line "diff --git ...". There is a function git_header_name()
that extracts that name. This function could be a lot simpler and I'm
working on that, but meanwhile I'd like to provide a quick fix.
Right now, if at least one of the filenames is double quoted then -p
greater than 1 works correctly. The only failing case is when both names
are unquoted and my patch fixes that.
This work with -p2:
diff --git "a/sub/file1" b/sub/file1
old mode 100644
new mode 100755
diff --git a/sub/file1 "b/sub/file1"
old mode 100644
new mode 100755
diff --git "a/sub/file1" "b/sub/file1"
old mode 100644
new mode 100755
This one doesn't:
diff --git a/sub/file1 b/sub/file1
old mode 100644
new mode 100755
My patch fixes the later case.
There is a similar issue with renames and I'm working on that.
Meanwhile, I'd like to know what do you think of that.
PS: Hamano's test 'apply (-p2) diff, mode change only' fails without my
patch and passes with it. I'll provide a new patch including the test.