comparison hgext/shelve.py @ 27021:f2554154509f

unshelve: add support for custom merge tools For parity with merge --tool, rebase --tool etc. rebase.rebase overwrites the tool in repo.ui, so we need to explicitly pass it down there too.
author Siddharth Agarwal <sid0@fb.com>
date Wed, 18 Nov 2015 15:11:23 -0800
parents cc2049184ece
children 156985f2dec0
comparison
equal deleted inserted replaced
27020:cc2049184ece 27021:f2554154509f
572 _('abort an incomplete unshelve operation')), 572 _('abort an incomplete unshelve operation')),
573 ('c', 'continue', None, 573 ('c', 'continue', None,
574 _('continue an incomplete unshelve operation')), 574 _('continue an incomplete unshelve operation')),
575 ('k', 'keep', None, 575 ('k', 'keep', None,
576 _('keep shelve after unshelving')), 576 _('keep shelve after unshelving')),
577 ('t', 'tool', '', _('specify merge tool')),
577 ('', 'date', '', 578 ('', 'date', '',
578 _('set date for temporary commits (DEPRECATED)'), _('DATE'))], 579 _('set date for temporary commits (DEPRECATED)'), _('DATE'))],
579 _('hg unshelve [SHELVED]')) 580 _('hg unshelve [SHELVED]'))
580 def unshelve(ui, repo, *shelved, **opts): 581 def unshelve(ui, repo, *shelved, **opts):
581 """restore a shelved change to the working directory 582 """restore a shelved change to the working directory
618 if abortf and continuef: 619 if abortf and continuef:
619 raise error.Abort(_('cannot use both abort and continue')) 620 raise error.Abort(_('cannot use both abort and continue'))
620 if shelved: 621 if shelved:
621 raise error.Abort(_('cannot combine abort/continue with ' 622 raise error.Abort(_('cannot combine abort/continue with '
622 'naming a shelved change')) 623 'naming a shelved change'))
624 if abortf and opts.get('tool', False):
625 ui.warn(_('tool option will be ignored\n'))
623 626
624 try: 627 try:
625 state = shelvedstate.load(repo) 628 state = shelvedstate.load(repo)
626 except IOError as err: 629 except IOError as err:
627 if err.errno != errno.ENOENT: 630 if err.errno != errno.ENOENT:
646 if not shelvedfile(repo, basename, 'patch').exists(): 649 if not shelvedfile(repo, basename, 'patch').exists():
647 raise error.Abort(_("shelved change '%s' not found") % basename) 650 raise error.Abort(_("shelved change '%s' not found") % basename)
648 651
649 oldquiet = ui.quiet 652 oldquiet = ui.quiet
650 wlock = lock = tr = None 653 wlock = lock = tr = None
654 forcemerge = ui.backupconfig('ui', 'forcemerge')
651 try: 655 try:
656 ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), 'unshelve')
652 wlock = repo.wlock() 657 wlock = repo.wlock()
653 lock = repo.lock() 658 lock = repo.lock()
654 659
655 tr = repo.transaction('unshelve', report=lambda x: None) 660 tr = repo.transaction('unshelve', report=lambda x: None)
656 oldtiprev = len(repo) 661 oldtiprev = len(repo)
704 try: 709 try:
705 rebase.rebase(ui, repo, **{ 710 rebase.rebase(ui, repo, **{
706 'rev' : [shelvectx.rev()], 711 'rev' : [shelvectx.rev()],
707 'dest' : str(tmpwctx.rev()), 712 'dest' : str(tmpwctx.rev()),
708 'keep' : True, 713 'keep' : True,
714 'tool' : opts.get('tool', ''),
709 }) 715 })
710 except error.InterventionRequired: 716 except error.InterventionRequired:
711 tr.close() 717 tr.close()
712 718
713 stripnodes = [repo.changelog.node(rev) 719 stripnodes = [repo.changelog.node(rev)
742 finally: 748 finally:
743 ui.quiet = oldquiet 749 ui.quiet = oldquiet
744 if tr: 750 if tr:
745 tr.release() 751 tr.release()
746 lockmod.release(lock, wlock) 752 lockmod.release(lock, wlock)
753 ui.restoreconfig(forcemerge)
747 754
748 @command('shelve', 755 @command('shelve',
749 [('A', 'addremove', None, 756 [('A', 'addremove', None,
750 _('mark new/missing files as added/removed before shelving')), 757 _('mark new/missing files as added/removed before shelving')),
751 ('', 'cleanup', None, 758 ('', 'cleanup', None,