# HG changeset patch # User Siddharth Agarwal # Date 1447888283 28800 # Node ID f2554154509fc133eeb1150a83a9663fe85b10ae # Parent cc2049184ece57e66f50ce87dfb76091e50f55ad 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. diff -r cc2049184ece -r f2554154509f hgext/shelve.py --- a/hgext/shelve.py Wed Nov 18 15:18:16 2015 -0800 +++ b/hgext/shelve.py Wed Nov 18 15:11:23 2015 -0800 @@ -574,6 +574,7 @@ _('continue an incomplete unshelve operation')), ('k', 'keep', None, _('keep shelve after unshelving')), + ('t', 'tool', '', _('specify merge tool')), ('', 'date', '', _('set date for temporary commits (DEPRECATED)'), _('DATE'))], _('hg unshelve [SHELVED]')) @@ -620,6 +621,8 @@ if shelved: raise error.Abort(_('cannot combine abort/continue with ' 'naming a shelved change')) + if abortf and opts.get('tool', False): + ui.warn(_('tool option will be ignored\n')) try: state = shelvedstate.load(repo) @@ -648,7 +651,9 @@ oldquiet = ui.quiet wlock = lock = tr = None + forcemerge = ui.backupconfig('ui', 'forcemerge') try: + ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), 'unshelve') wlock = repo.wlock() lock = repo.lock() @@ -706,6 +711,7 @@ 'rev' : [shelvectx.rev()], 'dest' : str(tmpwctx.rev()), 'keep' : True, + 'tool' : opts.get('tool', ''), }) except error.InterventionRequired: tr.close() @@ -744,6 +750,7 @@ if tr: tr.release() lockmod.release(lock, wlock) + ui.restoreconfig(forcemerge) @command('shelve', [('A', 'addremove', None, diff -r cc2049184ece -r f2554154509f tests/test-shelve.t --- a/tests/test-shelve.t Wed Nov 18 15:18:16 2015 -0800 +++ b/tests/test-shelve.t Wed Nov 18 15:11:23 2015 -0800 @@ -469,6 +469,29 @@ if we resolve a conflict while unshelving, the unshelve should succeed + $ hg unshelve --tool :merge-other --keep + unshelving change 'default' + temporarily committing pending changes (restore with 'hg unshelve --abort') + rebasing shelved changes + rebasing 6:c5e6910e7601 "changes to 'second'" (tip) + merging a/a + $ hg parents -q + 4:33f7f61e6c5e + $ hg shelve -l + default (*)* changes to 'second' (glob) + $ hg status + M a/a + A foo/foo + $ cat a/a + a + c + a + $ cat > a/a << EOF + > a + > c + > x + > EOF + $ HGMERGE=true hg unshelve unshelving change 'default' temporarily committing pending changes (restore with 'hg unshelve --abort') @@ -730,7 +753,8 @@ >>>>>>> source: 23b29cada8ba - shelve: changes to 'commit stuff' $ cat f.orig g - $ hg unshelve --abort + $ hg unshelve --abort -t false + tool option will be ignored rebase aborted unshelve of 'default' aborted $ hg st