mirror of
https://github.com/git/git.git
synced 2024-12-15 12:53:36 +08:00
8cd052ea53
* maint-2.34: (28 commits) Git 2.34.8 Git 2.33.8 Git 2.32.7 Git 2.31.8 tests: avoid using `test_i18ncmp` Git 2.30.9 gettext: avoid using gettext if the locale dir is not present apply --reject: overwrite existing `.rej` symlink if it exists http.c: clear the 'finished' member once we are done with it clone.c: avoid "exceeds maximum object size" error with GCC v12.x range-diff: use ssize_t for parsed "len" in read_patches() range-diff: handle unterminated lines in read_patches() range-diff: drop useless "offset" variable from read_patches() t5604: GETTEXT_POISON fix, conclusion t5604: GETTEXT_POISON fix, part 1 t5619: GETTEXT_POISON fix t0003: GETTEXT_POISON fix, conclusion t0003: GETTEXT_POISON fix, part 1 t0033: GETTEXT_POISON fix http: support CURLOPT_PROTOCOLS_STR http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION ...
145 lines
3.3 KiB
Bash
Executable File
145 lines
3.3 KiB
Bash
Executable File
#!/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_exists .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
|