#!/bin/sh test_description='Basic subproject functionality' . ./test-lib.sh test_expect_success 'setup: create superproject' ' : >Makefile && git add Makefile && git commit -m "Superproject created" ' test_expect_success 'setup: 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 branch save HEAD && cat >expected <<-\EOF && :000000 160000 00000... A sub1 :000000 160000 00000... A sub2 EOF test_cmp expected current ' 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" ) && test_expect_code 1 git diff-files --exit-code ' test_expect_success 'check if a changed subproject HEAD can be committed' ' git commit -q -a -m "sub1 changed" && test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD ' test_expect_success 'check if diff-index works for subproject elements' ' test_expect_code 1 git diff-index --exit-code --cached save -- sub1 ' test_expect_success 'check if diff-tree works for subproject elements' ' test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD -- sub1 ' test_expect_success 'check if git diff works for subproject elements' ' test_expect_code 1 git diff --exit-code HEAD^ HEAD ' 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" && test_expect_code 1 git diff -M --name-status --exit-code HEAD^ HEAD ' # 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