]> git.ipfire.org Git - thirdparty/git.git/blob - t/t3032-merge-recursive-options.sh
t3032-*.sh: Pass the -b (--binary) option to sed on cygwin
[thirdparty/git.git] / t / t3032-merge-recursive-options.sh
1 #!/bin/sh
2
3 test_description='merge-recursive options
4
5 * [master] Clarify
6 ! [remote] Remove cruft
7 --
8 + [remote] Remove cruft
9 * [master] Clarify
10 *+ [remote^] Initial revision
11 * ok 1: setup
12 '
13
14 . ./test-lib.sh
15
16 test_have_prereq SED_STRIPS_CR && SED_OPTIONS=-b
17
18 test_expect_success 'setup' '
19 conflict_hunks () {
20 sed $SED_OPTIONS -n -e "
21 /^<<<</ b inconflict
22 b
23 : inconflict
24 p
25 /^>>>>/ b
26 n
27 b inconflict
28 " "$@"
29 } &&
30
31 cat <<-\EOF >text.txt &&
32 Hope, he says, cherishes the soul of him who lives in
33 justice and holiness and is the nurse of his age and the
34 companion of his journey;--hope which is mightiest to sway
35 the restless soul of man.
36
37 How admirable are his words! And the great blessing of riches, I do
38 not say to every man, but to a good man, is, that he has had no
39 occasion to deceive or to defraud others, either intentionally or
40 unintentionally; and when he departs to the world below he is not in
41 any apprehension about offerings due to the gods or debts which he owes
42 to men. Now to this peace of mind the possession of wealth greatly
43 contributes; and therefore I say, that, setting one thing against
44 another, of the many advantages which wealth has to give, to a man of
45 sense this is in my opinion the greatest.
46
47 Well said, Cephalus, I replied; but as concerning justice, what is
48 it?--to speak the truth and to pay your debts--no more than this? And
49 even to this are there not exceptions? Suppose that a friend when in
50 his right mind has deposited arms with me and he asks for them when he
51 is not in his right mind, ought I to give them back to him? No one
52 would say that I ought or that I should be right in doing so, any more
53 than they would say that I ought always to speak the truth to one who
54 is in his condition.
55
56 You are quite right, he replied.
57
58 But then, I said, speaking the truth and paying your debts is not a
59 correct definition of justice.
60
61 CEPHALUS - SOCRATES - POLEMARCHUS
62
63 Quite correct, Socrates, if Simonides is to be believed, said
64 Polemarchus interposing.
65
66 I fear, said Cephalus, that I must go now, for I have to look after the
67 sacrifices, and I hand over the argument to Polemarchus and the company.
68 EOF
69 git add text.txt &&
70 test_tick &&
71 git commit -m "Initial revision" &&
72
73 git checkout -b remote &&
74 sed -e "
75 s/\. /\. /g
76 s/[?] /? /g
77 s/ / /g
78 s/--/---/g
79 s/but as concerning/but as con cerning/
80 /CEPHALUS - SOCRATES - POLEMARCHUS/ d
81 " text.txt >text.txt+ &&
82 mv text.txt+ text.txt &&
83 git commit -a -m "Remove cruft" &&
84
85 git checkout master &&
86 sed -e "
87 s/\(not in his right mind\),\(.*\)/\1;\2Q/
88 s/Quite correct\(.*\)/It is too correct\1Q/
89 s/unintentionally/un intentionally/
90 /un intentionally/ s/$/Q/
91 s/Polemarchus interposing./Polemarchus, interposing.Q/
92 /justice and holiness/ s/$/Q/
93 /pay your debts/ s/$/Q/
94 " text.txt | q_to_cr >text.txt+ &&
95 mv text.txt+ text.txt &&
96 git commit -a -m "Clarify" &&
97 git show-branch --all
98 '
99
100 test_expect_success 'naive merge fails' '
101 git read-tree --reset -u HEAD &&
102 test_must_fail git merge-recursive HEAD^ -- HEAD remote &&
103 test_must_fail git update-index --refresh &&
104 grep "<<<<<<" text.txt
105 '
106
107 test_expect_success '--ignore-space-change makes merge succeed' '
108 git read-tree --reset -u HEAD &&
109 git merge-recursive --ignore-space-change HEAD^ -- HEAD remote
110 '
111
112 test_expect_success '--ignore-space-change: our w/s-only change wins' '
113 q_to_cr <<-\EOF >expected &&
114 justice and holiness and is the nurse of his age and theQ
115 EOF
116
117 git read-tree --reset -u HEAD &&
118 git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
119 grep "justice and holiness" text.txt >actual &&
120 test_cmp expected actual
121 '
122
123 test_expect_success '--ignore-space-change: their real change wins over w/s' '
124 cat <<-\EOF >expected &&
125 it?---to speak the truth and to pay your debts---no more than this? And
126 EOF
127
128 git read-tree --reset -u HEAD &&
129 git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
130 grep "pay your debts" text.txt >actual &&
131 test_cmp expected actual
132 '
133
134 test_expect_success '--ignore-space-change: does not ignore new spaces' '
135 cat <<-\EOF >expected1 &&
136 Well said, Cephalus, I replied; but as con cerning justice, what is
137 EOF
138 q_to_cr <<-\EOF >expected2 &&
139 un intentionally; and when he departs to the world below he is not inQ
140 EOF
141
142 git read-tree --reset -u HEAD &&
143 git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
144 grep "Well said" text.txt >actual1 &&
145 grep "when he departs" text.txt >actual2 &&
146 test_cmp expected1 actual1 &&
147 test_cmp expected2 actual2
148 '
149
150 test_expect_success '--ignore-all-space drops their new spaces' '
151 cat <<-\EOF >expected &&
152 Well said, Cephalus, I replied; but as concerning justice, what is
153 EOF
154
155 git read-tree --reset -u HEAD &&
156 git merge-recursive --ignore-all-space HEAD^ -- HEAD remote &&
157 grep "Well said" text.txt >actual &&
158 test_cmp expected actual
159 '
160
161 test_expect_success '--ignore-all-space keeps our new spaces' '
162 q_to_cr <<-\EOF >expected &&
163 un intentionally; and when he departs to the world below he is not inQ
164 EOF
165
166 git read-tree --reset -u HEAD &&
167 git merge-recursive --ignore-all-space HEAD^ -- HEAD remote &&
168 grep "when he departs" text.txt >actual &&
169 test_cmp expected actual
170 '
171
172 test_expect_success '--ignore-space-at-eol' '
173 q_to_cr <<-\EOF >expected &&
174 <<<<<<< HEAD
175 is not in his right mind; ought I to give them back to him? No oneQ
176 =======
177 is not in his right mind, ought I to give them back to him? No one
178 >>>>>>> remote
179 EOF
180
181 git read-tree --reset -u HEAD &&
182 test_must_fail git merge-recursive --ignore-space-at-eol \
183 HEAD^ -- HEAD remote &&
184 conflict_hunks text.txt >actual &&
185 test_cmp expected actual
186 '
187
188 test_done