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: