blob: 6abdcbbc94ab46944123f817700cc1ea36ae831b (
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
|
#!/bin/sh
test_description='Basic subproject functionality'
. ./test-lib.sh
test_expect_success 'setup: create superproject' '
: >Makefile &&
git add Makefile &&
git commit -m "Superproject created"
'
test_expect_success 'setup: 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_PRINT_SHA1_ELLIPSIS="yes" git diff-tree --abbrev=5 HEAD^ HEAD |cut -d" " -f-3,5- >current &&
git branch save HEAD &&
cat >expected <<-\EOF &&
:000000 160000 00000... A sub1
:000000 160000 00000... A sub2
EOF
test_cmp expected current
'
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" ) &&
test_expect_code 1 git diff-files --exit-code
'
test_expect_success 'check if a changed subproject HEAD can be committed' '
git commit -q -a -m "sub1 changed" &&
test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD
'
test_expect_success 'check if diff-index works for subproject elements' '
test_expect_code 1 git diff-index --exit-code --cached save -- sub1
'
test_expect_success 'check if diff-tree works for subproject elements' '
test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD -- sub1
'
test_expect_success 'check if git diff works for subproject elements' '
test_expect_code 1 git diff --exit-code HEAD^ HEAD
'
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" &&
test_expect_code 1 git diff -M --name-status --exit-code HEAD^ HEAD
'
# 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
'
test_done
|