86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| 
 | |
| test_description='Basic subproject functionality'
 | |
| . ./test-lib.sh
 | |
| 
 | |
| test_expect_success 'Super project creation' \
 | |
|     ': >Makefile &&
 | |
|     git add Makefile &&
 | |
|     git commit -m "Superproject created"'
 | |
| 
 | |
| 
 | |
| cat >expected <<EOF
 | |
| :000000 160000 00000... A	sub1
 | |
| :000000 160000 00000... A	sub2
 | |
| EOF
 | |
| test_expect_success 'create subprojects' \
 | |
|     'mkdir sub1 &&
 | |
|     ( cd sub1 && git init && : >Makefile && git add * &&
 | |
|     git commit -q -m "subproject 1" ) &&
 | |
|     mkdir sub2 &&
 | |
|     ( cd sub2 && git init && : >Makefile && git add * &&
 | |
|     git commit -q -m "subproject 2" ) &&
 | |
|     git update-index --add sub1 &&
 | |
|     git add sub2 &&
 | |
|     git commit -q -m "subprojects added" &&
 | |
|     git diff-tree --abbrev=5 HEAD^ HEAD |cut -d" " -f-3,5- >current &&
 | |
|     test_cmp expected current'
 | |
| 
 | |
| git branch save HEAD
 | |
| 
 | |
| test_expect_success 'check if fsck ignores the subprojects' \
 | |
|     'git fsck --full'
 | |
| 
 | |
| test_expect_success 'check if commit in a subproject detected' \
 | |
|     '( cd sub1 &&
 | |
|     echo "all:" >>Makefile &&
 | |
|     echo "	true" >>Makefile &&
 | |
|     git commit -q -a -m "make all" ) && {
 | |
|         git diff-files --exit-code
 | |
| 	test $? = 1
 | |
|     }'
 | |
| 
 | |
| test_expect_success 'check if a changed subproject HEAD can be committed' \
 | |
|     'git commit -q -a -m "sub1 changed" && {
 | |
| 	git diff-tree --exit-code HEAD^ HEAD
 | |
| 	test $? = 1
 | |
|     }'
 | |
| 
 | |
| test_expect_success 'check if diff-index works for subproject elements' \
 | |
|     'git diff-index --exit-code --cached save -- sub1
 | |
|     test $? = 1'
 | |
| 
 | |
| test_expect_success 'check if diff-tree works for subproject elements' \
 | |
|     'git diff-tree --exit-code HEAD^ HEAD -- sub1
 | |
|     test $? = 1'
 | |
| 
 | |
| test_expect_success 'check if git diff works for subproject elements' \
 | |
|     'git diff --exit-code HEAD^ HEAD
 | |
|     test $? = 1'
 | |
| 
 | |
| test_expect_success 'check if clone works' \
 | |
|     'git ls-files -s >expected &&
 | |
|     git clone -l -s . cloned &&
 | |
|     ( cd cloned && git ls-files -s ) >current &&
 | |
|     test_cmp expected current'
 | |
| 
 | |
| test_expect_success 'removing and adding subproject' \
 | |
|     'git update-index --force-remove -- sub2 &&
 | |
|     mv sub2 sub3 &&
 | |
|     git add sub3 &&
 | |
|     git commit -q -m "renaming a subproject" && {
 | |
| 	git diff -M --name-status --exit-code HEAD^ HEAD
 | |
| 	test $? = 1
 | |
|     }'
 | |
| 
 | |
| # the index must contain the object name the HEAD of the
 | |
| # subproject sub1 was at the point "save"
 | |
| test_expect_success 'checkout in superproject' \
 | |
|     'git checkout save &&
 | |
|     git diff-index --exit-code --raw --cached save -- sub1'
 | |
| 
 | |
| # just interesting what happened...
 | |
| # git diff --name-status -M save master
 | |
| 
 | |
| test_done
 |