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