| #!/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 |