summaryrefslogtreecommitdiff
path: root/t/t3040-subprojects-basic.sh
blob: f6973e96a59916c6048222bfa0064aec5dea3746 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/sh

test_description='Basic subproject functionality'
. ./test-lib.sh

test_expect_success 'Super project creation' \
    ': >Makefile &&
    git add Makefile &&
    git commit -m "Superproject created"'


cat >expected <<EOF
:000000 160000 00000... A	sub1
:000000 160000 00000... A	sub2
EOF
test_expect_success '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 &&
    test_cmp expected current'

git branch save HEAD

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" ) && {
        git diff-files --exit-code
	test $? = 1
    }'

test_expect_success 'check if a changed subproject HEAD can be committed' \
    'git commit -q -a -m "sub1 changed" && {
	git diff-tree --exit-code HEAD^ HEAD
	test $? = 1
    }'

test_expect_success 'check if diff-index works for subproject elements' \
    'git diff-index --exit-code --cached save -- sub1
    test $? = 1'

test_expect_success 'check if diff-tree works for subproject elements' \
    'git diff-tree --exit-code HEAD^ HEAD -- sub1
    test $? = 1'

test_expect_success 'check if git diff works for subproject elements' \
    'git diff --exit-code HEAD^ HEAD
    test $? = 1'

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" && {
	git diff -M --name-status --exit-code HEAD^ HEAD
	test $? = 1
    }'

# 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