##// END OF EJS Templates
simplemerge: make minimize() a free function...
Martin von Zweigbergk -
r49412:ad0c6bf6 default
parent child Browse files
Show More
@@ -214,50 +214,6 b' class Merge3Text(object):'
214 ia = aend
214 ia = aend
215 ib = bend
215 ib = bend
216
216
217 def minimize(self, merge_groups):
218 """Trim conflict regions of lines where A and B sides match.
219
220 Lines where both A and B have made the same changes at the beginning
221 or the end of each merge region are eliminated from the conflict
222 region and are instead considered the same.
223 """
224 for what, lines in merge_groups:
225 if what != b"conflict":
226 yield what, lines
227 continue
228 base_lines, a_lines, b_lines = lines
229 alen = len(a_lines)
230 blen = len(b_lines)
231
232 # find matches at the front
233 ii = 0
234 while ii < alen and ii < blen and a_lines[ii] == b_lines[ii]:
235 ii += 1
236 startmatches = ii
237
238 # find matches at the end
239 ii = 0
240 while (
241 ii < alen and ii < blen and a_lines[-ii - 1] == b_lines[-ii - 1]
242 ):
243 ii += 1
244 endmatches = ii
245
246 if startmatches > 0:
247 yield b'same', a_lines[:startmatches]
248
249 yield (
250 b'conflict',
251 (
252 base_lines,
253 a_lines[startmatches : alen - endmatches],
254 b_lines[startmatches : blen - endmatches],
255 ),
256 )
257
258 if endmatches > 0:
259 yield b'same', a_lines[alen - endmatches :]
260
261 def find_sync_regions(self):
217 def find_sync_regions(self):
262 """Return a list of sync regions, where both descendants match the base.
218 """Return a list of sync regions, where both descendants match the base.
263
219
@@ -350,6 +306,49 b' def _detect_newline(m3):'
350 return b'\n'
306 return b'\n'
351
307
352
308
309 def _minimize(merge_groups):
310 """Trim conflict regions of lines where A and B sides match.
311
312 Lines where both A and B have made the same changes at the beginning
313 or the end of each merge region are eliminated from the conflict
314 region and are instead considered the same.
315 """
316 for what, lines in merge_groups:
317 if what != b"conflict":
318 yield what, lines
319 continue
320 base_lines, a_lines, b_lines = lines
321 alen = len(a_lines)
322 blen = len(b_lines)
323
324 # find matches at the front
325 ii = 0
326 while ii < alen and ii < blen and a_lines[ii] == b_lines[ii]:
327 ii += 1
328 startmatches = ii
329
330 # find matches at the end
331 ii = 0
332 while ii < alen and ii < blen and a_lines[-ii - 1] == b_lines[-ii - 1]:
333 ii += 1
334 endmatches = ii
335
336 if startmatches > 0:
337 yield b'same', a_lines[:startmatches]
338
339 yield (
340 b'conflict',
341 (
342 base_lines,
343 a_lines[startmatches : alen - endmatches],
344 b_lines[startmatches : blen - endmatches],
345 ),
346 )
347
348 if endmatches > 0:
349 yield b'same', a_lines[alen - endmatches :]
350
351
353 def render_minimized(
352 def render_minimized(
354 m3,
353 m3,
355 name_a=None,
354 name_a=None,
@@ -366,7 +365,7 b' def render_minimized('
366 if name_b:
365 if name_b:
367 end_marker = end_marker + b' ' + name_b
366 end_marker = end_marker + b' ' + name_b
368 merge_groups = m3.merge_groups()
367 merge_groups = m3.merge_groups()
369 merge_groups = m3.minimize(merge_groups)
368 merge_groups = _minimize(merge_groups)
370 lines = []
369 lines = []
371 for what, group_lines in merge_groups:
370 for what, group_lines in merge_groups:
372 if what == b'conflict':
371 if what == b'conflict':
General Comments 0
You need to be logged in to leave comments. Login now