зеркало из https://github.com/microsoft/git.git
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:
Родитель
fc688759b9
Коммит
9f41a91a7d
|
@ -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
|
Загрузка…
Ссылка в новой задаче