Tests for core subproject support
The following tests available:
- create subprojects: create a directory in the superproject,
  initialize a git repo in it, and try adding it in super project.
  Make a commit in superproject
- check if fsck ignores the subprojects: it just should give no errors
- check if commit in a subproject detected: make a commit in
  subproject, git-diff-files in superproject should detect it
- check if a changed subproject HEAD can be committed: try
  "git-commit -a" in superproject. It should commit changed
  HEAD of a subproject
- check if diff-index works for subproject elements: compare the index
  (changed by previuos tests) with the initial commit (which created
  two subprojects). Should show a change for the recently changed subproject
- check if diff-tree works for subproject elements: do the same, just use
  git-diff-tree. This test is somewhat redundant, I just added it for
  completeness (diff, diff-files, and diff-index are already used)
- check if git diff works for subproject elements: try to limit
  the diff for the name of a subproject in superproject:
     git diff HEAD^ HEAD -- subproject
- check if clone works: try a clone of superproject and compare
  "git ls-files -s" output in superproject and cloned repo
- removing and adding subproject: rename test. Currently implemented
  as "git-update-index --force-remove", "mv" and "git-add".
- checkout in superproject: try to checkout the initial commit
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
			
			
				maint
			
			
		
							parent
							
								
									04786756f9
								
							
						
					
					
						commit
						1c3e5c4ebc
					
				|  | @ -0,0 +1,85 @@ | |||
| #!/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 && | ||||
|     git diff 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 && | ||||
|     git diff 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 | ||||
		Loading…
	
		Reference in New Issue
	
	 Alex Riesen
						Alex Riesen