blob: ebeca12a71115f60d10fa3ffa4725b1c7080f6f0 (
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
#!/bin/sh
#
# Copyright (c) 2008 Johannes Schindelin
#
test_description='Test rebasing, stashing, etc. with submodules'
. ./test-lib.sh
test_expect_success setup '
echo file > file &&
git add file &&
test_tick &&
git commit -m initial &&
git clone . submodule &&
git add submodule &&
test_tick &&
git commit -m submodule &&
echo second line >> file &&
(cd submodule && git pull) &&
test_tick &&
git commit -m file-and-submodule -a &&
git branch added-submodule
'
test_expect_success 'rebase with a dirty submodule' '
(cd submodule &&
echo 3rd line >> file &&
test_tick &&
git commit -m fork -a) &&
echo unrelated >> file2 &&
git add file2 &&
test_tick &&
git commit -m unrelated file2 &&
echo other line >> file &&
test_tick &&
git commit -m update file &&
CURRENT=$(cd submodule && git rev-parse HEAD) &&
EXPECTED=$(git rev-parse HEAD~2:submodule) &&
GIT_TRACE=1 git rebase --onto HEAD~2 HEAD^ &&
STORED=$(git rev-parse HEAD:submodule) &&
test $EXPECTED = $STORED &&
test $CURRENT = $(cd submodule && git rev-parse HEAD)
'
cat > fake-editor.sh << \EOF
#!/bin/sh
echo $EDITOR_TEXT
EOF
chmod a+x fake-editor.sh
test_expect_success 'interactive rebase with a dirty submodule' '
test submodule = $(git diff --name-only) &&
HEAD=$(git rev-parse HEAD) &&
GIT_EDITOR="\"$(pwd)/fake-editor.sh\"" EDITOR_TEXT="pick $HEAD" \
git rebase -i HEAD^ &&
test submodule = $(git diff --name-only)
'
test_expect_success 'rebase with dirty file and submodule fails' '
echo yet another line >> file &&
test_tick &&
git commit -m next file &&
echo rewrite > file &&
test_tick &&
git commit -m rewrite file &&
echo dirty > file &&
test_must_fail git rebase --onto HEAD~2 HEAD^
'
test_expect_success 'stash with a dirty submodule' '
echo new > file &&
CURRENT=$(cd submodule && git rev-parse HEAD) &&
git stash &&
test new != $(cat file) &&
test submodule = $(git diff --name-only) &&
test $CURRENT = $(cd submodule && git rev-parse HEAD) &&
git stash apply &&
test new = $(cat file) &&
test $CURRENT = $(cd submodule && git rev-parse HEAD)
'
test_expect_success 'rebasing submodule that should conflict' '
git reset --hard &&
git checkout added-submodule &&
git add submodule &&
test_tick &&
git commit -m third &&
(
cd submodule &&
git commit --allow-empty -m extra
) &&
git add submodule &&
test_tick &&
git commit -m fourth &&
test_must_fail git rebase --onto HEAD^^ HEAD^ HEAD^0 >actual_output &&
git ls-files -s submodule >actual &&
(
cd submodule &&
echo "160000 $(git rev-parse HEAD^) 1 submodule" &&
echo "160000 $(git rev-parse HEAD^^) 2 submodule" &&
echo "160000 $(git rev-parse HEAD) 3 submodule"
) >expect &&
test_cmp expect actual &&
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
then
sub_expect="go to submodule (submodule), and either merge commit $(git -C submodule rev-parse --short HEAD^0)" &&
grep "$sub_expect" actual_output
fi
'
test_done
|