98 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| #
 | |
| # Copyright (c) 2006 Junio C Hamano
 | |
| #
 | |
| 
 | |
| test_description='Binary diff and apply
 | |
| '
 | |
| 
 | |
| . ./test-lib.sh
 | |
| 
 | |
| test_expect_success 'prepare repository' \
 | |
| 	'echo AIT >a && echo BIT >b && echo CIT >c && echo DIT >d &&
 | |
| 	 git update-index --add a b c d &&
 | |
| 	 echo git >a &&
 | |
| 	 cat "$TEST_DIRECTORY"/test4012.png >b &&
 | |
| 	 echo git >c &&
 | |
| 	 cat b b >d'
 | |
| 
 | |
| cat > expected <<\EOF
 | |
|  a |    2 +-
 | |
|  b |  Bin
 | |
|  c |    2 +-
 | |
|  d |  Bin
 | |
|  4 files changed, 2 insertions(+), 2 deletions(-)
 | |
| EOF
 | |
| test_expect_success 'diff without --binary' \
 | |
| 	'git diff | git apply --stat --summary >current &&
 | |
| 	 test_cmp expected current'
 | |
| 
 | |
| test_expect_success 'diff with --binary' \
 | |
| 	'git diff --binary | git apply --stat --summary >current &&
 | |
| 	 test_cmp expected current'
 | |
| 
 | |
| # apply needs to be able to skip the binary material correctly
 | |
| # in order to report the line number of a corrupt patch.
 | |
| test_expect_success 'apply detecting corrupt patch correctly' \
 | |
| 	'git diff | sed -e 's/-CIT/xCIT/' >broken &&
 | |
| 	 if git apply --stat --summary broken 2>detected
 | |
| 	 then
 | |
| 		echo unhappy - should have detected an error
 | |
| 		(exit 1)
 | |
| 	 else
 | |
| 		echo happy
 | |
| 	 fi &&
 | |
| 	 detected=`cat detected` &&
 | |
| 	 detected=`expr "$detected" : "fatal.*at line \\([0-9]*\\)\$"` &&
 | |
| 	 detected=`sed -ne "${detected}p" broken` &&
 | |
| 	 test "$detected" = xCIT'
 | |
| 
 | |
| test_expect_success 'apply detecting corrupt patch correctly' \
 | |
| 	'git diff --binary | sed -e 's/-CIT/xCIT/' >broken &&
 | |
| 	 if git apply --stat --summary broken 2>detected
 | |
| 	 then
 | |
| 		echo unhappy - should have detected an error
 | |
| 		(exit 1)
 | |
| 	 else
 | |
| 		echo happy
 | |
| 	 fi &&
 | |
| 	 detected=`cat detected` &&
 | |
| 	 detected=`expr "$detected" : "fatal.*at line \\([0-9]*\\)\$"` &&
 | |
| 	 detected=`sed -ne "${detected}p" broken` &&
 | |
| 	 test "$detected" = xCIT'
 | |
| 
 | |
| test_expect_success 'initial commit' 'git commit -a -m initial'
 | |
| 
 | |
| # Try removal (b), modification (d), and creation (e).
 | |
| test_expect_success 'diff-index with --binary' \
 | |
| 	'echo AIT >a && mv b e && echo CIT >c && cat e >d &&
 | |
| 	 git update-index --add --remove a b c d e &&
 | |
| 	 tree0=`git write-tree` &&
 | |
| 	 git diff --cached --binary >current &&
 | |
| 	 git apply --stat --summary current'
 | |
| 
 | |
| test_expect_success 'apply binary patch' \
 | |
| 	'git reset --hard &&
 | |
| 	 git apply --binary --index <current &&
 | |
| 	 tree1=`git write-tree` &&
 | |
| 	 test "$tree1" = "$tree0"'
 | |
| 
 | |
| nul_to_q() {
 | |
| 	perl -pe 'y/\000/Q/'
 | |
| }
 | |
| 
 | |
| test_expect_success 'diff --no-index with binary creation' '
 | |
| 	echo Q | q_to_nul >binary &&
 | |
| 	(: hide error code from diff, which just indicates differences
 | |
| 	 git diff --binary --no-index /dev/null binary >current ||
 | |
| 	 true
 | |
| 	) &&
 | |
| 	rm binary &&
 | |
| 	git apply --binary <current &&
 | |
| 	echo Q >expected &&
 | |
| 	nul_to_q <binary >actual &&
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_done
 |