1#!/bin/sh
2
3test_description='checkout can handle submodules'
4
5. ./test-lib.sh
6
7test_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
22test_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
32test_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
42test_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
49test_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
57test_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
65test_done