Mercurial > hg
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, |