Skip to content

Commit c939669

Browse files
chriscoolgitster
authored andcommitted
reset: add a few tests for "git reset --merge"
Commit 9e8ecea ("Add 'merge' mode to 'git reset'", 2008-12-01), added the --merge option to git reset, but there were no test cases for it. This was not a big problem because "git reset" was just forking and execing "git read-tree", but this will change in a following patch. So let's add a few test cases to make sure that there will be no regression. Signed-off-by: Christian Couder <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4086010 commit c939669

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed

t/t7110-reset-merge.sh

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
#!/bin/sh
2+
#
3+
# Copyright (c) 2009 Christian Couder
4+
#
5+
6+
test_description='Tests for "git reset --merge"'
7+
8+
. ./test-lib.sh
9+
10+
test_expect_success setup '
11+
for i in 1 2 3; do echo line $i; done >file1 &&
12+
cat file1 >file2 &&
13+
git add file1 file2 &&
14+
test_tick &&
15+
git commit -m "Initial commit" &&
16+
git tag initial &&
17+
echo line 4 >>file1 &&
18+
cat file1 >file2 &&
19+
test_tick &&
20+
git commit -m "add line 4 to file1" file1 &&
21+
git tag second
22+
'
23+
24+
# The next test will test the following:
25+
#
26+
# working index HEAD target working index HEAD
27+
# ----------------------------------------------------
28+
# file1: C C C D --merge D D D
29+
# file2: C D D D --merge C D D
30+
test_expect_success 'reset --merge is ok with changes in file it does not touch' '
31+
git reset --merge HEAD^ &&
32+
! grep 4 file1 &&
33+
grep 4 file2 &&
34+
test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
35+
test -z "$(git diff --cached)"
36+
'
37+
38+
test_expect_success 'reset --merge is ok when switching back' '
39+
git reset --merge second &&
40+
grep 4 file1 &&
41+
grep 4 file2 &&
42+
test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
43+
test -z "$(git diff --cached)"
44+
'
45+
46+
# The next test will test the following:
47+
#
48+
# working index HEAD target working index HEAD
49+
# ----------------------------------------------------
50+
# file1: B B C D --merge D D D
51+
# file2: C D D D --merge C D D
52+
test_expect_success 'reset --merge discards changes added to index (1)' '
53+
git reset --hard second &&
54+
cat file1 >file2 &&
55+
echo "line 5" >> file1 &&
56+
git add file1 &&
57+
git reset --merge HEAD^ &&
58+
! grep 4 file1 &&
59+
! grep 5 file1 &&
60+
grep 4 file2 &&
61+
test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
62+
test -z "$(git diff --cached)"
63+
'
64+
65+
test_expect_success 'reset --merge is ok again when switching back (1)' '
66+
git reset --hard initial &&
67+
echo "line 5" >> file2 &&
68+
git add file2 &&
69+
git reset --merge second &&
70+
! grep 4 file2 &&
71+
! grep 5 file1 &&
72+
grep 4 file1 &&
73+
test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
74+
test -z "$(git diff --cached)"
75+
'
76+
77+
# The next test will test the following:
78+
#
79+
# working index HEAD target working index HEAD
80+
# ----------------------------------------------------
81+
# file1: C C C D --merge D D D
82+
# file2: C C D D --merge D D D
83+
test_expect_success 'reset --merge discards changes added to index (2)' '
84+
git reset --hard second &&
85+
echo "line 4" >> file2 &&
86+
git add file2 &&
87+
git reset --merge HEAD^ &&
88+
! grep 4 file2 &&
89+
test "$(git rev-parse HEAD)" = "$(git rev-parse initial)" &&
90+
test -z "$(git diff)" &&
91+
test -z "$(git diff --cached)"
92+
'
93+
94+
test_expect_success 'reset --merge is ok again when switching back (2)' '
95+
git reset --hard initial &&
96+
git reset --merge second &&
97+
! grep 4 file2 &&
98+
grep 4 file1 &&
99+
test "$(git rev-parse HEAD)" = "$(git rev-parse second)" &&
100+
test -z "$(git diff --cached)"
101+
'
102+
103+
# The next test will test the following:
104+
#
105+
# working index HEAD target working index HEAD
106+
# ----------------------------------------------------
107+
# file1: A B B C --merge (disallowed)
108+
test_expect_success 'reset --merge fails with changes in file it touches' '
109+
git reset --hard second &&
110+
echo "line 5" >> file1 &&
111+
test_tick &&
112+
git commit -m "add line 5" file1 &&
113+
sed -e "s/line 1/changed line 1/" <file1 >file3 &&
114+
mv file3 file1 &&
115+
test_must_fail git reset --merge HEAD^ 2>err.log &&
116+
grep file1 err.log | grep "not uptodate"
117+
'
118+
119+
test_expect_success 'setup 2 different branches' '
120+
git reset --hard second &&
121+
git branch branch1 &&
122+
git branch branch2 &&
123+
git checkout branch1 &&
124+
echo "line 5 in branch1" >> file1 &&
125+
test_tick &&
126+
git commit -a -m "change in branch1" &&
127+
git checkout branch2 &&
128+
echo "line 5 in branch2" >> file1 &&
129+
test_tick &&
130+
git commit -a -m "change in branch2" &&
131+
git tag third
132+
'
133+
134+
# The next test will test the following:
135+
#
136+
# working index HEAD target working index HEAD
137+
# ----------------------------------------------------
138+
# file1: X U B C --merge (disallowed)
139+
test_expect_success '"reset --merge HEAD^" fails with pending merge' '
140+
test_must_fail git merge branch1 &&
141+
test_must_fail git reset --merge HEAD^ &&
142+
test "$(git rev-parse HEAD)" = "$(git rev-parse third)" &&
143+
test -n "$(git diff --cached)"
144+
'
145+
146+
# The next test will test the following:
147+
#
148+
# working index HEAD target working index HEAD
149+
# ----------------------------------------------------
150+
# file1: X U B B --merge (disallowed)
151+
test_expect_success '"reset --merge HEAD" fails with pending merge' '
152+
git reset --hard third &&
153+
test_must_fail git merge branch1 &&
154+
test_must_fail git reset --merge HEAD &&
155+
test "$(git rev-parse HEAD)" = "$(git rev-parse third)" &&
156+
test -n "$(git diff --cached)"
157+
'
158+
159+
test_done

0 commit comments

Comments
 (0)