Merge branch 'sg/clone-initial-fetch-configuration'
[git] / t / t3040-subprojects-basic.sh
1 #!/bin/sh
2
3 test_description='Basic subproject functionality'
4 . ./test-lib.sh
5
6 test_expect_success 'setup: create superproject' '
7         : >Makefile &&
8         git add Makefile &&
9         git commit -m "Superproject created"
10 '
11
12 test_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
31 test_expect_success 'check if fsck ignores the subprojects' '
32         git fsck --full
33 '
34
35 test_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
43 test_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
48 test_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
52 test_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
56 test_expect_success 'check if git diff works for subproject elements' '
57         test_expect_code 1 git diff --exit-code HEAD^ HEAD
58 '
59
60 test_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
67 test_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"
77 test_expect_success 'checkout in superproject' '
78         git checkout save &&
79         git diff-index --exit-code --raw --cached save -- sub1
80 '
81
82 # just interesting what happened...
83 # git diff --name-status -M save master
84
85 test_done