From: Johannes Schindelin Date: Wed, 17 Aug 2005 07:01:07 +0000 (+0200) Subject: [PATCH] When copying or renaming, keep the mode, please X-Git-Tag: v0.99.5~16^2~5 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=35cc4bcd10862db190df9685b7ad221f2a25404f;p=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 Signed-off-by: Junio C Hamano --- diff --git a/apply.c b/apply.c index 81607c0fb..7c1a8411f 100644 --- a/apply.c +++ b/apply.c @@ -1043,8 +1043,12 @@ static int check_patch(struct patch *patch) return error("%s: already exists in working directory", new_name); if (errno != ENOENT) return error("%s: %s", new_name, strerror(errno)); - if (!patch->new_mode) - patch->new_mode = S_IFREG | 0644; + if (!patch->new_mode) { + if (patch->is_new) + patch->new_mode = S_IFREG | 0644; + else + patch->new_mode = patch->old_mode; + } } if (new_name && old_name) { diff --git a/t/t4102-apply-rename.sh b/t/t4102-apply-rename.sh new file mode 100755 index 000000000..f591a5681 --- /dev/null +++ b/t/t4102-apply-rename.sh @@ -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