96 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| test_description='git rev-list trivial path optimization test
 | |
| 
 | |
|    d/z1
 | |
|    b0                             b1
 | |
|    o------------------------*----o master
 | |
|   /                        /
 | |
|  o---------o----o----o----o side
 | |
|  a0        c0   c1   a1   c2
 | |
|  d/f0      d/f1
 | |
|  d/z0
 | |
| 
 | |
| '
 | |
| 
 | |
| . ./test-lib.sh
 | |
| 
 | |
| test_expect_success setup '
 | |
| 	echo Hello >a &&
 | |
| 	mkdir d &&
 | |
| 	echo World >d/f &&
 | |
| 	echo World >d/z &&
 | |
| 	git add a d &&
 | |
| 	test_tick &&
 | |
| 	git commit -m "Initial commit" &&
 | |
| 	git rev-parse --verify HEAD &&
 | |
| 	git tag initial
 | |
| '
 | |
| 
 | |
| test_expect_success path-optimization '
 | |
| 	test_tick &&
 | |
| 	commit=$(echo "Unchanged tree" | git commit-tree "HEAD^{tree}" -p HEAD) &&
 | |
| 	test $(git rev-list $commit | wc -l) = 2 &&
 | |
| 	test $(git rev-list $commit -- . | wc -l) = 1
 | |
| '
 | |
| 
 | |
| test_expect_success 'further setup' '
 | |
| 	git checkout -b side &&
 | |
| 	echo Irrelevant >c &&
 | |
| 	echo Irrelevant >d/f &&
 | |
| 	git add c d/f &&
 | |
| 	test_tick &&
 | |
| 	git commit -m "Side makes an irrelevant commit" &&
 | |
| 	git tag side_c0 &&
 | |
| 	echo "More Irrelevancy" >c &&
 | |
| 	git add c &&
 | |
| 	test_tick &&
 | |
| 	git commit -m "Side makes another irrelevant commit" &&
 | |
| 	echo Bye >a &&
 | |
| 	git add a &&
 | |
| 	test_tick &&
 | |
| 	git commit -m "Side touches a" &&
 | |
| 	git tag side_a1 &&
 | |
| 	echo "Yet more Irrelevancy" >c &&
 | |
| 	git add c &&
 | |
| 	test_tick &&
 | |
| 	git commit -m "Side makes yet another irrelevant commit" &&
 | |
| 	git checkout master &&
 | |
| 	echo Another >b &&
 | |
| 	echo Munged >d/z &&
 | |
| 	git add b d/z &&
 | |
| 	test_tick &&
 | |
| 	git commit -m "Master touches b" &&
 | |
| 	git tag master_b0 &&
 | |
| 	git merge side &&
 | |
| 	echo Touched >b &&
 | |
| 	git add b &&
 | |
| 	test_tick &&
 | |
| 	git commit -m "Master touches b again"
 | |
| '
 | |
| 
 | |
| test_expect_success 'path optimization 2' '
 | |
| 	git rev-parse side_a1 initial >expected &&
 | |
| 	git rev-list HEAD -- a >actual &&
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'pathspec with leading path' '
 | |
| 	git rev-parse master^ master_b0 side_c0 initial >expected &&
 | |
| 	git rev-list HEAD -- d >actual &&
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'pathspec with glob (1)' '
 | |
| 	git rev-parse master^ master_b0 side_c0 initial >expected &&
 | |
| 	git rev-list HEAD -- "d/*" >actual &&
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'pathspec with glob (2)' '
 | |
| 	git rev-parse side_c0 initial >expected &&
 | |
| 	git rev-list HEAD -- "d/[a-m]*" >actual &&
 | |
| 	test_cmp expected actual
 | |
| '
 | |
| 
 | |
| test_done
 |