aboutsummaryrefslogtreecommitdiff
path: root/apply.c
diff options
context:
space:
mode:
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>2005-08-17 09:01:07 +0200
committerJunio C Hamano <junkio@cox.net>2005-08-17 12:13:12 -0700
commit35cc4bcd10862db190df9685b7ad221f2a25404f (patch)
tree58597968f13ac962d1607c6c7c0cc2beedd71657 /apply.c
parente4aec26f8068100ae7b496b904d013943626d8c2 (diff)
downloadgit-35cc4bcd10862db190df9685b7ad221f2a25404f.tar.gz
git-35cc4bcd10862db190df9685b7ad221f2a25404f.tar.xz
[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>
Diffstat (limited to 'apply.c')
-rw-r--r--apply.c8
1 files changed, 6 insertions, 2 deletions
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) {