Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 157 lines (141 sloc) 3.224 kb
#!/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
Jump to Line
Something went wrong with that request. Please try again.