зеркало из https://github.com/microsoft/git.git
[PATCH] When copying or renaming, keep the mode, please
Without this patch, git-apply does not retain the mode when renaming or copying files. [jc: Good catch, Johannes. I added a test case to demonstrate the breackage in the original.] Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
e4aec26f80
Коммит
35cc4bcd10
8
apply.c
8
apply.c
|
@ -1043,8 +1043,12 @@ static int check_patch(struct patch *patch)
|
||||||
return error("%s: already exists in working directory", new_name);
|
return error("%s: already exists in working directory", new_name);
|
||||||
if (errno != ENOENT)
|
if (errno != ENOENT)
|
||||||
return error("%s: %s", new_name, strerror(errno));
|
return error("%s: %s", new_name, strerror(errno));
|
||||||
if (!patch->new_mode)
|
if (!patch->new_mode) {
|
||||||
patch->new_mode = S_IFREG | 0644;
|
if (patch->is_new)
|
||||||
|
patch->new_mode = S_IFREG | 0644;
|
||||||
|
else
|
||||||
|
patch->new_mode = patch->old_mode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_name && old_name) {
|
if (new_name && old_name) {
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2005 Junio C Hamano
|
||||||
|
#
|
||||||
|
|
||||||
|
test_description='git-apply handling copy/rename patch.
|
||||||
|
|
||||||
|
'
|
||||||
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
# setup
|
||||||
|
|
||||||
|
cat >test-patch <<\EOF
|
||||||
|
diff --git a/foo b/bar
|
||||||
|
similarity index 47%
|
||||||
|
copy from foo
|
||||||
|
copy to bar
|
||||||
|
--- a/foo
|
||||||
|
+++ b/bar
|
||||||
|
@@ -1 +1 @@
|
||||||
|
-This is foo
|
||||||
|
+This is bar
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo 'This is foo' >foo
|
||||||
|
chmod +x foo
|
||||||
|
|
||||||
|
test_expect_success setup \
|
||||||
|
'git-update-cache --add foo'
|
||||||
|
|
||||||
|
test_expect_success apply \
|
||||||
|
'git-apply --index --stat --summary --apply test-patch'
|
||||||
|
|
||||||
|
test_expect_success validate \
|
||||||
|
'test -f bar && ls -l bar | grep "^-..x..x..x"'
|
||||||
|
|
||||||
|
test_done
|
Загрузка…
Ссылка в новой задаче