Mercurial > evolve
changeset 758:6b10897dcba7 stable
current release is stable enought
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Thu, 26 Dec 2013 17:21:01 -0800 |
parents | dcda64966616 (current diff) 0ff862dcddbd (diff) |
children | 57874b249940 4a74288c671c |
files | |
diffstat | 20 files changed, 382 insertions(+), 228 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Sat Aug 10 17:30:44 2013 -0400 +++ b/.hgtags Thu Dec 26 17:21:01 2013 -0800 @@ -18,3 +18,4 @@ f9d305deeff3dba782e65faf4ef3fd1569995859 2.1.0 862b6b71a35836e81f090ba7229c2888e8ed2f9f 3.0.0 cdb52bbbe5b8770d5e68943b7e73bee4ba136ecc 3.1.0 +c3ba8a965a7a173e388d84819e936ea9bae9797f 3.2.0
--- a/MANIFEST.in Sat Aug 10 17:30:44 2013 -0400 +++ b/MANIFEST.in Thu Dec 26 17:21:01 2013 -0800 @@ -7,6 +7,7 @@ include docs/static/*.svg include hgext/__init__.py include hgext/evolve.py +include hgext/pushexperiment.py include setup.py include README include COPYING
--- a/README Sat Aug 10 17:30:44 2013 -0400 +++ b/README Thu Dec 26 17:21:01 2013 -0800 @@ -42,6 +42,19 @@ Changelog ========= +3.2.0 -- 2013-11-15 + +- conform to the Mercurial custom of lowercase messages +- added a small extension to experiment with obsolescence marker push +- amend: drop the deprecated note option +- amend: use core mechanism for amend (fix multiple bugs) +- parents command: add "working directory parent is obsolete" message +- evolve command: allow updating to the successor if the parent is + obsolete +- gdown and gup commands: add next and previous alias, respectively +- make grab aliases compatible with Mercurial 2.8 +- Tested with 2.6, 2.7 and 2.8 + 3.1.0 -- 2013-02-11 - amend: drop deprecated --change option for amend
--- a/debian/changelog Sat Aug 10 17:30:44 2013 -0400 +++ b/debian/changelog Thu Dec 26 17:21:01 2013 -0800 @@ -1,3 +1,9 @@ +mercurial-evolve (3.2.0-1) UNRELEASED; urgency=low + + * New upstream release. + + -- Julien Cristau <julien.cristau@logilab.fr> Tue, 04 Jun 2013 17:28:02 +0200 + mercurial-evolve (3.1.0-1) UNRELEASED; urgency=low * New upstream release.
--- a/debian/control Sat Aug 10 17:30:44 2013 -0400 +++ b/debian/control Thu Dec 26 17:21:01 2013 -0800 @@ -7,8 +7,7 @@ Pierre-Yves David <pierre-yves.david@logilab.fr>, Standards-Version: 3.9.3 Build-Depends: - mercurial (>=2.5~), - mercurial-common (>=2.5~), + mercurial (>=2.6~), python, debhelper (>= 8), python-sphinx (>= 1.0.8), @@ -22,7 +21,7 @@ Depends: ${python:Depends}, ${misc:Depends}, - mercurial (>= 2.5), + mercurial (>= 2.6), Description: evolve extension for Mercurial This package provides the experimental "evolve" extension for the Mercurial DVCS.
--- a/debian/rules Sat Aug 10 17:30:44 2013 -0400 +++ b/debian/rules Thu Dec 26 17:21:01 2013 -0800 @@ -1,14 +1,12 @@ #!/usr/bin/make -f -%: +clean %: dh $@ --with python2 --buildsystem=python_distutils build: dh build --with python2 --buildsystem=python_distutils $(MAKE) -C docs -.PHONY: build - ifeq (,$(filter nocheck, $(DEB_BUILD_OPTIONS))) override_dh_auto_test: cd tests && python run-tests.py --with-hg=`which hg` @@ -18,3 +16,12 @@ # avoid conflict with mercurial's own hgext/__init__.py find debian -name __init__.py -delete dh_python2 + +clean: clean-docs + +clean-docs: + rm -rf html + rm -f docs/static/logo-evolve.ico + rm -f docs/tutorials/tutorial.rst + +.PHONY: build clean clean-docs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/debian/source/format Thu Dec 26 17:21:01 2013 -0800 @@ -0,0 +1,1 @@ +3.0 (quilt)
--- a/hgext/evolve.py Sat Aug 10 17:30:44 2013 -0400 +++ b/hgext/evolve.py Thu Dec 26 17:21:01 2013 -0800 @@ -19,7 +19,7 @@ - improves some aspect of the early implementation in 2.3 ''' -testedwith = '2.5' +testedwith = '2.7 2.7.1 2.7.2 2.8 2.8.1' buglink = 'https://bitbucket.org/marmoute/mutable-history/issues' import sys @@ -381,7 +381,7 @@ if ui.config('alias', 'odiff', None) is None: ui.setconfig('alias', 'odiff', "diff --hidden --rev 'limit(precursors(.),1)' --rev .") if ui.config('alias', 'grab', None) is None: - ui.setconfig('alias', 'grab', "rebase --dest . --rev $1") + ui.setconfig('alias', 'grab', "! $HG rebase --dest . --rev $@ && $HG up tip") ### Troubled revset symbol @@ -557,12 +557,13 @@ # This section take care of issue warning to the user when troubles appear @eh.wrapcommand("update") +@eh.wrapcommand("parents") @eh.wrapcommand("pull") def wrapmayobsoletewc(origfn, ui, repo, *args, **opts): """Warn that the working directory parent is an obsolete changeset""" res = origfn(ui, repo, *args, **opts) if repo['.'].obsolete(): - ui.warn(_('Working directory parent is obsolete\n')) + ui.warn(_('working directory parent is obsolete!\n')) return res # XXX this could wrap transaction code @@ -603,13 +604,11 @@ if not repo.local(): return - opush = repo.push - class evolvingrepo(repo.__class__): def push(self, remote, *args, **opts): """wrapper around pull that pull obsolete relation""" try: - result = opush(remote, *args, **opts) + result = super(evolvingrepo, self).push(remote, *args, **opts) except util.Abort, ex: hint = _("use 'hg evolve' to get a stable history " "or --force to ignore warnings") @@ -849,6 +848,8 @@ - rebase unstable changeset to make it stable again, - create proper diff from bumped changeset, - merge divergent changesets. + - update to a successor if the working directory parent is + obsolete By default, take the first trouble changeset that looks relevant. @@ -880,6 +881,40 @@ tr = _picknexttroubled(ui, repo, anyopt or allopt) if tr is None: + if repo['.'].obsolete(): + displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) + successors = set() + + for successorsset in obsolete.successorssets(repo, repo['.'].node()): + for nodeid in successorsset: + successors.add(repo[nodeid]) + + if not successors: + ui.warn(_('parent is obsolete without successors; ' + + 'likely killed\n')) + return 2 + + elif len(successors) > 1: + ui.warn(_('parent is obsolete with multiple successors:\n')) + + for ctx in sorted(successors, key=lambda ctx: ctx.rev()): + displayer.show(ctx) + + return 2 + + else: + ctx = successors.pop() + + ui.status(_('update:')) + if not ui.quiet: + displayer.show(ctx) + + if dryrunopt: + print 'hg update %s' % ctx.rev() + return 0 + else: + return hg.update(repo, ctx.rev()) + troubled = repo.revs('troubled()') if troubled: ui.write_err(_('nothing to evolve here\n')) @@ -1166,7 +1201,7 @@ try: repo.dirstate.setparents(divergent.node(), node.nullid) oldlen = len(repo) - amend(ui, repo) + amend(ui, repo, message='', logfile='') if oldlen == len(repo): new = divergent # no changes @@ -1194,16 +1229,17 @@ newer = [n for n in newer if n and ctx.node() not in n] if newer: return base, tuple(ctx._repo[o] for o in newer[0]) - raise KeyError('Base seem unknown. This case is not handled yet.') + raise util.Abort('base of divergent changeset not found', + hint='this case is not yet handled') shorttemplate = '[{rev}] {desc|firstline}\n' -@command('^gdown', +@command('^gdown|previous', [], '') -def cmdgdown(ui, repo): +def cmdprevious(ui, repo): """update to parent and display summary lines""" wkctx = repo[None] wparents = wkctx.parents() @@ -1223,10 +1259,10 @@ ui.warn(_('multiple parents, explicitly update to one\n')) return 1 -@command('^gup', +@command('^gup|next', [], '') -def cmdup(ui, repo): +def cmdnext(ui, repo): """update to child and display summary lines""" wkctx = repo[None] wparents = wkctx.parents() @@ -1236,7 +1272,7 @@ children = [ctx for ctx in wparents[0].children() if not ctx.obsolete()] displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) if not children: - ui.warn(_('No non-obsolete children\n')) + ui.warn(_('no non-obsolete children\n')) return 1 if len(children) == 1: c = children[0] @@ -1246,7 +1282,7 @@ else: for c in children: displayer.show(c) - ui.warn(_('Multiple non-obsolete children, explicitly update to one\n')) + ui.warn(_('multiple non-obsolete children, explicitly update to one\n')) return 1 def _reachablefrombookmark(repo, revs, mark): @@ -1378,8 +1414,10 @@ @command('amend|refresh', [('A', 'addremove', None, _('mark new/missing files as added/removed before committing')), - ('n', 'note', '', _('use text as commit message for this update (DEPRECATED)')), ('e', 'edit', False, _('invoke editor on commit messages')), + ('', 'close-branch', None, + _('mark a branch as closed, hiding it from the branch list')), + ('s', 'secret', None, _('use the secret phase for committing')), ] + walkopts + commitopts + commitopts2, _('[OPTION]... [FILE]...')) def amend(ui, repo, *pats, **opts): @@ -1400,79 +1438,13 @@ Returns 0 on success, 1 if nothing changed. """ - - # determine updates to subsume - old = scmutil.revsingle(repo, '.') - metadata = _getmetadata(**opts) - - lock = repo.lock() - try: - wlock = repo.wlock() - try: - if old.phase() == phases.public: - raise util.Abort(_("can not rewrite immutable changeset %s") - % old) - tr = repo.transaction('amend') - try: - oldphase = old.phase() - # commit current changes as update - # code copied from commands.commit to avoid noisy messages - ciopts = dict(opts) - ciopts.pop('message', None) - ciopts.pop('logfile', None) - ciopts['message'] = opts.get('note') or ('amends %s' % old.hex()) - e = cmdutil.commiteditor - def commitfunc(ui, repo, message, match, opts): - return repo.commit(message, opts.get('user'), opts.get('date'), - match, editor=e) - revcount = len(repo) - tempid = cmdutil.commit(ui, repo, commitfunc, pats, ciopts) - if len(repo) == revcount: - # No revision created - tempid = None - - # find all changesets to be considered updates - head = repo['.'] - updatenodes = set(repo.changelog.nodesbetween( - roots=[old.node()], heads=[head.node()])[0]) - updatenodes.remove(old.node()) - okoptions = ['message', 'logfile', 'edit', 'user'] - if not updatenodes: - for o in okoptions: - if opts.get(o): - break - else: - raise error.Abort(_('no updates found')) - updates = [repo[n] for n in updatenodes] - - # perform amend - if opts.get('edit'): - opts['force_editor'] = True - newid, created = rewrite(repo, old, updates, head, - [old.p1().node(), old.p2().node()], opts) - - if newid != old.node(): - createmarkers(repo, [(old, (repo[newid],))]) - if tempid is not None: - createmarkers(repo, [(repo[tempid], ())]) - if created: - # reroute the working copy parent to the new changeset - phases.retractboundary(repo, oldphase, [newid]) - repo.dirstate.setparents(newid, node.nullid) - else: - # rewrite() recreated an existing revision, discard - # the intermediate revision if any. No need to update - # phases or parents. - # XXX: need another message in collapse case. - tr.close() - raise error.Abort(_('no updates found')) - tr.close() - finally: - tr.release() - finally: - wlock.release() - finally: - lock.release() + opts = opts.copy() + edit = opts.pop('edit', False) + opts['amend'] = True + if not (edit or opts['message']): + opts['message'] = repo['.'].description() + _alias, commitcmd = cmdutil.findcmd('commit', commands.table) + return commitcmd[0](ui, repo, *pats, **opts) def _commitfiltered(repo, ctx, match): """Recommit ctx with changed files not in match. Return the new @@ -1780,7 +1752,7 @@ obsoleted[:] = [str(i) for i in repo.revs('%lr', obsoleted)] if obsoleted and len(revs) > 1: - raise error.Abort(_('Can not graft multiple revision while ' + raise error.Abort(_('cannot graft multiple revisions while ' 'obsoleting (for now).')) return commitwrapper(orig, ui, repo,*revs, **kwargs) @@ -1794,7 +1766,7 @@ except KeyError: raise error.Abort(_('evolution extension requires rebase extension.')) - for cmd in ['amend', 'kill', 'uncommit', 'touch', 'fold']: + for cmd in ['kill', 'uncommit', 'touch', 'fold']: entry = extensions.wrapcommand(cmdtable, cmd, warnobserrors)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hgext/pushexperiment.py Thu Dec 26 17:21:01 2013 -0800 @@ -0,0 +1,112 @@ +"""Small extension altering some push behavior + +- Add a new wire protocol command to exchange obsolescence markers. Sending the + raw file as a binary instead of using pushkey hack. +- Add a "push done" notification +- Push obsolescence marker before anything else (This works around the lack of global transaction) + +""" + +import errno +from StringIO import StringIO + +from mercurial.i18n import _ +from mercurial import extensions +from mercurial import wireproto +from mercurial import obsolete +from mercurial import localrepo + + +def client_pushobsmarkers(self, obsfile): + """wireprotocol peer method""" + self.requirecap('_push_experiment_pushobsmarkers_0', + _('push obsolete markers faster')) + ret, output = self._callpush('push_experiment_pushobsmarkers_0', obsfile) + for l in output.splitlines(True): + self.ui.status(_('remote: '), l) + return ret + + +def srv_pushobsmarkers(repo, proto): + """wireprotocol command""" + fp = StringIO() + proto.redirect() + proto.getfile(fp) + data = fp.getvalue() + fp.close() + lock = repo.lock() + try: + tr = repo.transaction('pushkey: obsolete markers') + try: + repo.obsstore.mergemarkers(tr, data) + tr.close() + finally: + tr.release() + finally: + lock.release() + return wireproto.pushres(0) + + +def syncpush(orig, repo, remote): + """wraper for obsolete.syncpush to use the fast way if possible""" + if not (obsolete._enabled and repo.obsstore): + return + if remote.capable('_push_experiment_pushobsmarkers_0'): + return # already pushed before changeset + remote.push_experiment_pushobsmarkers_0(obsfp) + return + return orig(repo, remote) + + +def client_notifypushend(self): + """wire peer command to notify a push is done""" + self.requirecap('_push_experiment_notifypushend_0', _('hook once push is all done')) + return self._call('push_experiment_notifypushend_0') + + +def srv_notifypushend(repo, proto): + """wire protocol command to notify a push is done""" + proto.redirect() + repo.hook('notifypushend') + return wireproto.pushres(0) + + +def augmented_push(orig, repo, remote, *args, **kwargs): + """push wrapped that call the wire protocol command""" + if not remote.canpush(): + raise util.Abort(_("destination does not support push")) + if (obsolete._enabled and repo.obsstore + and remote.capable('_push_experiment_pushobsmarkers_0')): + # push marker early to limit damage of pushing too early. + try: + obsfp = repo.sopener('obsstore') + except IOError as e: + if e.errno != errno.ENOENT: + raise + else: + remote.push_experiment_pushobsmarkers_0(obsfp) + ret = orig(repo, remote, *args, **kwargs) + if remote.capable('_push_experiment_notifypushend_0'): + remote.push_experiment_notifypushend_0() + return ret + + +def capabilities(orig, repo, proto): + """wrapper to advertise new capability""" + caps = orig(repo, proto) + if obsolete._enabled: + caps += ' _push_experiment_pushobsmarkers_0' + caps += ' _push_experiment_notifypushend_0' + return caps + + +def extsetup(ui): + wireproto.wirepeer.push_experiment_pushobsmarkers_0 = client_pushobsmarkers + wireproto.wirepeer.push_experiment_notifypushend_0 = client_notifypushend + wireproto.commands['push_experiment_pushobsmarkers_0'] = (srv_pushobsmarkers, '') + wireproto.commands['push_experiment_notifypushend_0'] = (srv_notifypushend, '') + extensions.wrapfunction(wireproto, 'capabilities', capabilities) + extensions.wrapfunction(obsolete, 'syncpush', syncpush) + extensions.wrapfunction(localrepo.localrepository, 'push', augmented_push) + +
--- a/setup.py Sat Aug 10 17:30:44 2013 -0400 +++ b/setup.py Thu Dec 26 17:21:01 2013 -0800 @@ -5,7 +5,7 @@ setup( name='hg-evolve', - version='3.1.0', + version='3.2.0', author='Pierre-Yves David', maintainer='Pierre-Yves David', maintainer_email='pierre-yves.david@logilab.fr', @@ -14,5 +14,5 @@ long_description=open('README').read(), keywords='hg mercurial', license='GPLv2+', - py_modules=['hgext.evolve'], + py_modules=['hgext.evolve', 'hgext.pushexperiment'], )
--- a/tests/test-amend.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-amend.t Thu Dec 26 17:21:01 2013 -0800 @@ -24,20 +24,20 @@ (branches are permanent and global, did you want a bookmark?) $ hg amend $ hg debugobsolete - 07f4944404050f47db2e5c5071e0e84e7a27bba9 a34b93d251e49c93d5685ebacad785c73a7e8605 0 {'date': '* *', 'user': 'test'} (glob) - bd19cbe78fbfbd87eb33420c63986fe5f3154f2c 0 {'date': '* *', 'user': 'test'} (glob) + 07f4944404050f47db2e5c5071e0e84e7a27bba9 6a022cbb61d5ba0f03f98ff2d36319dfea1034ae 0 {'date': '* *', 'user': 'test'} (glob) + b2e32ffb533cbe1d5759638c0cd4e8abc43b2738 0 {'date': '* *', 'user': 'test'} (glob) $ hg branch foo $ hg branches - foo 2:a34b93d251e4 + foo 2:6a022cbb61d5 $ glog @ 2@foo(draft) adda Test no-op $ hg amend - abort: no updates found - [255] + nothing changed + [1] $ glog @ 2@foo(draft) adda @@ -45,8 +45,8 @@ Test forcing the message to the same value, no intermediate revision. $ hg amend -m 'adda' - abort: no updates found - [255] + nothing changed + [1] $ glog @ 2@foo(draft) adda @@ -60,7 +60,7 @@ M a $ hg pstatus $ hg diff - diff -r 2f97fe38810f a + diff -r f7a50201fe3a a --- a/a Thu Jan 01 00:00:00 1970 +0000 +++ b/a * +0000 (glob) @@ -1,2 +1,1 @@ @@ -69,8 +69,8 @@ $ hg pdiff $ hg ci -m reseta $ hg debugobsolete - 07f4944404050f47db2e5c5071e0e84e7a27bba9 a34b93d251e49c93d5685ebacad785c73a7e8605 0 {'date': '* *', 'user': 'test'} (glob) - bd19cbe78fbfbd87eb33420c63986fe5f3154f2c 0 {'date': '* *', 'user': 'test'} (glob) + 07f4944404050f47db2e5c5071e0e84e7a27bba9 6a022cbb61d5ba0f03f98ff2d36319dfea1034ae 0 {'date': '* *', 'user': 'test'} (glob) + b2e32ffb533cbe1d5759638c0cd4e8abc43b2738 0 {'date': '* *', 'user': 'test'} (glob) $ hg phase 2 2: draft $ glog
--- a/tests/test-evolve.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-evolve.t Thu Dec 26 17:21:01 2013 -0800 @@ -215,11 +215,7 @@ and **amend**:: - $ hg amend --note "fix spelling of Zwei" - -The `--note` is our commit message for the *update* only. So its only purpose -is to document the evolution of the changeset. If we use `--message` with -`amend`, it replaces the commit message of the changeset itself. + $ hg amend This results in a new single changeset for our amended changeset, and the old changeset plus the updating changeset are hidden from view by default:: @@ -241,7 +237,7 @@ (amend of on ancestors) - $ hg amend --note 'french looks better' + $ hg amend 1 new unstable changesets $ hg log 6 feature-A: a nifty feature - test @@ -250,13 +246,13 @@ 0 : base - test $ hg up -q 0 $ glog --hidden - o 6:23409eba69a0@default(draft) a nifty feature + o 6:ba0ec09b1bab@default(draft) a nifty feature | - | x 5:e416e48b2742@default(draft) french looks better + | x 5:c296b79833d1@default(draft) temporary amend commit for 568a468b60fc | | - | | o 4:f8111a076f09@default(draft) another feature + | | o 4:207cbc4ea7fe@default(draft) another feature | |/ - | | x 3:524e478d4811@default(draft) fix spelling of Zwei + | | x 3:5bb880fc0f12@default(draft) temporary amend commit for 7b36850622b2 | | | | | x 2:7b36850622b2@default(draft) another feature | |/ @@ -265,10 +261,10 @@ @ 0:e55e0562ee93@default(public) base $ hg debugobsolete - 7b36850622b2fd159fa30a4fb2a1edd2043b4a14 f8111a076f0975cbecb336e2bd3411be22b673fb 0 {'date': '* *', 'user': 'test'} (glob) - 524e478d4811d405c8771e4c441de4483bdf8b33 0 {'date': '* *', 'user': 'test'} (glob) - 568a468b60fc99a42d5d4ddbe181caff1eef308d 23409eba69a0986e90cd42252852c1e6da97af5b 0 {'date': '* *', 'user': 'test'} (glob) - e416e48b27428695d00c2a2cc4a0b9619482e63f 0 {'date': '* *', 'user': 'test'} (glob) + 7b36850622b2fd159fa30a4fb2a1edd2043b4a14 207cbc4ea7fee30d18b3a25f534fe5db22c6071b 0 {'date': '* *', 'user': 'test'} (glob) + 5bb880fc0f12dd61eee6de36f62b93fdbc3684b0 0 {'date': '* *', 'user': 'test'} (glob) + 568a468b60fc99a42d5d4ddbe181caff1eef308d ba0ec09b1babf3489b567853807f452edd46704f 0 {'date': '* *', 'user': 'test'} (glob) + c296b79833d1d497f33144786174bf35e04e44a3 0 {'date': '* *', 'user': 'test'} (glob) $ hg evolve move:[4] another feature atop:[6] a nifty feature @@ -313,9 +309,9 @@ recreate:[8] another feature that rox atop:[7] another feature computing new diff - commited as 53ff506edef1 + commited as ca3b75e3e59b $ hg glog - @ 9 feature-B: bumped update to 5f4744038ed5: - test + @ 9 feature-B: bumped update to abe98aeaaa35: - test | o 7 : another feature - test |
--- a/tests/test-obsolete.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-obsolete.t Thu Dec 26 17:21:01 2013 -0800 @@ -119,7 +119,16 @@ 4 - 725c380fe99b $ hg up --hidden 3 -q - Working directory parent is obsolete + working directory parent is obsolete! +(reported by parents too) + $ hg parents + changeset: 3:0d3f46688ccc + parent: 1:7c3bad9141dc + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add obsol_c + + working directory parent is obsolete! $ mkcommit d # 5 (on 3) 1 new unstable changesets $ qlog -r 'obsolete()' @@ -193,7 +202,7 @@ 0 - 1f0dee641bb7 $ hg up --hidden 3 -q - Working directory parent is obsolete + working directory parent is obsolete! $ mkcommit obsol_d # 6 created new head 1 new unstable changesets @@ -249,7 +258,7 @@ [1] $ hg up --hidden -q .^ # 3 - Working directory parent is obsolete + working directory parent is obsolete! $ mkcommit "obsol_d'" # 7 created new head 1 new unstable changesets @@ -336,7 +345,7 @@ Test rollback support $ hg up --hidden .^ -q # 3 - Working directory parent is obsolete + working directory parent is obsolete! $ mkcommit "obsol_d''" created new head 1 new unstable changesets @@ -493,6 +502,8 @@ #excluded 'whole rebase set is extinct and ignored.' message not in core $ hg rebase -b '3' -d 4 --traceback 2 new divergent changesets + $ hg up tip + ? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob) $ hg log -G --template='{rev} - {node|short} {desc}\n' @ 11 - 9468a5f5d8b2 add obsol_d'' | @@ -506,6 +517,7 @@ Does not complain about new head if you obsolete the old one +(re necesarry when we start runnind discovery on unfiltered repo in core) $ hg push ../other-new --traceback pushing to ../other-new @@ -513,7 +525,7 @@ adding changesets adding manifests adding file changes - added 2 changesets with 1 changes to 1 files + added 2 changesets with 1 changes to [12] files (re) $ hg up -q 10 $ mkcommit "obsol_d'''" created new head @@ -652,3 +664,17 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: add obsolet_conflicting_d + + $ hg up --hidden 3 -q + working directory parent is obsolete! + $ hg evolve + parent is obsolete with multiple successors: + [4] add obsol_c' + [10] add obsol_c + [2] + $ hg olog + changeset: 2:4538525df7e2 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: add c +
--- a/tests/test-prune.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-prune.t Thu Dec 26 17:21:01 2013 -0800 @@ -218,7 +218,7 @@ working directory now at d62d843c9a01 bookmark 'todelete' deleted $ hg id -ir dcbb326fdec2 - abort: 00changelog.i@dcbb326fdec2*: no node! (glob) + abort: unknown revision 'dcbb326fdec2'! [255] $ hg id -ir d62d843c9a01 d62d843c9a01 @@ -229,6 +229,6 @@ 3 changesets pruned bookmark 'delete' deleted $ hg id -ir 6:2702dd0c91e7 - abort: 00changelog.i@2702dd0c91e7*: no node! (glob) + abort: unknown revision '2702dd0c91e7'! [255]
--- a/tests/test-stabilize-conflict.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-stabilize-conflict.t Thu Dec 26 17:21:01 2013 -0800 @@ -82,13 +82,13 @@ merging babar $ hg resolve -l $ hg log -G - @ changeset: 5:800217d738cd + @ changeset: 5:71c18f70c34f | tag: tip | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: babar count up to fifteen | - o changeset: 4:6bd654225435 + o changeset: 4:5977072d13c5 | parent: 0:29ec1554cfaf | user: test | date: Thu Jan 01 00:00:00 1970 +0000 @@ -109,7 +109,7 @@ [4] babar count up to ten $ safesed 's/dix/ten/' babar $ hg diff - diff -r 6bd654225435 babar + diff -r 5977072d13c5 babar --- a/babar Thu Jan 01 00:00:00 1970 +0000 +++ b/babar * (glob) @@ -7,4 +7,4 @@ @@ -133,19 +133,19 @@ $ hg resolve -l U babar $ hg log -G - @ changeset: 7:3e191dd96e18 + @ changeset: 7:e04690b09bc6 | tag: tip | parent: 0:29ec1554cfaf | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: babar count up to ten | - | @ changeset: 5:800217d738cd + | @ changeset: 5:71c18f70c34f | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: babar count up to fifteen | | - | x changeset: 4:6bd654225435 + | x changeset: 4:5977072d13c5 |/ parent: 0:29ec1554cfaf | user: test | date: Thu Jan 01 00:00:00 1970 +0000 @@ -166,13 +166,13 @@ grafting revision 5 $ hg resolve -l $ hg log -G - @ changeset: 8:92429cce7036 + @ changeset: 8:1836b91c6c1d | tag: tip | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: babar count up to fifteen | - o changeset: 7:3e191dd96e18 + o changeset: 7:e04690b09bc6 | parent: 0:29ec1554cfaf | user: test | date: Thu Jan 01 00:00:00 1970 +0000 @@ -193,7 +193,7 @@ [7] babar count up to ten $ safesed 's/ten/zehn/' babar $ hg diff - diff -r 3e191dd96e18 babar + diff -r e04690b09bc6 babar --- a/babar Thu Jan 01 00:00:00 1970 +0000 +++ b/babar * (glob) @@ -7,4 +7,4 @@ @@ -220,19 +220,19 @@ $ hg resolve -l U babar $ hg log -G - @ changeset: 10:a7fe09efd4a1 + @ changeset: 10:b20d08eea373 | tag: tip | parent: 0:29ec1554cfaf | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: babar count up to ten | - | @ changeset: 8:92429cce7036 + | @ changeset: 8:1836b91c6c1d | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 | | summary: babar count up to fifteen | | - | x changeset: 7:3e191dd96e18 + | x changeset: 7:e04690b09bc6 |/ parent: 0:29ec1554cfaf | user: test | date: Thu Jan 01 00:00:00 1970 +0000
--- a/tests/test-stabilize-order.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-stabilize-order.t Thu Dec 26 17:21:01 2013 -0800 @@ -47,9 +47,9 @@ $ hg amend 1 new unstable changesets $ glog - @ 7:f5ff10856e5a@default(draft) adda + @ 7:005fe5914f78@default(draft) adda | - | o 5:ab8cbb6d87ff@default(draft) addb + | o 5:22619daeed78@default(draft) addb | | | | o 3:7a7552255fb5@default(draft) addc | | | @@ -65,14 +65,14 @@ $ hg evolve -v move:[5] addb atop:[7] adda - hg rebase -r ab8cbb6d87ff -d f5ff10856e5a + hg rebase -r 22619daeed78 -d 005fe5914f78 resolving manifests getting b b $ glog - @ 8:6bf44048e43f@default(draft) addb + @ 8:bede829dd2d3@default(draft) addb | - o 7:f5ff10856e5a@default(draft) adda + o 7:005fe5914f78@default(draft) adda | | o 3:7a7552255fb5@default(draft) addc | | @@ -91,7 +91,7 @@ $ hg evolve -v move:[3] addc atop:[8] addb - hg rebase -r 7a7552255fb5 -d 6bf44048e43f + hg rebase -r 7a7552255fb5 -d bede829dd2d3 resolving manifests getting b resolving manifests @@ -102,17 +102,20 @@ --- successors.old* (glob) +++ successors.new* (glob) @@ -3,3 +3,4 @@ - 93418d2c0979643ad446f621195e78720edb05b4 f5ff10856e5ab3c8dc420b9c11460e6832a3b78c 0 {'date': '* *', 'user': 'test'} (glob) - 3a4a591493f80708e46f2bf6d3b4debfad8ff91e 0 {'date': '* *', 'user': 'test'} (glob) - ab8cbb6d87ff3ab5526735a051cba6b63f3d6775 6bf44048e43f830accbf7d2bd7bc252ad7a3b99c 0 {'date': '* *', 'user': 'test'} (glob) - +7a7552255fb5f8bd745e46fba6f0ca633a4dd716 5e819fbb0d278117c0a83b7f6f6486689732cfb2 0 {'date': '* *', 'user': 'test'} (glob) + 93418d2c0979643ad446f621195e78720edb05b4 005fe5914f78e8bc64c7eba28117b0b1fa210d0d 0 {'date': '* *', 'user': 'test'} (glob) + 7a7d76dc97c57751de9e80f61ed2a639bd03cd24 0 {'date': '* *', 'user': 'test'} (glob) + 22619daeed78036f80fbd326b6852519c4f0c25e bede829dd2d3b2ae9bf198c23432b250dc964458 0 {'date': '* *', 'user': 'test'} (glob) + +7a7552255fb5f8bd745e46fba6f0ca633a4dd716 65095d7d0dd5e4f15503bb7b1f433a5fe9bac052 0 {'date': '* *', 'user': 'test'} (glob) [1] + + + $ glog - @ 9:5e819fbb0d27@default(draft) addc + @ 9:65095d7d0dd5@default(draft) addc | - o 8:6bf44048e43f@default(draft) addb + o 8:bede829dd2d3@default(draft) addb | - o 7:f5ff10856e5a@default(draft) adda + o 7:005fe5914f78@default(draft) adda | o 0:c471ef929e6a@default(draft) addroot @@ -128,13 +131,13 @@ $ hg amend 1 new unstable changesets $ glog - @ 11:4e7cec6b4afe@default(draft) addb + @ 11:036cf654e942@default(draft) addb | - | o 9:5e819fbb0d27@default(draft) addc + | o 9:65095d7d0dd5@default(draft) addc | | - | x 8:6bf44048e43f@default(draft) addb + | x 8:bede829dd2d3@default(draft) addb |/ - o 7:f5ff10856e5a@default(draft) adda + o 7:005fe5914f78@default(draft) adda | o 0:c471ef929e6a@default(draft) addroot @@ -147,7 +150,7 @@ $ hg evolve --any -v move:[9] addc atop:[11] addb - hg rebase -r 5e819fbb0d27 -d 4e7cec6b4afe + hg rebase -r 65095d7d0dd5 -d 036cf654e942 resolving manifests removing c getting b @@ -155,11 +158,11 @@ getting c c $ glog - @ 12:24f95816bb21@default(draft) addc + @ 12:e99ecf51c867@default(draft) addc | - o 11:4e7cec6b4afe@default(draft) addb + o 11:036cf654e942@default(draft) addb | - o 7:f5ff10856e5a@default(draft) adda + o 7:005fe5914f78@default(draft) adda | o 0:c471ef929e6a@default(draft) addroot
--- a/tests/test-stabilize-result.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-stabilize-result.t Thu Dec 26 17:21:01 2013 -0800 @@ -31,12 +31,12 @@ $ hg evolve -v move:[2] changea atop:[4] changea - hg rebase -r cce2c55b8965 -d 1447e1c4828d + hg rebase -r cce2c55b8965 -d fb9d051ec0a4 resolving manifests $ glog --hidden - @ 4:1447e1c4828d@default(draft) bk:[changea] changea + @ 4:fb9d051ec0a4@default(draft) bk:[changea] changea | - | x 3:41ad4fe8c795@default(draft) bk:[] amends 102a90ea7b4a3361e4082ed620918c261189a36a + | x 3:c5727dbded3c@default(draft) bk:[] temporary amend commit for 102a90ea7b4a | | | | x 2:cce2c55b8965@default(draft) bk:[] changea | |/ @@ -45,8 +45,8 @@ o 0:07f494440405@default(draft) bk:[] adda $ hg debugobsolete - 102a90ea7b4a3361e4082ed620918c261189a36a 1447e1c4828d2347df8f858aa041305fa4cf7db1 0 {'date': '* *', 'user': 'test'} (glob) - 41ad4fe8c79565a06c89f032ef0937b3cbd68a04 0 {'date': '* *', 'user': 'test'} (glob) + 102a90ea7b4a3361e4082ed620918c261189a36a fb9d051ec0a450a4aa2ffc8c324979832ef88065 0 {'date': '* *', 'user': 'test'} (glob) + c5727dbded3c3a6877cf60d6bb552a76812cb844 0 {'date': '* *', 'user': 'test'} (glob) cce2c55b896511e0b6e04173c9450ba822ebc740 0 {'date': '* *', 'user': 'test'} (glob) Test evolve with conflict @@ -81,7 +81,7 @@ [255] $ hg revert -r 'unstable()' a $ hg diff - diff -r e8cc1b534401 a + diff -r 66719795a494 a --- a/a * (glob) +++ b/a * (glob) @@ -1,1 +1,3 @@ @@ -102,9 +102,9 @@ (the same parent case is handled in test-evolve.t) $ glog - @ 8:e3183e9c0961@default(draft) bk:[] newer a + @ 8:1cf0aacfd363@default(draft) bk:[] newer a | - o 7:e8cc1b534401@default(draft) bk:[changea] changea + o 7:66719795a494@default(draft) bk:[changea] changea | o 0:07f494440405@default(draft) bk:[] adda @@ -121,6 +121,7 @@ Get a successors of 8 on it $ hg grab 8 + ? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob) Add real change to the successors @@ -132,13 +133,13 @@ $ hg phase --hidden --public 8 1 new bumped changesets $ glog - @ 12:15c83af6f3a3@default(draft) bk:[] newer a + @ 12:(73b15c7566e9|d5c7ef82d003)@default\(draft\) bk:\[\] newer a (re) | - o 9:355c5cda4de1@default(draft) bk:[] add c + o 9:7bc2f5967f5e@default(draft) bk:[] add c | - | o 8:e3183e9c0961@default(public) bk:[] newer a + | o 8:1cf0aacfd363@default(public) bk:[] newer a |/ - o 7:e8cc1b534401@default(public) bk:[changea] changea + o 7:66719795a494@default(public) bk:[changea] changea | o 0:07f494440405@default(public) bk:[] adda @@ -148,24 +149,24 @@ $ hg evolve --any --dry-run recreate:[12] newer a atop:[8] newer a - hg rebase --rev 15c83af6f3a3 --dest e8cc1b534401; - hg update e3183e9c0961; - hg revert --all --rev 15c83af6f3a3; + hg rebase --rev (73b15c7566e9|d5c7ef82d003) --dest 66719795a494; (re) + hg update 1cf0aacfd363; + hg revert --all --rev (73b15c7566e9|d5c7ef82d003); (re) hg commit --msg "bumped update to %s" (no-eol) $ hg evolve --any recreate:[12] newer a atop:[8] newer a - rebasing to destination parent: e8cc1b534401 + rebasing to destination parent: 66719795a494 computing new diff - commited as eeeb8f6e7648 + commited as (a7cabd7bd9c2|671b9d7eeaec) (re) $ glog - @ 14:eeeb8f6e7648@default(draft) bk:[] bumped update to e3183e9c0961: + @ 14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re) | - | o 9:355c5cda4de1@default(draft) bk:[] add c + | o 9:7bc2f5967f5e@default(draft) bk:[] add c | | - o | 8:e3183e9c0961@default(public) bk:[] newer a + o | 8:1cf0aacfd363@default(public) bk:[] newer a |/ - o 7:e8cc1b534401@default(public) bk:[changea] changea + o 7:66719795a494@default(public) bk:[changea] changea | o 0:07f494440405@default(public) bk:[] adda @@ -186,15 +187,15 @@ > EOF $ hg ci -m 'More addition' $ glog - @ 15:7391601a4bfa@default(draft) bk:[] More addition + @ 15:3932c176bbaa@default(draft) bk:[] More addition | - | o 14:eeeb8f6e7648@default(draft) bk:[] bumped update to e3183e9c0961: + | o 14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re) | | - o | 9:355c5cda4de1@default(draft) bk:[] add c + o | 9:7bc2f5967f5e@default(draft) bk:[] add c | | - | o 8:e3183e9c0961@default(public) bk:[] newer a + | o 8:1cf0aacfd363@default(public) bk:[] newer a |/ - o 7:e8cc1b534401@default(public) bk:[changea] changea + o 7:66719795a494@default(public) bk:[changea] changea | o 0:07f494440405@default(public) bk:[] adda @@ -202,7 +203,7 @@ $ hg amend $ hg up --hidden 15 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - Working directory parent is obsolete + working directory parent is obsolete! $ mv a a.old $ echo 'jungle' > a $ cat a.old >> a @@ -210,17 +211,17 @@ $ hg amend 2 new divergent changesets $ glog - @ 19:3883461cc228@default(draft) bk:[] More addition + @ 19:eacc9c8240fe@default(draft) bk:[] More addition | - | o 17:4754d61bc2db@default(draft) bk:[] More addition + | o 17:d2f173e25686@default(draft) bk:[] More addition |/ - | o 14:eeeb8f6e7648@default(draft) bk:[] bumped update to e3183e9c0961: + | o 14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re) | | - o | 9:355c5cda4de1@default(draft) bk:[] add c + o | 9:7bc2f5967f5e@default(draft) bk:[] add c | | - | o 8:e3183e9c0961@default(public) bk:[] newer a + | o 8:1cf0aacfd363@default(public) bk:[] newer a |/ - o 7:e8cc1b534401@default(public) bk:[changea] changea + o 7:66719795a494@default(public) bk:[changea] changea | o 0:07f494440405@default(public) bk:[] adda @@ -228,12 +229,12 @@ Stabilize It $ hg evolve -qn --traceback - hg update -c 3883461cc228 && - hg merge 4754d61bc2db && - hg commit -m "auto merge resolving conflict between 3883461cc228 and 4754d61bc2db"&& - hg up -C 7391601a4bfa && + hg update -c eacc9c8240fe && + hg merge d2f173e25686 && + hg commit -m "auto merge resolving conflict between eacc9c8240fe and d2f173e25686"&& + hg up -C 3932c176bbaa && hg revert --all --rev tip && - hg commit -m "`hg log -r 3883461cc228 --template={desc}`"; + hg commit -m "`hg log -r eacc9c8240fe --template={desc}`"; $ hg evolve -v merge:[19] More addition with: [17] More addition @@ -242,25 +243,27 @@ resolving manifests merging a 0 files updated, 1 files merged, 0 files removed, 0 files unresolved + amending changeset eacc9c8240fe a + copying changeset 283ccd10e2b8 to 7bc2f5967f5e a + committed changeset 21:f344982e63c4 $ hg st - $ hg amend -d '0 0' -m 'More addition' # kill date variation XXX should be done in evolve $ glog - @ 22:ac6d600735a4@default(draft) bk:[] More addition + @ 21:f344982e63c4@default(draft) bk:[] More addition | - | o 14:eeeb8f6e7648@default(draft) bk:[] bumped update to e3183e9c0961: + | o 14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re) | | - o | 9:355c5cda4de1@default(draft) bk:[] add c + o | 9:7bc2f5967f5e@default(draft) bk:[] add c | | - | o 8:e3183e9c0961@default(public) bk:[] newer a + | o 8:1cf0aacfd363@default(public) bk:[] newer a |/ - o 7:e8cc1b534401@default(public) bk:[changea] changea + o 7:66719795a494@default(public) bk:[changea] changea | o 0:07f494440405@default(public) bk:[] adda $ hg summary - parent: 22:ac6d600735a4 tip + parent: 21:f344982e63c4 tip More addition branch: default commit: (clean) @@ -269,11 +272,12 @@ # HG changeset patch # User test # Date 0 0 - # Node ID ac6d600735a49ee377e29d1f74a0576e8c972e7b - # Parent 355c5cda4de162658ed9f961a98a73a10b3167b1 + # Thu Jan 01 00:00:00 1970 +0000 + # Node ID f344982e63c462b1e44c0371c804685389e673a9 + # Parent 7bc2f5967f5e4ed277f60a89b7b04cc5d6407ced More addition - diff -r 355c5cda4de1 -r ac6d600735a4 a + diff -r 7bc2f5967f5e -r f344982e63c4 a --- a/a Thu Jan 01 00:00:00 1970 +0000 +++ b/a Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +1,9 @@ @@ -292,23 +296,23 @@ $ hg up --hidden 15 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - Working directory parent is obsolete + working directory parent is obsolete! $ echo 'gotta break' >> a $ hg amend 2 new divergent changesets $ hg phase 'divergent()' - 22: draft - 24: draft + 21: draft + 23: draft $ hg evolve -qn - hg update -c c956a4b140b6 && - hg merge ac6d600735a4 && - hg commit -m "auto merge resolving conflict between c956a4b140b6 and ac6d600735a4"&& - hg up -C 7391601a4bfa && + hg update -c 36e188246d67 && + hg merge f344982e63c4 && + hg commit -m "auto merge resolving conflict between 36e188246d67 and f344982e63c4"&& + hg up -C 3932c176bbaa && hg revert --all --rev tip && - hg commit -m "`hg log -r c956a4b140b6 --template={desc}`"; + hg commit -m "`hg log -r 36e188246d67 --template={desc}`"; $ hg evolve - merge:[24] More addition - with: [22] More addition + merge:[23] More addition + with: [21] More addition base: [15] More addition merging a warning: conflicts during merge.
--- a/tests/test-touch.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-touch.t Thu Dec 26 17:21:01 2013 -0800 @@ -33,7 +33,7 @@ $ hg commit -m ab --amend $ hg up --hidden 1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - Working directory parent is obsolete + working directory parent is obsolete! $ hg log -G o 3:[0-9a-f]{12} ab (re)
--- a/tests/test-tutorial.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-tutorial.t Thu Dec 26 17:21:01 2013 -0800 @@ -128,6 +128,7 @@ # HG changeset patch # User test # Date 0 0 + # Thu Jan 01 00:00:00 1970 +0000 # Node ID d85de4546133030c82d257bbcdd9b1b416d0c31c # Parent 4d5dc81870237d492284826e21840b2ca00e26d1 adding fruit @@ -184,6 +185,7 @@ # HG changeset patch # User test # Date 0 0 + # Thu Jan 01 00:00:00 1970 +0000 # Node ID 9d0363b81950646bc6ad1ec5de8b8197ea586541 # Parent 4d5dc81870237d492284826e21840b2ca00e26d1 adding fruit @@ -341,6 +343,8 @@ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg rebase --rev fac207dec9f5 --dest . # moving "SPAM SPAM" to the working directory parent merging shopping + $ hg up tip + ? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob) $ hg log -G @ a224f2a4fb9f (draft): SPAM SPAM | @@ -365,6 +369,7 @@ # HG changeset patch # User test # Date 0 0 + # Thu Jan 01 00:00:00 1970 +0000 # Node ID a224f2a4fb9f9f828f608959912229d7b38b26de # Parent 41aff6a42b7578ec7ec3cb2041633f1ca43cca96 SPAM SPAM @@ -398,6 +403,8 @@ $ hg rebase -r 10b8aeaa8cc8 -d a224f2a4fb9f merging shopping + $ hg up tip + ? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob) $ hg phase --draft . $ hg log -G @ 75954b8cd933 (draft): bathroom stuff @@ -664,9 +671,15 @@ pulling from $TESTTMP/local searching for changes no changes found - Working directory parent is obsolete + working directory parent is obsolete! + +now let's see where we are, and update to the successor - $ hg up ee942144f952 + $ hg parents + bf1b0d202029 (draft): animals + working directory parent is obsolete! + $ hg evolve + update:[8] animals 1 files updated, 0 files merged, 0 files removed, 0 files unresolved Relocating unstable change after prune
--- a/tests/test-uncommit.t Sat Aug 10 17:30:44 2013 -0400 +++ b/tests/test-uncommit.t Thu Dec 26 17:21:01 2013 -0800 @@ -238,7 +238,7 @@ $ hg up -C 3 --hidden 8 files updated, 0 files merged, 1 files removed, 0 files unresolved - Working directory parent is obsolete + working directory parent is obsolete! $ hg --config extensions.purge= purge $ hg uncommit -I 'set:added() and e' 2 new divergent changesets @@ -282,7 +282,7 @@ $ hg up -C 3 --hidden 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - Working directory parent is obsolete + working directory parent is obsolete! $ hg --config extensions.purge= purge $ hg uncommit --all -X e 1 new divergent changesets @@ -328,7 +328,7 @@ $ hg ci -m touncommit $ echo unrelated > unrelated $ hg ci -Am addunrelated unrelated - $ hg gdown + $ hg previous 0 files updated, 0 files merged, 1 files removed, 0 files unresolved [8] touncommit $ hg uncommit aa