Mercurial > hg > mercurial-crew
comparison mercurial/simplemerge.py @ 26831:ed12abab068e
simplemerge: enable option to resolve conflicts one way
With this change, the simplemerge algorithm grows an option to only
return the local or the other hunk in a conflicting region.
author | Jordi GutiƩrrez Hermoso <jordigh@octave.org> |
---|---|
date | Wed, 12 Aug 2015 08:53:01 -0400 (2015-08-12) |
parents | 09d6725cbc60 |
children | 56b2bcea2529 |
comparison
equal
deleted
inserted
replaced
26830:3095b1027661 | 26831:ed12abab068e |
---|---|
88 name_b=None, | 88 name_b=None, |
89 name_base=None, | 89 name_base=None, |
90 start_marker='<<<<<<<', | 90 start_marker='<<<<<<<', |
91 mid_marker='=======', | 91 mid_marker='=======', |
92 end_marker='>>>>>>>', | 92 end_marker='>>>>>>>', |
93 base_marker=None): | 93 base_marker=None, |
94 localorother=None): | |
94 """Return merge in cvs-like form. | 95 """Return merge in cvs-like form. |
95 """ | 96 """ |
96 self.conflicts = False | 97 self.conflicts = False |
97 newline = '\n' | 98 newline = '\n' |
98 if len(self.a) > 0: | 99 if len(self.a) > 0: |
117 yield self.a[i] | 118 yield self.a[i] |
118 elif what == 'b': | 119 elif what == 'b': |
119 for i in range(t[1], t[2]): | 120 for i in range(t[1], t[2]): |
120 yield self.b[i] | 121 yield self.b[i] |
121 elif what == 'conflict': | 122 elif what == 'conflict': |
122 self.conflicts = True | 123 if localorother == 'local': |
123 if start_marker is not None: | 124 for i in range(t[3], t[4]): |
124 yield start_marker + newline | 125 yield self.a[i] |
125 for i in range(t[3], t[4]): | 126 elif localorother == 'other': |
126 yield self.a[i] | 127 for i in range(t[5], t[6]): |
127 if base_marker is not None: | 128 yield self.b[i] |
128 yield base_marker + newline | 129 else: |
129 for i in range(t[1], t[2]): | 130 self.conflicts = True |
130 yield self.base[i] | 131 if start_marker is not None: |
131 if mid_marker is not None: | 132 yield start_marker + newline |
132 yield mid_marker + newline | 133 for i in range(t[3], t[4]): |
133 for i in range(t[5], t[6]): | 134 yield self.a[i] |
134 yield self.b[i] | 135 if base_marker is not None: |
135 if end_marker is not None: | 136 yield base_marker + newline |
136 yield end_marker + newline | 137 for i in range(t[1], t[2]): |
138 yield self.base[i] | |
139 if mid_marker is not None: | |
140 yield mid_marker + newline | |
141 for i in range(t[5], t[6]): | |
142 yield self.b[i] | |
143 if end_marker is not None: | |
144 yield end_marker + newline | |
137 else: | 145 else: |
138 raise ValueError(what) | 146 raise ValueError(what) |
139 | 147 |
140 def merge_groups(self): | 148 def merge_groups(self): |
141 """Yield sequence of line groups. Each one is a tuple: | 149 """Yield sequence of line groups. Each one is a tuple: |
388 out = opener(os.path.basename(local), "w", atomictemp=True) | 396 out = opener(os.path.basename(local), "w", atomictemp=True) |
389 else: | 397 else: |
390 out = sys.stdout | 398 out = sys.stdout |
391 | 399 |
392 m3 = Merge3Text(basetext, localtext, othertext) | 400 m3 = Merge3Text(basetext, localtext, othertext) |
393 extrakwargs = {} | 401 extrakwargs = {"localorother": opts.get("localorother", None)} |
394 if mode == 'union': | 402 if mode == 'union': |
395 extrakwargs['start_marker'] = None | 403 extrakwargs['start_marker'] = None |
396 extrakwargs['mid_marker'] = None | 404 extrakwargs['mid_marker'] = None |
397 extrakwargs['end_marker'] = None | 405 extrakwargs['end_marker'] = None |
398 elif name_base is not None: | 406 elif name_base is not None: |