Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/simplemerge.py @ 22024:372ae2745acf
simplemerge: support three labels when merging
If a third label is provided it will be used for the "base" content:
<<<<<<< local
content
from
local
||||||| base
former
common
=======
other
conflicting
>>>>>>> other
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Tue, 05 Aug 2014 15:10:50 -0700 |
parents | f18830651811 |
children | 83df50a8d61c |
comparison
equal
deleted
inserted
replaced
22023:f18830651811 | 22024:372ae2745acf |
---|---|
377 raise util.Abort(msg) | 377 raise util.Abort(msg) |
378 return text | 378 return text |
379 | 379 |
380 name_a = local | 380 name_a = local |
381 name_b = other | 381 name_b = other |
382 name_base = None | |
382 labels = opts.get('label', []) | 383 labels = opts.get('label', []) |
383 if len(labels) > 0: | 384 if len(labels) > 0: |
384 name_a = labels[0] | 385 name_a = labels[0] |
385 if len(labels) > 1: | 386 if len(labels) > 1: |
386 name_b = labels[1] | 387 name_b = labels[1] |
387 if len(labels) > 2: | 388 if len(labels) > 2: |
388 raise util.Abort(_("can only specify two labels.")) | 389 name_base = labels[2] |
390 if len(labels) > 3: | |
391 raise util.Abort(_("can only specify three labels.")) | |
389 | 392 |
390 try: | 393 try: |
391 localtext = readfile(local) | 394 localtext = readfile(local) |
392 basetext = readfile(base) | 395 basetext = readfile(base) |
393 othertext = readfile(other) | 396 othertext = readfile(other) |
400 out = opener(os.path.basename(local), "w", atomictemp=True) | 403 out = opener(os.path.basename(local), "w", atomictemp=True) |
401 else: | 404 else: |
402 out = sys.stdout | 405 out = sys.stdout |
403 | 406 |
404 m3 = Merge3Text(basetext, localtext, othertext) | 407 m3 = Merge3Text(basetext, localtext, othertext) |
405 for line in m3.merge_lines(name_a=name_a, name_b=name_b): | 408 extrakwargs = {} |
409 if name_base is not None: | |
410 extrakwargs['base_marker'] = '|||||||' | |
411 extrakwargs['name_base'] = name_base | |
412 for line in m3.merge_lines(name_a=name_a, name_b=name_b, **extrakwargs): | |
406 out.write(line) | 413 out.write(line) |
407 | 414 |
408 if not opts.get('print'): | 415 if not opts.get('print'): |
409 out.close() | 416 out.close() |
410 | 417 |