##// END OF EJS Templates
merge: implement --tool arguments using new ui.forcemerge configurable...
Steve Borho -
r12788:de793925 default
parent child Browse files
Show More
@@ -2586,12 +2586,6 b' def merge(ui, repo, node=None, **opts):'
2586 2586 if not node:
2587 2587 node = opts.get('rev')
2588 2588
2589 t = opts.get('tool')
2590 if t:
2591 if 'HGMERGE' in os.environ:
2592 os.environ['HGMERGE'] = ''
2593 ui.setconfig('ui', 'merge', t)
2594
2595 2589 if not node:
2596 2590 branch = repo.changectx(None).branch()
2597 2591 bheads = repo.branchheads(branch)
@@ -2632,7 +2626,12 b' def merge(ui, repo, node=None, **opts):'
2632 2626 displayer.close()
2633 2627 return 0
2634 2628
2635 return hg.merge(repo, node, force=opts.get('force'))
2629 try:
2630 # ui.forcemerge is an internal variable, do not document
2631 ui.setconfig('ui', 'forcemerge', opts.get('tool', ''))
2632 return hg.merge(repo, node, force=opts.get('force'))
2633 finally:
2634 ui.setconfig('ui', 'forcemerge', '')
2636 2635
2637 2636 def outgoing(ui, repo, dest=None, **opts):
2638 2637 """show changesets not found in the destination
@@ -2979,12 +2978,6 b' def resolve(ui, repo, *pats, **opts):'
2979 2978 raise util.Abort(_('no files or directories specified; '
2980 2979 'use --all to remerge all files'))
2981 2980
2982 t = opts.get('tool')
2983 if t:
2984 if 'HGMERGE' in os.environ:
2985 os.environ['HGMERGE'] = ''
2986 ui.setconfig('ui', 'merge', t)
2987
2988 2981 ms = mergemod.mergestate(repo)
2989 2982 m = cmdutil.match(repo, pats, opts)
2990 2983 ret = 0
@@ -3010,9 +3003,13 b' def resolve(ui, repo, *pats, **opts):'
3010 3003 a = repo.wjoin(f)
3011 3004 util.copyfile(a, a + ".resolve")
3012 3005
3013 # resolve file
3014 if ms.resolve(f, wctx, mctx):
3015 ret = 1
3006 try:
3007 # resolve file
3008 ui.setconfig('ui', 'forcemerge', opts.get('tool', ''))
3009 if ms.resolve(f, wctx, mctx):
3010 ret = 1
3011 finally:
3012 ui.setconfig('ui', 'forcemerge', '')
3016 3013
3017 3014 # replace filemerge's .orig file with our resolve file
3018 3015 util.rename(a + ".resolve", a + ".orig")
@@ -54,7 +54,17 b' def _picktool(repo, ui, path, binary, sy'
54 54 return True
55 55 return False
56 56
57 # HGMERGE takes precedence
57 # forcemerge comes from command line arguments, highest priority
58 force = ui.config('ui', 'forcemerge')
59 if force:
60 toolpath = _findtool(ui, force)
61 if toolpath:
62 return (force, '"' + toolpath + '"')
63 else:
64 # mimic HGMERGE if given tool not found
65 return (force, force)
66
67 # HGMERGE takes next precedence
58 68 hgmerge = os.environ.get("HGMERGE")
59 69 if hgmerge:
60 70 return (hgmerge, hgmerge)
@@ -37,7 +37,7 b' a file, once as a link. Bundle was gener'
37 37 Merge them and display *_ISLINK vars
38 38 merge heads
39 39
40 $ HGMERGE="python ../echo.py" hg merge
40 $ hg merge --tool="python ../echo.py"
41 41 HG_FILE l
42 42 HG_MY_ISLINK 1
43 43 HG_OTHER_ISLINK 0
@@ -506,6 +506,49 b' Premerge'
506 506 $ echo
507 507
508 508
509 ui.merge specifies internal:other but is overruled by --tool=false
510
511 $ domerge -r 2 --config ui.merge=internal:other --tool=false
512 [merge-tools]
513 false.whatever=
514 true.priority=1
515 true.executable=cat
516 # hg update -C 1
517 # hg merge -r 2 --config ui.merge=internal:other --tool=false
518 merging f
519 merging f failed!
520 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
521 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
522 # cat f
523 revision 1
524 space
525 # hg stat
526 M f
527 ? f.orig
528
529 HGMERGE specifies internal:other but is overruled by --tool=false
530
531 $ HGMERGE=internal:other ; export HGMERGE
532 $ domerge -r 2 --tool=false
533 [merge-tools]
534 false.whatever=
535 true.priority=1
536 true.executable=cat
537 # hg update -C 1
538 # hg merge -r 2 --tool=false
539 merging f
540 merging f failed!
541 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
542 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
543 # cat f
544 revision 1
545 space
546 # hg stat
547 M f
548 ? f.orig
549
550 $ unset HGMERGE # make sure HGMERGE doesn't interfere with remaining tests
551
509 552 Default is silent simplemerge:
510 553
511 554 $ domerge -r 3
@@ -7,7 +7,6 b''
7 7 > f.write("merge %s %s %s" % (sys.argv[1], sys.argv[2], sys.argv[3]))
8 8 > f.close()
9 9 > EOF
10 $ HGMERGE="python ../merge"; export HGMERGE
11 10
12 11 perform a test merge with possible renaming
13 12 args:
@@ -49,7 +48,7 b' args:'
49 48 > echo "--------------"
50 49 > echo "test L:$1 R:$2 W:$3 - $4"
51 50 > echo "--------------"
52 > hg merge -y --debug --traceback
51 > hg merge -y --debug --traceback --tool="python ../merge"
53 52 >
54 53 > echo "--------------"
55 54 > hg status -camC -X rev
@@ -21,7 +21,7 b' create a second head'
21 21
22 22 failing merge
23 23
24 $ HGMERGE=internal:fail hg merge
24 $ hg merge --tool=internal:fail
25 25 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
26 26 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
27 27 [1]
General Comments 0
You need to be logged in to leave comments. Login now