| #!/bin/sh | 
 |  | 
 | test_description='pack-objects object selection using sparse algorithm' | 
 | . ./test-lib.sh | 
 |  | 
 | test_expect_success 'setup repo' ' | 
 | 	test_commit initial && | 
 | 	for i in $(test_seq 1 3) | 
 | 	do | 
 | 		mkdir f$i && | 
 | 		for j in $(test_seq 1 3) | 
 | 		do | 
 | 			mkdir f$i/f$j && | 
 | 			echo $j >f$i/f$j/data.txt | 
 | 		done | 
 | 	done && | 
 | 	git add . && | 
 | 	git commit -m "Initialized trees" && | 
 | 	for i in $(test_seq 1 3) | 
 | 	do | 
 | 		git checkout -b topic$i master && | 
 | 		echo change-$i >f$i/f$i/data.txt && | 
 | 		git commit -a -m "Changed f$i/f$i/data.txt" | 
 | 	done && | 
 | 	cat >packinput.txt <<-EOF && | 
 | 	topic1 | 
 | 	^topic2 | 
 | 	^topic3 | 
 | 	EOF | 
 | 	git rev-parse			\ | 
 | 		topic1			\ | 
 | 		topic1^{tree}		\ | 
 | 		topic1:f1		\ | 
 | 		topic1:f1/f1		\ | 
 | 		topic1:f1/f1/data.txt | sort >expect_objects.txt | 
 | ' | 
 |  | 
 | test_expect_success 'non-sparse pack-objects' ' | 
 | 	git pack-objects --stdout --revs --no-sparse <packinput.txt >nonsparse.pack && | 
 | 	git index-pack -o nonsparse.idx nonsparse.pack && | 
 | 	git show-index <nonsparse.idx | awk "{print \$2}" >nonsparse_objects.txt && | 
 | 	test_cmp expect_objects.txt nonsparse_objects.txt | 
 | ' | 
 |  | 
 | test_expect_success 'sparse pack-objects' ' | 
 | 	git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack && | 
 | 	git index-pack -o sparse.idx sparse.pack && | 
 | 	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt && | 
 | 	test_cmp expect_objects.txt sparse_objects.txt | 
 | ' | 
 |  | 
 | test_expect_success 'duplicate a folder from f3 and commit to topic1' ' | 
 | 	git checkout topic1 && | 
 | 	echo change-3 >f3/f3/data.txt && | 
 | 	git commit -a -m "Changed f3/f3/data.txt" && | 
 | 	git rev-parse			\ | 
 | 		topic1~1		\ | 
 | 		topic1~1^{tree}		\ | 
 | 		topic1^{tree}		\ | 
 | 		topic1			\ | 
 | 		topic1:f1		\ | 
 | 		topic1:f1/f1		\ | 
 | 		topic1:f1/f1/data.txt | sort >required_objects.txt | 
 | ' | 
 |  | 
 | test_expect_success 'non-sparse pack-objects' ' | 
 | 	git pack-objects --stdout --revs --no-sparse <packinput.txt >nonsparse.pack && | 
 | 	git index-pack -o nonsparse.idx nonsparse.pack && | 
 | 	git show-index <nonsparse.idx | awk "{print \$2}" >nonsparse_objects.txt && | 
 | 	comm -1 -2 required_objects.txt nonsparse_objects.txt >nonsparse_required_objects.txt && | 
 | 	test_cmp required_objects.txt nonsparse_required_objects.txt | 
 | ' | 
 |  | 
 | test_expect_success 'sparse pack-objects' ' | 
 | 	git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack && | 
 | 	git index-pack -o sparse.idx sparse.pack && | 
 | 	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt && | 
 | 	comm -1 -2 required_objects.txt sparse_objects.txt >sparse_required_objects.txt && | 
 | 	test_cmp required_objects.txt sparse_required_objects.txt | 
 | ' | 
 |  | 
 | # Demonstrate that the algorithms differ when we copy a tree wholesale | 
 | # from one folder to another. | 
 |  | 
 | test_expect_success 'duplicate a folder from f1 into f3' ' | 
 | 	mkdir f3/f4 && | 
 | 	cp -r f1/f1/* f3/f4 && | 
 | 	git add f3/f4 && | 
 | 	git commit -m "Copied f1/f1 to f3/f4" && | 
 | 	cat >packinput.txt <<-EOF && | 
 | 	topic1 | 
 | 	^topic1~1 | 
 | 	EOF | 
 | 	git rev-parse		\ | 
 | 		topic1		\ | 
 | 		topic1^{tree}   \ | 
 | 		topic1:f3 | sort >required_objects.txt | 
 | ' | 
 |  | 
 | test_expect_success 'non-sparse pack-objects' ' | 
 | 	git pack-objects --stdout --revs --no-sparse <packinput.txt >nonsparse.pack && | 
 | 	git index-pack -o nonsparse.idx nonsparse.pack && | 
 | 	git show-index <nonsparse.idx | awk "{print \$2}" >nonsparse_objects.txt && | 
 | 	comm -1 -2 required_objects.txt nonsparse_objects.txt >nonsparse_required_objects.txt && | 
 | 	test_cmp required_objects.txt nonsparse_required_objects.txt | 
 | ' | 
 |  | 
 | test_expect_success 'sparse pack-objects' ' | 
 | 	git rev-parse			\ | 
 | 		topic1			\ | 
 | 		topic1^{tree}		\ | 
 | 		topic1:f3		\ | 
 | 		topic1:f3/f4		\ | 
 | 		topic1:f3/f4/data.txt | sort >expect_sparse_objects.txt && | 
 | 	git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack && | 
 | 	git index-pack -o sparse.idx sparse.pack && | 
 | 	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt && | 
 | 	test_cmp expect_sparse_objects.txt sparse_objects.txt | 
 | ' | 
 |  | 
 | test_expect_success 'pack.useSparse enables algorithm' ' | 
 | 	git config pack.useSparse true && | 
 | 	git pack-objects --stdout --revs <packinput.txt >sparse.pack && | 
 | 	git index-pack -o sparse.idx sparse.pack && | 
 | 	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt && | 
 | 	test_cmp expect_sparse_objects.txt sparse_objects.txt | 
 | ' | 
 |  | 
 | test_expect_success 'pack.useSparse overridden' ' | 
 | 	git pack-objects --stdout --revs --no-sparse <packinput.txt >sparse.pack && | 
 | 	git index-pack -o sparse.idx sparse.pack && | 
 | 	git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt && | 
 | 	test_cmp required_objects.txt sparse_objects.txt | 
 | ' | 
 |  | 
 | test_done |