From 35cc4bcd10862db190df9685b7ad221f2a25404f Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 17 Aug 2005 09:01:07 +0200 Subject: [PATCH] [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 --- apply.c | 8 ++++++-- t/t4102-apply-rename.sh | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100755 t/t4102-apply-rename.sh diff --git a/apply.c b/apply.c index 81607c0f..7c1a8411 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 00000000..f591a568 --- /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 -- 2.11.0