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