@@ -10,6 +10,7 @@ TEST_PASSES_SANITIZE_LEAK=true
10
10
. ./test-lib.sh
11
11
12
12
test_expect_success ' setup a real submodule' '
13
+ cwd="$(pwd)" &&
13
14
git init sub1 &&
14
15
test_commit -C sub1 first &&
15
16
git submodule add ./sub1 &&
@@ -18,13 +19,21 @@ test_expect_success 'setup a real submodule' '
18
19
'
19
20
20
21
test_expect_success ' absorb the git dir' '
22
+ >expect &&
23
+ >actual &&
21
24
>expect.1 &&
22
25
>expect.2 &&
23
26
>actual.1 &&
24
27
>actual.2 &&
25
28
git status >expect.1 &&
26
29
git -C sub1 rev-parse HEAD >expect.2 &&
27
- git submodule absorbgitdirs &&
30
+ cat >expect <<-EOF &&
31
+ Migrating git directory of ' \' ' sub1' \' ' from
32
+ ' \' ' $cwd/sub1/.git' \' ' to
33
+ ' \' ' $cwd/.git/modules/sub1' \' '
34
+ EOF
35
+ git submodule absorbgitdirs 2>actual &&
36
+ test_cmp expect actual &&
28
37
git fsck &&
29
38
test -f sub1/.git &&
30
39
test -d .git/modules/sub1 &&
@@ -37,7 +46,8 @@ test_expect_success 'absorb the git dir' '
37
46
test_expect_success ' absorbing does not fail for deinitialized submodules' '
38
47
test_when_finished "git submodule update --init" &&
39
48
git submodule deinit --all &&
40
- git submodule absorbgitdirs &&
49
+ git submodule absorbgitdirs 2>err &&
50
+ test_must_be_empty err &&
41
51
test -d .git/modules/sub1 &&
42
52
test -d sub1 &&
43
53
! test -e sub1/.git
@@ -56,7 +66,13 @@ test_expect_success 'setup nested submodule' '
56
66
test_expect_success ' absorb the git dir in a nested submodule' '
57
67
git status >expect.1 &&
58
68
git -C sub1/nested rev-parse HEAD >expect.2 &&
59
- git submodule absorbgitdirs &&
69
+ cat >expect <<-EOF &&
70
+ Migrating git directory of ' \' ' sub1/nested' \' ' from
71
+ ' \' ' $cwd/sub1/nested/.git' \' ' to
72
+ ' \' ' $cwd/.git/modules/sub1/modules/nested' \' '
73
+ EOF
74
+ git submodule absorbgitdirs 2>actual &&
75
+ test_cmp expect actual &&
60
76
test -f sub1/nested/.git &&
61
77
test -d .git/modules/sub1/modules/nested &&
62
78
git status >actual.1 &&
@@ -87,7 +103,13 @@ test_expect_success 're-setup nested submodule' '
87
103
test_expect_success ' absorb the git dir in a nested submodule' '
88
104
git status >expect.1 &&
89
105
git -C sub1/nested rev-parse HEAD >expect.2 &&
90
- git submodule absorbgitdirs &&
106
+ cat >expect <<-EOF &&
107
+ Migrating git directory of ' \' ' sub1' \' ' from
108
+ ' \' ' $cwd/sub1/.git' \' ' to
109
+ ' \' ' $cwd/.git/modules/sub1' \' '
110
+ EOF
111
+ git submodule absorbgitdirs 2>actual &&
112
+ test_cmp expect actual &&
91
113
test -f sub1/.git &&
92
114
test -f sub1/nested/.git &&
93
115
test -d .git/modules/sub1/modules/nested &&
@@ -97,6 +119,27 @@ test_expect_success 'absorb the git dir in a nested submodule' '
97
119
test_cmp expect.2 actual.2
98
120
'
99
121
122
+ test_expect_success ' absorb the git dir outside of primary worktree' '
123
+ test_when_finished "rm -rf repo-bare.git" &&
124
+ git clone --bare . repo-bare.git &&
125
+ test_when_finished "rm -rf repo-wt" &&
126
+ git -C repo-bare.git worktree add ../repo-wt &&
127
+
128
+ test_when_finished "rm -f .gitconfig" &&
129
+ test_config_global protocol.file.allow always &&
130
+ git -C repo-wt submodule update --init &&
131
+ git init repo-wt/sub2 &&
132
+ test_commit -C repo-wt/sub2 A &&
133
+ git -C repo-wt submodule add ./sub2 sub2 &&
134
+ cat >expect <<-EOF &&
135
+ Migrating git directory of ' \' ' sub2' \' ' from
136
+ ' \' ' $cwd/repo-wt/sub2/.git' \' ' to
137
+ ' \' ' $cwd/repo-bare.git/worktrees/repo-wt/modules/sub2' \' '
138
+ EOF
139
+ git -C repo-wt submodule absorbgitdirs 2>actual &&
140
+ test_cmp expect actual
141
+ '
142
+
100
143
test_expect_success ' setup a gitlink with missing .gitmodules entry' '
101
144
git init sub2 &&
102
145
test_commit -C sub2 first &&
@@ -107,7 +150,11 @@ test_expect_success 'setup a gitlink with missing .gitmodules entry' '
107
150
test_expect_success ' absorbing the git dir fails for incomplete submodules' '
108
151
git status >expect.1 &&
109
152
git -C sub2 rev-parse HEAD >expect.2 &&
110
- test_must_fail git submodule absorbgitdirs &&
153
+ cat >expect <<-\EOF &&
154
+ fatal: could not lookup name for submodule ' \' ' sub2' \' '
155
+ EOF
156
+ test_must_fail git submodule absorbgitdirs 2>actual &&
157
+ test_cmp expect actual &&
111
158
git -C sub2 fsck &&
112
159
test -d sub2/.git &&
113
160
git status >actual &&
@@ -127,8 +174,11 @@ test_expect_success 'setup a submodule with multiple worktrees' '
127
174
'
128
175
129
176
test_expect_success ' absorbing fails for a submodule with multiple worktrees' '
130
- test_must_fail git submodule absorbgitdirs sub3 2>error &&
131
- test_i18ngrep "not supported" error
177
+ cat >expect <<-\EOF &&
178
+ fatal: could not lookup name for submodule ' \' ' sub2' \' '
179
+ EOF
180
+ test_must_fail git submodule absorbgitdirs 2>actual &&
181
+ test_cmp expect actual
132
182
'
133
183
134
184
test_done
0 commit comments