Merge branch 'maint'
[git] / t / t2013-checkout-submodule.sh
1 #!/bin/sh
2
3 test_description='checkout can handle submodules'
4
5 . ./test-lib.sh
6
7 test_expect_success 'setup' '
8         mkdir submodule &&
9         (cd submodule &&
10          git init &&
11          test_commit first) &&
12         git add submodule &&
13         test_tick &&
14         git commit -m superproject &&
15         (cd submodule &&
16          test_commit second) &&
17         git add submodule &&
18         test_tick &&
19         git commit -m updated.superproject
20 '
21
22 test_expect_success '"reset <submodule>" updates the index' '
23         git update-index --refresh &&
24         git diff-files --quiet &&
25         git diff-index --quiet --cached HEAD &&
26         test_must_fail git reset HEAD^ submodule &&
27         test_must_fail git diff-files --quiet &&
28         git reset submodule &&
29         git diff-files --quiet
30 '
31
32 test_expect_success '"checkout <submodule>" updates the index only' '
33         git update-index --refresh &&
34         git diff-files --quiet &&
35         git diff-index --quiet --cached HEAD &&
36         git checkout HEAD^ submodule &&
37         test_must_fail git diff-files --quiet &&
38         git checkout HEAD submodule &&
39         git diff-files --quiet
40 '
41
42 test_expect_success '"checkout <submodule>" honors diff.ignoreSubmodules' '
43         git config diff.ignoreSubmodules dirty &&
44         echo x> submodule/untracked &&
45         git checkout HEAD >actual 2>&1 &&
46         ! test -s actual
47 '
48
49 test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .gitmodules' '
50         git config diff.ignoreSubmodules none &&
51         git config -f .gitmodules submodule.submodule.path submodule &&
52         git config -f .gitmodules submodule.submodule.ignore untracked &&
53         git checkout HEAD >actual 2>&1 &&
54         ! test -s actual
55 '
56
57 test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .git/config' '
58         git config -f .gitmodules submodule.submodule.ignore none &&
59         git config submodule.submodule.path submodule &&
60         git config submodule.submodule.ignore all &&
61         git checkout HEAD >actual 2>&1 &&
62         ! test -s actual
63 '
64
65 test_done