1#!/bin/sh 2 3test_description='Basic subproject functionality' 4. ./test-lib.sh 5 6test_expect_success 'setup: create superproject' ' 7 : >Makefile && 8 git add Makefile && 9 git commit -m "Superproject created" 10' 11 12test_expect_success 'setup: create subprojects' ' 13 mkdir sub1 && 14 ( cd sub1 && git init && : >Makefile && git add * && 15 git commit -q -m "subproject 1" ) && 16 mkdir sub2 && 17 ( cd sub2 && git init && : >Makefile && git add * && 18 git commit -q -m "subproject 2" ) && 19 git update-index --add sub1 && 20 git add sub2 && 21 git commit -q -m "subprojects added" && 22 GIT_PRINT_SHA1_ELLIPSIS="yes" git diff-tree --abbrev=5 HEAD^ HEAD |cut -d" " -f-3,5- >current && 23 git branch save HEAD && 24 cat >expected <<-\EOF && 25 :000000 160000 00000... A sub1 26 :000000 160000 00000... A sub2 27 EOF 28 test_cmp expected current 29' 30 31test_expect_success 'check if fsck ignores the subprojects' ' 32 git fsck --full 33' 34 35test_expect_success 'check if commit in a subproject detected' ' 36 ( cd sub1 && 37 echo "all:" >>Makefile && 38 echo " true" >>Makefile && 39 git commit -q -a -m "make all" ) && 40 test_expect_code 1 git diff-files --exit-code 41' 42 43test_expect_success 'check if a changed subproject HEAD can be committed' ' 44 git commit -q -a -m "sub1 changed" && 45 test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD 46' 47 48test_expect_success 'check if diff-index works for subproject elements' ' 49 test_expect_code 1 git diff-index --exit-code --cached save -- sub1 50' 51 52test_expect_success 'check if diff-tree works for subproject elements' ' 53 test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD -- sub1 54' 55 56test_expect_success 'check if git diff works for subproject elements' ' 57 test_expect_code 1 git diff --exit-code HEAD^ HEAD 58' 59 60test_expect_success 'check if clone works' ' 61 git ls-files -s >expected && 62 git clone -l -s . cloned && 63 ( cd cloned && git ls-files -s ) >current && 64 test_cmp expected current 65' 66 67test_expect_success 'removing and adding subproject' ' 68 git update-index --force-remove -- sub2 && 69 mv sub2 sub3 && 70 git add sub3 && 71 git commit -q -m "renaming a subproject" && 72 test_expect_code 1 git diff -M --name-status --exit-code HEAD^ HEAD 73' 74 75# the index must contain the object name the HEAD of the 76# subproject sub1 was at the point "save" 77test_expect_success 'checkout in superproject' ' 78 git checkout save && 79 git diff-index --exit-code --raw --cached save -- sub1 80' 81 82test_done 83