tests: try git apply from subdir of toplevel

Make sure git apply can apply patches with paths relative to the
toplevel of a work tree, a subdirectory, or within the repository
metadata directory.

Relative paths are broken for most commands when run from a
subdirectory of $GIT_DIR, "git apply" being no exception.  The other
tests are meant to keep the demonstration of that company.

Based on a test by Duy.

Cc: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jonathan Nieder 2010-07-24 06:18:38 -05:00 коммит произвёл Junio C Hamano
Родитель fc688759b9
Коммит 9f41a91a7d
1 изменённых файлов: 141 добавлений и 0 удалений

141
t/t4111-apply-subdir.sh Executable file
Просмотреть файл

@ -0,0 +1,141 @@
#!/bin/sh
test_description='patching from inconvenient places'
. ./test-lib.sh
test_expect_success 'setup' '
cat >patch <<-\EOF &&
diff file.orig file
--- a/file.orig
+++ b/file
@@ -1 +1,2 @@
1
+2
EOF
patch="$(pwd)/patch" &&
echo 1 >preimage &&
printf "%s\n" 1 2 >postimage &&
echo 3 >other &&
test_tick &&
git commit --allow-empty -m basis
'
test_expect_success 'setup: subdir' '
reset_subdir() {
git reset &&
mkdir -p sub/dir/b &&
mkdir -p objects &&
cp "$1" file &&
cp "$1" objects/file &&
cp "$1" sub/dir/file &&
cp "$1" sub/dir/b/file &&
git add file sub/dir/file sub/dir/b/file objects/file &&
cp "$2" file &&
cp "$2" sub/dir/file &&
cp "$2" sub/dir/b/file &&
cp "$2" objects/file
}
'
test_expect_success 'apply from subdir of toplevel' '
cp postimage expected &&
reset_subdir other preimage &&
(
cd sub/dir &&
git apply "$patch"
) &&
test_cmp expected sub/dir/file
'
test_expect_success 'apply --cached from subdir of toplevel' '
cp postimage expected &&
cp other expected.working &&
reset_subdir preimage other &&
(
cd sub/dir &&
git apply --cached "$patch"
) &&
git show :sub/dir/file >actual &&
test_cmp expected actual &&
test_cmp expected.working sub/dir/file
'
test_expect_success 'apply --index from subdir of toplevel' '
cp postimage expected &&
reset_subdir preimage other &&
(
cd sub/dir &&
test_must_fail git apply --index "$patch"
) &&
reset_subdir other preimage &&
(
cd sub/dir &&
test_must_fail git apply --index "$patch"
) &&
reset_subdir preimage preimage &&
(
cd sub/dir &&
git apply --index "$patch"
) &&
git show :sub/dir/file >actual &&
test_cmp expected actual &&
test_cmp expected sub/dir/file
'
test_expect_success 'apply from .git dir' '
cp postimage expected &&
cp preimage .git/file &&
cp preimage .git/objects/file
(
cd .git &&
git apply "$patch"
) &&
test_cmp expected .git/file
'
test_expect_failure 'apply from subdir of .git dir' '
cp postimage expected &&
cp preimage .git/file &&
cp preimage .git/objects/file
(
cd .git/objects &&
git apply "$patch"
) &&
test_cmp expected .git/objects/file
'
test_expect_success 'apply --cached from .git dir' '
cp postimage expected &&
cp other expected.working &&
cp other .git/file &&
reset_subdir preimage other &&
(
cd .git &&
git apply --cached "$patch"
) &&
git show :file >actual &&
test_cmp expected actual &&
test_cmp expected.working file &&
test_cmp expected.working .git/file
'
test_expect_success 'apply --cached from subdir of .git dir' '
cp postimage expected &&
cp preimage expected.subdir &&
cp other .git/file &&
cp other .git/objects/file &&
reset_subdir preimage other &&
(
cd .git/objects &&
git apply --cached "$patch"
) &&
git show :file >actual &&
git show :objects/file >actual.subdir &&
test_cmp expected actual &&
test_cmp expected.subdir actual.subdir
'
test_done