]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7402-submodule-rebase.sh
Sync with Git 2.45.1
[thirdparty/git.git] / t / t7402-submodule-rebase.sh
CommitLineData
6848d58c
JS
1#!/bin/sh
2#
3# Copyright (c) 2008 Johannes Schindelin
4#
5
4ae6d469 6test_description='Test rebasing, stashing, etc. with submodules'
6848d58c 7
9ff2f060 8TEST_PASSES_SANITIZE_LEAK=true
6848d58c
JS
9. ./test-lib.sh
10
11test_expect_success setup '
12
13 echo file > file &&
14 git add file &&
15 test_tick &&
16 git commit -m initial &&
17 git clone . submodule &&
18 git add submodule &&
19 test_tick &&
20 git commit -m submodule &&
21 echo second line >> file &&
22 (cd submodule && git pull) &&
23 test_tick &&
4ae6d469
JH
24 git commit -m file-and-submodule -a &&
25 git branch added-submodule
6848d58c
JS
26
27'
28
29test_expect_success 'rebase with a dirty submodule' '
30
31 (cd submodule &&
32 echo 3rd line >> file &&
33 test_tick &&
34 git commit -m fork -a) &&
35 echo unrelated >> file2 &&
36 git add file2 &&
37 test_tick &&
38 git commit -m unrelated file2 &&
39 echo other line >> file &&
40 test_tick &&
41 git commit -m update file &&
42 CURRENT=$(cd submodule && git rev-parse HEAD) &&
43 EXPECTED=$(git rev-parse HEAD~2:submodule) &&
44 GIT_TRACE=1 git rebase --onto HEAD~2 HEAD^ &&
45 STORED=$(git rev-parse HEAD:submodule) &&
46 test $EXPECTED = $STORED &&
47 test $CURRENT = $(cd submodule && git rev-parse HEAD)
48
49'
50
51cat > fake-editor.sh << \EOF
52#!/bin/sh
53echo $EDITOR_TEXT
54EOF
55chmod a+x fake-editor.sh
56
57test_expect_success 'interactive rebase with a dirty submodule' '
58
4bd0785d
ÆAB
59 echo submodule >expect &&
60 git diff --name-only >actual &&
61 test_cmp expect actual &&
6848d58c
JS
62 HEAD=$(git rev-parse HEAD) &&
63 GIT_EDITOR="\"$(pwd)/fake-editor.sh\"" EDITOR_TEXT="pick $HEAD" \
64 git rebase -i HEAD^ &&
4bd0785d
ÆAB
65 echo submodule >expect &&
66 git diff --name-only >actual &&
67 test_cmp expect actual
6848d58c
JS
68'
69
70test_expect_success 'rebase with dirty file and submodule fails' '
71
72 echo yet another line >> file &&
73 test_tick &&
74 git commit -m next file &&
75 echo rewrite > file &&
76 test_tick &&
77 git commit -m rewrite file &&
78 echo dirty > file &&
d492b31c 79 test_must_fail git rebase --onto HEAD~2 HEAD^
6848d58c
JS
80
81'
82
83test_expect_success 'stash with a dirty submodule' '
84
85 echo new > file &&
86 CURRENT=$(cd submodule && git rev-parse HEAD) &&
87 git stash &&
88 test new != $(cat file) &&
0cd1a881
ÆAB
89 echo submodule >expect &&
90 git diff --name-only >actual &&
91 test_cmp expect actual &&
92
93 echo "$CURRENT" >expect &&
94 git -C submodule rev-parse HEAD >actual &&
95 test_cmp expect actual &&
96
6848d58c
JS
97 git stash apply &&
98 test new = $(cat file) &&
0cd1a881
ÆAB
99 echo "$CURRENT" >expect &&
100 git -C submodule rev-parse HEAD >actual &&
101 test_cmp expect actual
6848d58c
JS
102
103'
104
4ae6d469
JH
105test_expect_success 'rebasing submodule that should conflict' '
106 git reset --hard &&
107 git checkout added-submodule &&
108 git add submodule &&
109 test_tick &&
110 git commit -m third &&
111 (
112 cd submodule &&
113 git commit --allow-empty -m extra
114 ) &&
115 git add submodule &&
116 test_tick &&
117 git commit -m fourth &&
118
b9e55be7 119 test_must_fail git rebase --onto HEAD^^ HEAD^ HEAD^0 2>actual_output &&
4ae6d469
JH
120 git ls-files -s submodule >actual &&
121 (
122 cd submodule &&
123 echo "160000 $(git rev-parse HEAD^) 1 submodule" &&
124 echo "160000 $(git rev-parse HEAD^^) 2 submodule" &&
125 echo "160000 $(git rev-parse HEAD) 3 submodule"
126 ) >expect &&
4057523a
CW
127 test_cmp expect actual &&
128 if test "$GIT_TEST_MERGE_ALGORITHM" = ort
129 then
130 sub_expect="go to submodule (submodule), and either merge commit $(git -C submodule rev-parse --short HEAD^0)" &&
131 grep "$sub_expect" actual_output
132 fi
4ae6d469
JH
133'
134
6848d58c 135test_done