aboutsummaryrefslogtreecommitdiff
path: root/t/t3032-merge-recursive-options.sh
blob: 4029c9c8c06d24887e7d9fa7c97c2c8c5826eb42 (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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#!/bin/sh

test_description='merge-recursive options

* [master] Clarify
 ! [remote] Remove cruft
--
 + [remote] Remove cruft
*  [master] Clarify
*+ [remote^] Initial revision
*   ok 1: setup
'

. ./test-lib.sh

test_have_prereq SED_STRIPS_CR && SED_OPTIONS=-b
if test_have_prereq GREP_STRIPS_CR
then
	GREP_OPTIONS=-U
	export GREP_OPTIONS
fi

test_expect_success 'setup' '
	conflict_hunks () {
		sed $SED_OPTIONS -n -e "
			/^<<<</ b conflict
			b
			: conflict
			p
			/^>>>>/ b
			n
			b conflict
		" "$@"
	} &&

	cat <<-\EOF >text.txt &&
	    Hope, he says, cherishes the soul of him who lives in
	    justice and holiness and is the nurse of his age and the
	    companion of his journey;--hope which is mightiest to sway
	    the restless soul of man.

	How admirable are his words!  And the great blessing of riches, I do
	not say to every man, but to a good man, is, that he has had no
	occasion to deceive or to defraud others, either intentionally or
	unintentionally; and when he departs to the world below he is not in
	any apprehension about offerings due to the gods or debts which he owes
	to men.  Now to this peace of mind the possession of wealth greatly
	contributes; and therefore I say, that, setting one thing against
	another, of the many advantages which wealth has to give, to a man of
	sense this is in my opinion the greatest.

	Well said, Cephalus, I replied; but as concerning justice, what is
	it?--to speak the truth and to pay your debts--no more than this?  And
	even to this are there not exceptions?  Suppose that a friend when in
	his right mind has deposited arms with me and he asks for them when he
	is not in his right mind, ought I to give them back to him?  No one
	would say that I ought or that I should be right in doing so, any more
	than they would say that I ought always to speak the truth to one who
	is in his condition.

	You are quite right, he replied.

	But then, I said, speaking the truth and paying your debts is not a
	correct definition of justice.

	CEPHALUS - SOCRATES - POLEMARCHUS

	Quite correct, Socrates, if Simonides is to be believed, said
	Polemarchus interposing.

	I fear, said Cephalus, that I must go now, for I have to look after the
	sacrifices, and I hand over the argument to Polemarchus and the company.
	EOF
	git add text.txt &&
	test_tick &&
	git commit -m "Initial revision" &&

	git checkout -b remote &&
	sed -e "
			s/\.  /\. /g
			s/[?]  /? /g
			s/    /	/g
			s/--/---/g
			s/but as concerning/but as con cerning/
			/CEPHALUS - SOCRATES - POLEMARCHUS/ d
		" text.txt >text.txt+ &&
	mv text.txt+ text.txt &&
	git commit -a -m "Remove cruft" &&

	git checkout master &&
	sed -e "
			s/\(not in his right mind\),\(.*\)/\1;\2Q/
			s/Quite correct\(.*\)/It is too correct\1Q/
			s/unintentionally/un intentionally/
			/un intentionally/ s/$/Q/
			s/Polemarchus interposing./Polemarchus, interposing.Q/
			/justice and holiness/ s/$/Q/
			/pay your debts/ s/$/Q/
		" text.txt | q_to_cr >text.txt+ &&
	mv text.txt+ text.txt &&
	git commit -a -m "Clarify" &&
	git show-branch --all
'

test_expect_success 'naive merge fails' '
	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive HEAD^ -- HEAD remote &&
	test_must_fail git update-index --refresh &&
	grep "<<<<<<" text.txt
'

test_expect_success '--ignore-space-change makes merge succeed' '
	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-space-change HEAD^ -- HEAD remote
'

test_expect_success 'naive cherry-pick fails' '
	git read-tree --reset -u HEAD &&
	test_must_fail git cherry-pick --no-commit remote &&
	git read-tree --reset -u HEAD &&
	test_must_fail git cherry-pick remote &&
	test_must_fail git update-index --refresh &&
	grep "<<<<<<" text.txt
'

test_expect_success '-Xignore-space-change makes cherry-pick succeed' '
	git read-tree --reset -u HEAD &&
	git cherry-pick --no-commit -Xignore-space-change remote
'

test_expect_success '--ignore-space-change: our w/s-only change wins' '
	q_to_cr <<-\EOF >expected &&
	    justice and holiness and is the nurse of his age and theQ
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
	grep "justice and holiness" text.txt >actual &&
	test_cmp expected actual
'

test_expect_success '--ignore-space-change: their real change wins over w/s' '
	cat <<-\EOF >expected &&
	it?---to speak the truth and to pay your debts---no more than this? And
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
	grep "pay your debts" text.txt >actual &&
	test_cmp expected actual
'

test_expect_success '--ignore-space-change: does not ignore new spaces' '
	cat <<-\EOF >expected1 &&
	Well said, Cephalus, I replied; but as con cerning justice, what is
	EOF
	q_to_cr <<-\EOF >expected2 &&
	un intentionally; and when he departs to the world below he is not inQ
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
	grep "Well said" text.txt >actual1 &&
	grep "when he departs" text.txt >actual2 &&
	test_cmp expected1 actual1 &&
	test_cmp expected2 actual2
'

test_expect_success '--ignore-all-space drops their new spaces' '
	cat <<-\EOF >expected &&
	Well said, Cephalus, I replied; but as concerning justice, what is
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-all-space HEAD^ -- HEAD remote &&
	grep "Well said" text.txt >actual &&
	test_cmp expected actual
'

test_expect_success '--ignore-all-space keeps our new spaces' '
	q_to_cr <<-\EOF >expected &&
	un intentionally; and when he departs to the world below he is not inQ
	EOF

	git read-tree --reset -u HEAD &&
	git merge-recursive --ignore-all-space HEAD^ -- HEAD remote &&
	grep "when he departs" text.txt >actual &&
	test_cmp expected actual
'

test_expect_success '--ignore-space-at-eol' '
	q_to_cr <<-\EOF >expected &&
	<<<<<<< HEAD
	is not in his right mind; ought I to give them back to him?  No oneQ
	=======
	is not in his right mind, ought I to give them back to him? No one
	>>>>>>> remote
	EOF

	git read-tree --reset -u HEAD &&
	test_must_fail git merge-recursive --ignore-space-at-eol \
						 HEAD^ -- HEAD remote &&
	conflict_hunks text.txt >actual &&
	test_cmp expected actual
'

test_done