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