157 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			157 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/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
 |