comparison mercurial/simplemerge.py @ 48584:ce8c82a5cd65

simplemerge: convert `merge_lines()` away from generator We always consume all the lines and put them in a list anyway. By making the function not a generator, we can later make it return an additional value (to indicate if there were conflicts). Differential Revision: https://phab.mercurial-scm.org/D11973
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 07 Jan 2022 18:42:31 -0800
parents c91418480cb0
children c6649c53073f
comparison
equal deleted inserted replaced
48583:c91418480cb0 48584:ce8c82a5cd65
97 end_marker=b'>>>>>>>', 97 end_marker=b'>>>>>>>',
98 base_marker=None, 98 base_marker=None,
99 minimize=False, 99 minimize=False,
100 ): 100 ):
101 """Return merge in cvs-like form.""" 101 """Return merge in cvs-like form."""
102 self.conflicts = False 102 conflicts = False
103 newline = b'\n' 103 newline = b'\n'
104 if len(self.a) > 0: 104 if len(self.a) > 0:
105 if self.a[0].endswith(b'\r\n'): 105 if self.a[0].endswith(b'\r\n'):
106 newline = b'\r\n' 106 newline = b'\r\n'
107 elif self.a[0].endswith(b'\r'): 107 elif self.a[0].endswith(b'\r'):
113 if name_base and base_marker: 113 if name_base and base_marker:
114 base_marker = base_marker + b' ' + name_base 114 base_marker = base_marker + b' ' + name_base
115 merge_groups = self.merge_groups() 115 merge_groups = self.merge_groups()
116 if minimize: 116 if minimize:
117 merge_groups = self.minimize(merge_groups) 117 merge_groups = self.minimize(merge_groups)
118 for what, lines in merge_groups: 118 lines = []
119 for what, group_lines in merge_groups:
119 if what == b'conflict': 120 if what == b'conflict':
120 base_lines, a_lines, b_lines = lines 121 base_lines, a_lines, b_lines = group_lines
121 self.conflicts = True 122 conflicts = True
122 if start_marker is not None: 123 if start_marker is not None:
123 yield start_marker + newline 124 lines.append(start_marker + newline)
124 for line in a_lines: 125 lines.extend(a_lines)
125 yield line
126 if base_marker is not None: 126 if base_marker is not None:
127 yield base_marker + newline 127 lines.append(base_marker + newline)
128 for line in base_lines: 128 lines.extend(base_lines)
129 yield line
130 if mid_marker is not None: 129 if mid_marker is not None:
131 yield mid_marker + newline 130 lines.append(mid_marker + newline)
132 for line in b_lines: 131 lines.extend(b_lines)
133 yield line
134 if end_marker is not None: 132 if end_marker is not None:
135 yield end_marker + newline 133 lines.append(end_marker + newline)
136 else: 134 else:
137 for line in lines: 135 lines.extend(group_lines)
138 yield line 136 return lines, conflicts
139 137
140 def merge_groups(self): 138 def merge_groups(self):
141 """Yield sequence of line groups. Each one is a tuple: 139 """Yield sequence of line groups. Each one is a tuple:
142 140
143 'unchanged', lines 141 'unchanged', lines
508 } 506 }
509 if mode == b'merge3': 507 if mode == b'merge3':
510 extrakwargs['base_marker'] = b'|||||||' 508 extrakwargs['base_marker'] = b'|||||||'
511 extrakwargs['name_base'] = name_base 509 extrakwargs['name_base'] = name_base
512 extrakwargs['minimize'] = False 510 extrakwargs['minimize'] = False
513 lines = list( 511 lines, conflicts = m3.merge_lines(
514 m3.merge_lines(name_a=name_a, name_b=name_b, **extrakwargs) 512 name_a=name_a, name_b=name_b, **extrakwargs
515 ) 513 )
516 conflicts = m3.conflicts
517 514
518 mergedtext = b''.join(lines) 515 mergedtext = b''.join(lines)
519 if opts.get('print'): 516 if opts.get('print'):
520 ui.fout.write(mergedtext) 517 ui.fout.write(mergedtext)
521 else: 518 else: