Mercurial > public > mercurial-scm > hg-stable
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: |