You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
3.3 KiB
144 lines
3.3 KiB
#!/bin/sh |
|
# |
|
# Copyright (c) 2005 Junio C Hamano |
|
# |
|
|
|
test_description='git apply symlinks and partial files |
|
|
|
' |
|
|
|
TEST_PASSES_SANITIZE_LEAK=true |
|
. ./test-lib.sh |
|
|
|
test_expect_success setup ' |
|
|
|
test_ln_s_add path1/path2/path3/path4/path5 link1 && |
|
git commit -m initial && |
|
|
|
git branch side && |
|
|
|
rm -f link? && |
|
|
|
test_ln_s_add htap6 link1 && |
|
git commit -m second && |
|
|
|
git diff-tree -p HEAD^ HEAD >patch && |
|
git apply --stat --summary patch |
|
|
|
' |
|
|
|
test_expect_success SYMLINKS 'apply symlink patch' ' |
|
|
|
git checkout side && |
|
git apply patch && |
|
git diff-files -p >patched && |
|
test_cmp patch patched |
|
|
|
' |
|
|
|
test_expect_success 'apply --index symlink patch' ' |
|
|
|
git checkout -f side && |
|
git apply --index patch && |
|
git diff-index --cached -p HEAD >patched && |
|
test_cmp patch patched |
|
|
|
' |
|
|
|
test_expect_success 'symlink setup' ' |
|
ln -s .git symlink && |
|
git add symlink && |
|
git commit -m "add symlink" |
|
' |
|
|
|
test_expect_success SYMLINKS 'symlink escape when creating new files' ' |
|
test_when_finished "git reset --hard && git clean -dfx" && |
|
|
|
cat >patch <<-EOF && |
|
diff --git a/symlink b/renamed-symlink |
|
similarity index 100% |
|
rename from symlink |
|
rename to renamed-symlink |
|
-- |
|
diff --git /dev/null b/renamed-symlink/create-me |
|
new file mode 100644 |
|
index 0000000..039727e |
|
--- /dev/null |
|
+++ b/renamed-symlink/create-me |
|
@@ -0,0 +1,1 @@ |
|
+busted |
|
EOF |
|
|
|
test_must_fail git apply patch 2>stderr && |
|
cat >expected_stderr <<-EOF && |
|
error: affected file ${SQ}renamed-symlink/create-me${SQ} is beyond a symbolic link |
|
EOF |
|
test_cmp expected_stderr stderr && |
|
test_path_is_missing .git/create-me |
|
' |
|
|
|
test_expect_success SYMLINKS 'symlink escape when modifying file' ' |
|
test_when_finished "git reset --hard && git clean -dfx" && |
|
touch .git/modify-me && |
|
|
|
cat >patch <<-EOF && |
|
diff --git a/symlink b/renamed-symlink |
|
similarity index 100% |
|
rename from symlink |
|
rename to renamed-symlink |
|
-- |
|
diff --git a/renamed-symlink/modify-me b/renamed-symlink/modify-me |
|
index 1111111..2222222 100644 |
|
--- a/renamed-symlink/modify-me |
|
+++ b/renamed-symlink/modify-me |
|
@@ -0,0 +1,1 @@ |
|
+busted |
|
EOF |
|
|
|
test_must_fail git apply patch 2>stderr && |
|
cat >expected_stderr <<-EOF && |
|
error: renamed-symlink/modify-me: No such file or directory |
|
EOF |
|
test_cmp expected_stderr stderr && |
|
test_must_be_empty .git/modify-me |
|
' |
|
|
|
test_expect_success SYMLINKS 'symlink escape when deleting file' ' |
|
test_when_finished "git reset --hard && git clean -dfx && rm .git/delete-me" && |
|
touch .git/delete-me && |
|
|
|
cat >patch <<-EOF && |
|
diff --git a/symlink b/renamed-symlink |
|
similarity index 100% |
|
rename from symlink |
|
rename to renamed-symlink |
|
-- |
|
diff --git a/renamed-symlink/delete-me b/renamed-symlink/delete-me |
|
deleted file mode 100644 |
|
index 1111111..0000000 100644 |
|
EOF |
|
|
|
test_must_fail git apply patch 2>stderr && |
|
cat >expected_stderr <<-EOF && |
|
error: renamed-symlink/delete-me: No such file or directory |
|
EOF |
|
test_cmp expected_stderr stderr && |
|
test_path_is_file .git/delete-me |
|
' |
|
|
|
test_expect_success SYMLINKS '--reject removes .rej symlink if it exists' ' |
|
test_when_finished "git reset --hard && git clean -dfx" && |
|
|
|
test_commit file && |
|
echo modified >file.t && |
|
git diff -- file.t >patch && |
|
echo modified-again >file.t && |
|
|
|
ln -s foo file.t.rej && |
|
test_must_fail git apply patch --reject 2>err && |
|
test_i18ngrep "Rejected hunk" err && |
|
test_path_is_missing foo && |
|
test_path_is_file file.t.rej |
|
' |
|
|
|
test_done
|
|
|