diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2005-08-17 09:01:07 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-08-17 12:13:12 -0700 |
commit | 35cc4bcd10862db190df9685b7ad221f2a25404f (patch) | |
tree | 58597968f13ac962d1607c6c7c0cc2beedd71657 | |
parent | [PATCH] Change git-branch to list branches (diff) | |
download | tgif-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>
-rw-r--r-- | apply.c | 8 | ||||
-rwxr-xr-x | t/t4102-apply-rename.sh | 37 |
2 files changed, 43 insertions, 2 deletions
@@ -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 0000000000..f591a5681d --- /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 |