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.
156 lines
3.1 KiB
156 lines
3.1 KiB
#!/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_might_fail git update-index --refresh -q |
|
} |
|
' |
|
|
|
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 half-broken patch from subdir of toplevel' ' |
|
( |
|
cd sub/dir && |
|
test_must_fail git apply <<-EOF |
|
--- sub/dir/file |
|
+++ sub/dir/file |
|
@@ -1,0 +1,0 @@ |
|
--- file_in_root |
|
+++ file_in_root |
|
@@ -1,0 +1,0 @@ |
|
EOF |
|
) |
|
' |
|
|
|
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_success '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
|
|
|