Windows: Work around misbehaved rename().
[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 'Super project creation' \
7     ': >Makefile &&
8     git add Makefile &&
9     git commit -m "Superproject created"'
10
11
12 cat >expected <<EOF
13 :000000 160000 00000... A       sub1
14 :000000 160000 00000... A       sub2
15 EOF
16 test_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
29 git branch save HEAD
30
31 test_expect_success 'check if fsck ignores the subprojects' \
32     'git fsck --full'
33
34 test_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
43 test_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
49 test_expect_success 'check if diff-index works for subproject elements' \
50     'git diff-index --exit-code --cached save -- sub1
51     test $? = 1'
52
53 test_expect_success 'check if diff-tree works for subproject elements' \
54     'git diff-tree --exit-code HEAD^ HEAD -- sub1
55     test $? = 1'
56
57 test_expect_success 'check if git diff works for subproject elements' \
58     'git diff --exit-code HEAD^ HEAD
59     test $? = 1'
60
61 test_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
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         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"
78 test_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
85 test_done