summaryrefslogtreecommitdiff
path: root/t/t7412-submodule-absorbgitdirs.sh
blob: 1c47780e2bf1bccaef7176e1440946331ecaac6e (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/sh
 
test_description='Test submodule absorbgitdirs
 
This test verifies that `git submodue absorbgitdirs` moves a submodules git
directory into the superproject.
'
 
. ./test-lib.sh
 
test_expect_success 'setup a real submodule' '
	git init sub1 &&
	test_commit -C sub1 first &&
	git submodule add ./sub1 &&
	test_tick &&
	git commit -m superproject
'
 
test_expect_success 'absorb the git dir' '
	>expect.1 &&
	>expect.2 &&
	>actual.1 &&
	>actual.2 &&
	git status >expect.1 &&
	git -C sub1 rev-parse HEAD >expect.2 &&
	git submodule absorbgitdirs &&
	git fsck &&
	test -f sub1/.git &&
	test -d .git/modules/sub1 &&
	git status >actual.1 &&
	git -C sub1 rev-parse HEAD >actual.2 &&
	test_cmp expect.1 actual.1 &&
	test_cmp expect.2 actual.2
'
 
test_expect_success 'absorbing does not fail for deinitalized submodules' '
	test_when_finished "git submodule update --init" &&
	git submodule deinit --all &&
	git submodule absorbgitdirs &&
	test -d .git/modules/sub1 &&
	test -d sub1 &&
	! test -e sub1/.git
'
 
test_expect_success 'setup nested submodule' '
	git init sub1/nested &&
	test_commit -C sub1/nested first_nested &&
	git -C sub1 submodule add ./nested &&
	test_tick &&
	git -C sub1 commit -m "add nested" &&
	git add sub1 &&
	git commit -m "sub1 to include nested submodule"
'
 
test_expect_success 'absorb the git dir in a nested submodule' '
	git status >expect.1 &&
	git -C sub1/nested rev-parse HEAD >expect.2 &&
	git submodule absorbgitdirs &&
	test -f sub1/nested/.git &&
	test -d .git/modules/sub1/modules/nested &&
	git status >actual.1 &&
	git -C sub1/nested rev-parse HEAD >actual.2 &&
	test_cmp expect.1 actual.1 &&
	test_cmp expect.2 actual.2
'
 
test_expect_success 'setup a gitlink with missing .gitmodules entry' '
	git init sub2 &&
	test_commit -C sub2 first &&
	git add sub2 &&
	git commit -m superproject
'
 
test_expect_success 'absorbing the git dir fails for incomplete submodules' '
	git status >expect.1 &&
	git -C sub2 rev-parse HEAD >expect.2 &&
	test_must_fail git submodule absorbgitdirs &&
	git -C sub2 fsck &&
	test -d sub2/.git &&
	git status >actual &&
	git -C sub2 rev-parse HEAD >actual.2 &&
	test_cmp expect.1 actual.1 &&
	test_cmp expect.2 actual.2
'
 
test_expect_success 'setup a submodule with multiple worktrees' '
	# first create another unembedded git dir in a new submodule
	git init sub3 &&
	test_commit -C sub3 first &&
	git submodule add ./sub3 &&
	test_tick &&
	git commit -m "add another submodule" &&
	git -C sub3 worktree add ../sub3_second_work_tree
'
 
test_expect_success 'absorbing fails for a submodule with multiple worktrees' '
	test_must_fail git submodule absorbgitdirs sub3 2>error &&
	test_i18ngrep "not supported" error
'
 
test_done