The usual "git diff" when seeing a file turning into a directory showed a patchset to remove the file and create all files in the directory, but "git diff --no-index" simply refused to work. Also, when asked to compare a file and a directory, imitate POSIX "diff" and compare the file with the file with the same name in the directory, instead of refusing to run. * jc/diff-no-index-d-f: diff-no-index: align D/F handling with that of normal Git diff-no-index: DWIM "diff D F" into "diff D/F F"
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
test_description='diff --no-index'
 | 
						|
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
test_expect_success 'setup' '
 | 
						|
	mkdir a &&
 | 
						|
	mkdir b &&
 | 
						|
	echo 1 >a/1 &&
 | 
						|
	echo 2 >a/2 &&
 | 
						|
	git init repo &&
 | 
						|
	echo 1 >repo/a &&
 | 
						|
	mkdir -p non/git &&
 | 
						|
	echo 1 >non/git/a &&
 | 
						|
	echo 1 >non/git/b
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'git diff --no-index directories' '
 | 
						|
	test_expect_code 1 git diff --no-index a b >cnt &&
 | 
						|
	test_line_count = 14 cnt
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'git diff --no-index relative path outside repo' '
 | 
						|
	(
 | 
						|
		cd repo &&
 | 
						|
		test_expect_code 0 git diff --no-index a ../non/git/a &&
 | 
						|
		test_expect_code 0 git diff --no-index ../non/git/a ../non/git/b
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'git diff --no-index with broken index' '
 | 
						|
	(
 | 
						|
		cd repo &&
 | 
						|
		echo broken >.git/index &&
 | 
						|
		git diff --no-index a ../non/git/a
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'git diff outside repo with broken index' '
 | 
						|
	(
 | 
						|
		cd repo &&
 | 
						|
		git diff ../non/git/a ../non/git/b
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'git diff --no-index executed outside repo gives correct error message' '
 | 
						|
	(
 | 
						|
		GIT_CEILING_DIRECTORIES=$TRASH_DIRECTORY/non &&
 | 
						|
		export GIT_CEILING_DIRECTORIES &&
 | 
						|
		cd non/git &&
 | 
						|
		test_must_fail git diff --no-index a 2>actual.err &&
 | 
						|
		echo "usage: git diff --no-index <path> <path>" >expect.err &&
 | 
						|
		test_cmp expect.err actual.err
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'diff D F and diff F D' '
 | 
						|
	(
 | 
						|
		cd repo &&
 | 
						|
		echo in-repo >a &&
 | 
						|
		echo non-repo >../non/git/a &&
 | 
						|
		mkdir sub &&
 | 
						|
		echo sub-repo >sub/a &&
 | 
						|
 | 
						|
		test_must_fail git diff --no-index sub/a ../non/git/a >expect &&
 | 
						|
		test_must_fail git diff --no-index sub/a ../non/git/ >actual &&
 | 
						|
		test_cmp expect actual &&
 | 
						|
 | 
						|
		test_must_fail git diff --no-index a ../non/git/a >expect &&
 | 
						|
		test_must_fail git diff --no-index a ../non/git/ >actual &&
 | 
						|
		test_cmp expect actual &&
 | 
						|
 | 
						|
		test_must_fail git diff --no-index ../non/git/a a >expect &&
 | 
						|
		test_must_fail git diff --no-index ../non/git a >actual &&
 | 
						|
		test_cmp expect actual
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'turning a file into a directory' '
 | 
						|
	(
 | 
						|
		cd non/git &&
 | 
						|
		mkdir d e e/sub &&
 | 
						|
		echo 1 >d/sub &&
 | 
						|
		echo 2 >e/sub/file &&
 | 
						|
		printf "D\td/sub\nA\te/sub/file\n" >expect &&
 | 
						|
		test_must_fail git diff --no-index --name-status d e >actual &&
 | 
						|
		test_cmp expect actual
 | 
						|
	)
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |