# HG changeset patch # User Pierre-Yves David # Date 1499994966 -7200 # Node ID c64e2167514b30ebd1495a777628e038e053b050 # Parent b38112b43a271e4036ef83508f87ed6509229cf7# Parent 44a6e6fbf80b1419f0bcd01da993f55c2bd588c0 branching: merge with stable diff -r 44a6e6fbf80b -r c64e2167514b README --- a/README Sun Jul 09 15:01:32 2017 +0300 +++ b/README Fri Jul 14 03:16:06 2017 +0200 @@ -121,6 +121,18 @@ Changelog ========= +6.6.0 - in progress +------------------- + + - amend: add a --extract flag to move change back to the working copy + (same as uncommit, but accessible through the amend commit) + + - topic: add --age option to sort topic by the most recently touched, + - topic: add a 't0' to access the root of a topic while keeping it active, + - topic: allow 'hg prev' to me move to 't0', + - topic: add a config option to enforce topic on new commit + (experimental.enforce-topic) + 6.5.0 -- 2017-07-02 ------------------- diff -r 44a6e6fbf80b -r c64e2167514b hgext3rd/evolve/__init__.py --- a/hgext3rd/evolve/__init__.py Sun Jul 09 15:01:32 2017 +0300 +++ b/hgext3rd/evolve/__init__.py Fri Jul 14 03:16:06 2017 +0200 @@ -270,7 +270,7 @@ scmutil, ) -from mercurial.commands import walkopts, commitopts, commitopts2, mergetoolopts +from mercurial.commands import commitopts, commitopts2, mergetoolopts from mercurial.i18n import _ from mercurial.node import nullid @@ -278,6 +278,7 @@ checkheads, compat, debugcmd, + evocommands, exthelper, metadata, obscache, @@ -313,7 +314,10 @@ _unpack = struct.unpack aliases, entry = cmdutil.findcmd('commit', commands.table) -interactiveopt = [['i', 'interactive', None, _('use interactive mode')]] +commitopts3 = evocommands.commitopts3 +interactiveopt = evocommands.commitopts3 +_bookmarksupdater = evocommands._bookmarksupdater + # This extension contains the following code # # - Extension Helper code @@ -330,6 +334,7 @@ eh.merge(obshistory.eh) eh.merge(templatekw.eh) eh.merge(compat.eh) +eh.merge(evocommands.eh) uisetup = eh.final_uisetup extsetup = eh.final_extsetup reposetup = eh.final_reposetup @@ -400,25 +405,6 @@ ### experimental behavior ### ##################################################################### -commitopts3 = [ - ('D', 'current-date', None, - _('record the current date as commit date')), - ('U', 'current-user', None, - _('record the current user as committer')), -] - -def _resolveoptions(ui, opts): - """modify commit options dict to handle related options - - For now, all it does is figure out the commit date: respect -D unless - -d was supplied. - """ - # N.B. this is extremely similar to setupheaderopts() in mq.py - if not opts.get('date') and opts.get('current_date'): - opts['date'] = '%d %d' % util.makedate() - if not opts.get('user') and opts.get('current_user'): - opts['user'] = ui.username() - getrevs = obsolete.getrevs ##################################################################### @@ -974,21 +960,6 @@ _finalizerelocate(repo, orig, dest, nodenew, tr) return nodenew -def _bookmarksupdater(repo, oldid, tr): - """Return a callable update(newid) updating the current bookmark - and bookmarks bound to oldid to newid. - """ - def updatebookmarks(newid): - dirty = False - oldbookmarks = repo.nodebookmarks(oldid) - if oldbookmarks: - for b in oldbookmarks: - repo._bookmarks[b] = newid - dirty = True - if dirty: - repo._bookmarks.recordchange(tr) - return updatebookmarks - ### new command ############################# metadataopts = [ @@ -1978,7 +1949,7 @@ with repo.dirstate.parentchange(): repo.dirstate.setparents(divergent.node(), node.nullid) oldlen = len(repo) - amend(ui, repo, message='', logfile='') + evocommands.amend(ui, repo, message='', logfile='') if oldlen == len(repo): new = divergent # no changes @@ -2008,6 +1979,69 @@ shorttemplate = "[{label('evolve.rev', rev)}] {desc|firstline}\n" +def _gettopic(ctx): + """handle topic fetching with or without the extension""" + return getattr(ctx, 'topic', lambda: '')() + +def _gettopicidx(ctx): + """handle topic fetching with or without the extension""" + return getattr(ctx, 'topicidx', lambda: None)() + +def _getcurrenttopic(repo): + return getattr(repo, 'currenttopic', '') + +def _prevupdate(repo, displayer, target, bookmark, dryrun): + if dryrun: + repo.ui.write(('hg update %s;\n' % target.rev())) + if bookmark is not None: + repo.ui.write(('hg bookmark %s -r %s;\n' + % (bookmark, target.rev()))) + else: + ret = hg.update(repo, target.rev()) + if not ret: + tr = lock = None + try: + lock = repo.lock() + tr = repo.transaction('previous') + if bookmark is not None: + repo._bookmarks[bookmark] = target.node() + repo._bookmarks.recordchange(tr) + else: + bookmarksmod.deactivate(repo) + tr.close() + finally: + lockmod.release(tr, lock) + + displayer.show(target) + +def _findprevtarget(repo, displayer, movebookmark=False, topic=True): + target = bookmark = None + wkctx = repo[None] + p1 = wkctx.parents()[0] + parents = p1.parents() + currenttopic = _getcurrenttopic(repo) + + # we do not filter in the 1 case to allow prev to t0 + if currenttopic and topic and _gettopicidx(p1) != 1: + parents = [ctx for ctx in parents if ctx.topic() == currenttopic] + + # issue message for the various case + if p1.node() == node.nullid: + repo.ui.warn(_('already at repository root\n')) + elif not parents and currenttopic: + repo.ui.warn(_('no parent in topic "%s"\n') % currenttopic) + repo.ui.warn(_('(do you want --no-topic)\n')) + elif len(parents) == 1: + target = parents[0] + bookmark = None + if movebookmark: + bookmark = repo._activebookmark + else: + for p in parents: + displayer.show(p) + repo.ui.warn(_('multiple parents, explicitly update to one\n')) + return target, bookmark + @eh.command( '^previous', [('B', 'move-bookmark', False, @@ -2037,44 +2071,19 @@ exc.hint = _('do you want --merge?') raise - parents = wparents[0].parents() - topic = getattr(repo, 'currenttopic', '') - if topic and not opts.get("no_topic", False): - parents = [ctx for ctx in parents if ctx.topic() == topic] displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) - if not parents: - ui.warn(_('no parent in topic "%s"\n') % topic) - ui.warn(_('(do you want --no-topic)\n')) - elif len(parents) == 1: - p = parents[0] - bm = repo._activebookmark - shouldmove = opts.get('move_bookmark') and bm is not None - if dryrunopt: - ui.write(('hg update %s;\n' % p.rev())) - if shouldmove: - ui.write(('hg bookmark %s -r %s;\n' % (bm, p.rev()))) - else: - ret = hg.update(repo, p.rev()) - if not ret: - tr = lock = None - try: - lock = repo.lock() - tr = repo.transaction('previous') - if shouldmove: - repo._bookmarks[bm] = p.node() - repo._bookmarks.recordchange(tr) - else: - bookmarksmod.deactivate(repo) - tr.close() - finally: - lockmod.release(tr, lock) - - displayer.show(p) + topic = not opts.get("no_topic", False) + + target, bookmark = _findprevtarget(repo, displayer, + opts.get('move_bookmark'), topic) + if target is not None: + overrides = {} + if topic and _getcurrenttopic(repo) != _gettopic(target): + overrides[('_internal', 'keep-topic')] = 'yes' + with repo.ui.configoverride(overrides, source='topic-extension'): + _prevupdate(repo, displayer, target, bookmark, dryrunopt) return 0 else: - for p in parents: - displayer.show(p) - ui.warn(_('multiple parents, explicitly update to one\n')) return 1 finally: lockmod.release(wlock) @@ -2421,225 +2430,6 @@ finally: lockmod.release(tr, lock, wlock) -@eh.command( - 'amend|refresh', - [('A', 'addremove', None, - _('mark new/missing files as added/removed before committing')), - ('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 + commitopts3 + interactiveopt, - _('[OPTION]... [FILE]...')) -def amend(ui, repo, *pats, **opts): - """combine a changeset with updates and replace it with a new one - - Commits a new changeset incorporating both the changes to the given files - and all the changes from the current parent changeset into the repository. - - See :hg:`commit` for details about committing changes. - - If you don't specify -m, the parent's message will be reused. - - Behind the scenes, Mercurial first commits the update as a regular child - of the current parent. Then it creates a new commit on the parent's parents - with the updated contents. Then it changes the working copy parent to this - new combined changeset. Finally, the old changeset and its update are hidden - from :hg:`log` (unless you use --hidden with log). - - Returns 0 on success, 1 if nothing changed. - """ - opts = opts.copy() - edit = opts.pop('edit', False) - log = opts.get('logfile') - opts['amend'] = True - if not (edit or opts['message'] or log): - opts['message'] = repo['.'].description() - _resolveoptions(ui, opts) - _alias, commitcmd = cmdutil.findcmd('commit', commands.table) - return commitcmd[0](ui, repo, *pats, **opts) - - -def _touchedbetween(repo, source, dest, match=None): - touched = set() - for files in repo.status(source, dest, match=match)[:3]: - touched.update(files) - return touched - -def _commitfiltered(repo, ctx, match, target=None): - """Recommit ctx with changed files not in match. Return the new - node identifier, or None if nothing changed. - """ - base = ctx.p1() - if target is None: - target = base - # ctx - initialfiles = _touchedbetween(repo, base, ctx) - if base == target: - affected = set(f for f in initialfiles if match(f)) - newcontent = set() - else: - affected = _touchedbetween(repo, target, ctx, match=match) - newcontent = _touchedbetween(repo, target, base, match=match) - # The commit touchs all existing files - # + all file that needs a new content - # - the file affected bny uncommit with the same content than base. - files = (initialfiles - affected) | newcontent - if not newcontent and files == initialfiles: - return None - - # Filter copies - copied = copies.pathcopies(target, ctx) - copied = dict((dst, src) for dst, src in copied.iteritems() - if dst in files) - - def filectxfn(repo, memctx, path, contentctx=ctx, redirect=newcontent): - if path in redirect: - return filectxfn(repo, memctx, path, contentctx=target, redirect=()) - if path not in contentctx: - return None - fctx = contentctx[path] - flags = fctx.flags() - mctx = context.memfilectx(repo, fctx.path(), fctx.data(), - islink='l' in flags, - isexec='x' in flags, - copied=copied.get(path)) - return mctx - - new = context.memctx(repo, - parents=[base.node(), node.nullid], - text=ctx.description(), - files=files, - filectxfn=filectxfn, - user=ctx.user(), - date=ctx.date(), - extra=ctx.extra()) - # commitctx always create a new revision, no need to check - newid = repo.commitctx(new) - return newid - -def _uncommitdirstate(repo, oldctx, match): - """Fix the dirstate after switching the working directory from - oldctx to a copy of oldctx not containing changed files matched by - match. - """ - ctx = repo['.'] - ds = repo.dirstate - copies = dict(ds.copies()) - m, a, r = repo.status(oldctx.p1(), oldctx, match=match)[:3] - for f in m: - if ds[f] == 'r': - # modified + removed -> removed - continue - ds.normallookup(f) - - for f in a: - if ds[f] == 'r': - # added + removed -> unknown - ds.drop(f) - elif ds[f] != 'a': - ds.add(f) - - for f in r: - if ds[f] == 'a': - # removed + added -> normal - ds.normallookup(f) - elif ds[f] != 'r': - ds.remove(f) - - # Merge old parent and old working dir copies - oldcopies = {} - for f in (m + a): - src = oldctx[f].renamed() - if src: - oldcopies[f] = src[0] - oldcopies.update(copies) - copies = dict((dst, oldcopies.get(src, src)) - for dst, src in oldcopies.iteritems()) - # Adjust the dirstate copies - for dst, src in copies.iteritems(): - if (src not in ctx or dst in ctx or ds[dst] != 'a'): - src = None - ds.copy(src, dst) - -@eh.command( - '^uncommit', - [('a', 'all', None, _('uncommit all changes when no arguments given')), - ('r', 'rev', '', _('revert commit content to REV instead')), - ] + commands.walkopts, - _('[OPTION]... [NAME]')) -def uncommit(ui, repo, *pats, **opts): - """move changes from parent revision to working directory - - Changes to selected files in the checked out revision appear again as - uncommitted changed in the working directory. A new revision - without the selected changes is created, becomes the checked out - revision, and obsoletes the previous one. - - The --include option specifies patterns to uncommit. - The --exclude option specifies patterns to keep in the commit. - - The --rev argument let you change the commit file to a content of another - revision. It still does not change the content of your file in the working - directory. - - Return 0 if changed files are uncommitted. - """ - - wlock = lock = tr = None - try: - wlock = repo.wlock() - lock = repo.lock() - wctx = repo[None] - if len(wctx.parents()) <= 0: - raise error.Abort(_("cannot uncommit null changeset")) - if len(wctx.parents()) > 1: - raise error.Abort(_("cannot uncommit while merging")) - old = repo['.'] - if old.phase() == phases.public: - raise error.Abort(_("cannot rewrite immutable changeset")) - if len(old.parents()) > 1: - raise error.Abort(_("cannot uncommit merge changeset")) - oldphase = old.phase() - - rev = None - if opts.get('rev'): - rev = scmutil.revsingle(repo, opts.get('rev')) - ctx = repo[None] - if ctx.p1() == rev or ctx.p2() == rev: - raise error.Abort(_("cannot uncommit to parent changeset")) - - onahead = old.rev() in repo.changelog.headrevs() - disallowunstable = not obsolete.isenabled(repo, - obsolete.allowunstableopt) - if disallowunstable and not onahead: - raise error.Abort(_("cannot uncommit in the middle of a stack")) - - # Recommit the filtered changeset - tr = repo.transaction('uncommit') - updatebookmarks = _bookmarksupdater(repo, old.node(), tr) - newid = None - includeorexclude = opts.get('include') or opts.get('exclude') - if (pats or includeorexclude or opts.get('all')): - match = scmutil.match(old, pats, opts) - newid = _commitfiltered(repo, old, match, target=rev) - if newid is None: - raise error.Abort(_('nothing to uncommit'), - hint=_("use --all to uncommit all files")) - # Move local changes on filtered changeset - obsolete.createmarkers(repo, [(old, (repo[newid],))]) - phases.retractboundary(repo, tr, oldphase, [newid]) - with repo.dirstate.parentchange(): - repo.dirstate.setparents(newid, node.nullid) - _uncommitdirstate(repo, old, match) - updatebookmarks(newid) - if not repo[newid].files(): - ui.warn(_("new changeset is empty\n")) - ui.status(_("(use 'hg prune .' to remove it)\n")) - tr.close() - finally: - lockmod.release(tr, lock, wlock) - @eh.wrapcommand('commit') def commitwrapper(orig, ui, repo, *arg, **kwargs): tr = None diff -r 44a6e6fbf80b -r c64e2167514b hgext3rd/evolve/evocommands.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hgext3rd/evolve/evocommands.py Fri Jul 14 03:16:06 2017 +0200 @@ -0,0 +1,320 @@ +# Module dedicated to host new commands added by the evolve extensions +# +# Copyright 2017 Octobus +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + +# Status: Stabilization of the API in progress +# +# The final set of command should go into core. +# +# Some command still live in evolve/__init__.py + +from __future__ import absolute_import + +from mercurial import ( + cmdutil, + commands, + context, + copies, + error, + lock as lockmod, + node, + obsolete, + phases, + scmutil, + util, +) + +from mercurial.i18n import _ + +from . import ( + exthelper, +) + +eh = exthelper.exthelper() + +walkopts = commands.walkopts +commitopts = commands.commitopts +commitopts2 = commands.commitopts2 +mergetoolopts = commands.mergetoolopts + +# option added by evolve + +def _resolveoptions(ui, opts): + """modify commit options dict to handle related options + + For now, all it does is figure out the commit date: respect -D unless + -d was supplied. + """ + # N.B. this is extremely similar to setupheaderopts() in mq.py + if not opts.get('date') and opts.get('current_date'): + opts['date'] = '%d %d' % util.makedate() + if not opts.get('user') and opts.get('current_user'): + opts['user'] = ui.username() + +commitopts3 = [ + ('D', 'current-date', None, + _('record the current date as commit date')), + ('U', 'current-user', None, + _('record the current user as committer')), +] + +interactiveopt = [['i', 'interactive', None, _('use interactive mode')]] + +def _bookmarksupdater(repo, oldid, tr): + """Return a callable update(newid) updating the current bookmark + and bookmarks bound to oldid to newid. + """ + def updatebookmarks(newid): + dirty = False + oldbookmarks = repo.nodebookmarks(oldid) + if oldbookmarks: + for b in oldbookmarks: + repo._bookmarks[b] = newid + dirty = True + if dirty: + repo._bookmarks.recordchange(tr) + return updatebookmarks + +@eh.command( + 'amend|refresh', + [('A', 'addremove', None, + _('mark new/missing files as added/removed before committing')), + ('a', 'all', False, _("match all files")), + ('e', 'edit', False, _('invoke editor on commit messages')), + ('', 'extract', False, _('extract changes from the commit to the working copy')), + ('', '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 + commitopts3 + interactiveopt, + _('[OPTION]... [FILE]...')) +def amend(ui, repo, *pats, **opts): + """combine a changeset with updates and replace it with a new one + + Commits a new changeset incorporating both the changes to the given files + and all the changes from the current parent changeset into the repository. + + See :hg:`commit` for details about committing changes. + + If you don't specify -m, the parent's message will be reused. + + If --extra is specified, the behavior of `hg amend` is reversed: Changes + to selected files in the checked out revision appear again as uncommitted + changed in the working directory. + + Returns 0 on success, 1 if nothing changed. + """ + opts = opts.copy() + if opts.get('extract'): + if opts.pop('interactive', False): + msg = _('not support for --interactive with --extract yet') + raise error.Abort(msg) + return uncommit(ui, repo, *pats, **opts) + else: + if opts.pop('all', False): + # add an include for all + include = list(opts.get('include')) + include.append('re:.*') + edit = opts.pop('edit', False) + log = opts.get('logfile') + opts['amend'] = True + if not (edit or opts['message'] or log): + opts['message'] = repo['.'].description() + _resolveoptions(ui, opts) + _alias, commitcmd = cmdutil.findcmd('commit', commands.table) + return commitcmd[0](ui, repo, *pats, **opts) + +def _touchedbetween(repo, source, dest, match=None): + touched = set() + for files in repo.status(source, dest, match=match)[:3]: + touched.update(files) + return touched + +def _commitfiltered(repo, ctx, match, target=None, message=None, user=None, + date=None): + """Recommit ctx with changed files not in match. Return the new + node identifier, or None if nothing changed. + """ + base = ctx.p1() + if target is None: + target = base + # ctx + initialfiles = _touchedbetween(repo, base, ctx) + if base == target: + affected = set(f for f in initialfiles if match(f)) + newcontent = set() + else: + affected = _touchedbetween(repo, target, ctx, match=match) + newcontent = _touchedbetween(repo, target, base, match=match) + # The commit touchs all existing files + # + all file that needs a new content + # - the file affected bny uncommit with the same content than base. + files = (initialfiles - affected) | newcontent + if not newcontent and files == initialfiles: + return None + + # Filter copies + copied = copies.pathcopies(target, ctx) + copied = dict((dst, src) for dst, src in copied.iteritems() + if dst in files) + + def filectxfn(repo, memctx, path, contentctx=ctx, redirect=newcontent): + if path in redirect: + return filectxfn(repo, memctx, path, contentctx=target, redirect=()) + if path not in contentctx: + return None + fctx = contentctx[path] + flags = fctx.flags() + mctx = context.memfilectx(repo, fctx.path(), fctx.data(), + islink='l' in flags, + isexec='x' in flags, + copied=copied.get(path)) + return mctx + + if message is None: + message = ctx.description() + if not user: + user = ctx.user() + if not date: + date = ctx.date() + new = context.memctx(repo, + parents=[base.node(), node.nullid], + text=message, + files=files, + filectxfn=filectxfn, + user=user, + date=date, + extra=ctx.extra()) + # commitctx always create a new revision, no need to check + newid = repo.commitctx(new) + return newid + +def _uncommitdirstate(repo, oldctx, match): + """Fix the dirstate after switching the working directory from + oldctx to a copy of oldctx not containing changed files matched by + match. + """ + ctx = repo['.'] + ds = repo.dirstate + copies = dict(ds.copies()) + m, a, r = repo.status(oldctx.p1(), oldctx, match=match)[:3] + for f in m: + if ds[f] == 'r': + # modified + removed -> removed + continue + ds.normallookup(f) + + for f in a: + if ds[f] == 'r': + # added + removed -> unknown + ds.drop(f) + elif ds[f] != 'a': + ds.add(f) + + for f in r: + if ds[f] == 'a': + # removed + added -> normal + ds.normallookup(f) + elif ds[f] != 'r': + ds.remove(f) + + # Merge old parent and old working dir copies + oldcopies = {} + for f in (m + a): + src = oldctx[f].renamed() + if src: + oldcopies[f] = src[0] + oldcopies.update(copies) + copies = dict((dst, oldcopies.get(src, src)) + for dst, src in oldcopies.iteritems()) + # Adjust the dirstate copies + for dst, src in copies.iteritems(): + if (src not in ctx or dst in ctx or ds[dst] != 'a'): + src = None + ds.copy(src, dst) + +@eh.command( + '^uncommit', + [('a', 'all', None, _('uncommit all changes when no arguments given')), + ('r', 'rev', '', _('revert commit content to REV instead')), + ] + commands.walkopts + commitopts + commitopts2 + commitopts3, + _('[OPTION]... [NAME]')) +def uncommit(ui, repo, *pats, **opts): + """move changes from parent revision to working directory + + Changes to selected files in the checked out revision appear again as + uncommitted changed in the working directory. A new revision + without the selected changes is created, becomes the checked out + revision, and obsoletes the previous one. + + The --include option specifies patterns to uncommit. + The --exclude option specifies patterns to keep in the commit. + + The --rev argument let you change the commit file to a content of another + revision. It still does not change the content of your file in the working + directory. + + Return 0 if changed files are uncommitted. + """ + + _resolveoptions(ui, opts) # process commitopts3 + wlock = lock = tr = None + try: + wlock = repo.wlock() + lock = repo.lock() + wctx = repo[None] + if len(wctx.parents()) <= 0: + raise error.Abort(_("cannot uncommit null changeset")) + if len(wctx.parents()) > 1: + raise error.Abort(_("cannot uncommit while merging")) + old = repo['.'] + if old.phase() == phases.public: + raise error.Abort(_("cannot rewrite immutable changeset")) + if len(old.parents()) > 1: + raise error.Abort(_("cannot uncommit merge changeset")) + oldphase = old.phase() + + rev = None + if opts.get('rev'): + rev = scmutil.revsingle(repo, opts.get('rev')) + ctx = repo[None] + if ctx.p1() == rev or ctx.p2() == rev: + raise error.Abort(_("cannot uncommit to parent changeset")) + + onahead = old.rev() in repo.changelog.headrevs() + disallowunstable = not obsolete.isenabled(repo, + obsolete.allowunstableopt) + if disallowunstable and not onahead: + raise error.Abort(_("cannot uncommit in the middle of a stack")) + + # Recommit the filtered changeset + tr = repo.transaction('uncommit') + updatebookmarks = _bookmarksupdater(repo, old.node(), tr) + newid = None + includeorexclude = opts.get('include') or opts.get('exclude') + if (pats or includeorexclude or opts.get('all')): + match = scmutil.match(old, pats, opts) + if not (opts['message'] or opts['logfile']): + opts['message'] = old.description() + message = cmdutil.logmessage(ui, opts) + newid = _commitfiltered(repo, old, match, target=rev, + message=message, user=opts.get('user'), + date=opts.get('date')) + if newid is None: + raise error.Abort(_('nothing to uncommit'), + hint=_("use --all to uncommit all files")) + # Move local changes on filtered changeset + obsolete.createmarkers(repo, [(old, (repo[newid],))]) + phases.retractboundary(repo, tr, oldphase, [newid]) + with repo.dirstate.parentchange(): + repo.dirstate.setparents(newid, node.nullid) + _uncommitdirstate(repo, old, match) + updatebookmarks(newid) + if not repo[newid].files(): + ui.warn(_("new changeset is empty\n")) + ui.status(_("(use 'hg prune .' to remove it)\n")) + tr.close() + finally: + lockmod.release(tr, lock, wlock) diff -r 44a6e6fbf80b -r c64e2167514b hgext3rd/evolve/metadata.py --- a/hgext3rd/evolve/metadata.py Sun Jul 09 15:01:32 2017 +0300 +++ b/hgext3rd/evolve/metadata.py Fri Jul 14 03:16:06 2017 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -__version__ = '6.5.1.dev' +__version__ = '6.6.0.dev' testedwith = '3.8.4 3.9.2 4.0.2 4.1.3 4.2.1' minimumhgversion = '3.8' buglink = 'https://bz.mercurial-scm.org/' diff -r 44a6e6fbf80b -r c64e2167514b hgext3rd/topic/__init__.py --- a/hgext3rd/topic/__init__.py Sun Jul 09 15:01:32 2017 +0300 +++ b/hgext3rd/topic/__init__.py Fri Jul 14 03:16:06 2017 +0200 @@ -53,6 +53,7 @@ from __future__ import absolute_import import re +import time from mercurial.i18n import _ from mercurial import ( @@ -68,9 +69,11 @@ namespaces, node, obsolete, + obsutil, patch, phases, registrar, + templatefilters, util, ) @@ -113,7 +116,7 @@ 'topic.active': 'green', } -version = '0.1.1.dev' +version = '0.2.0.dev' testedwith = '4.0.2 4.1.3 4.2.1' minimumhgversion = '4.0' buglink = 'https://bz.mercurial-scm.org/' @@ -123,6 +126,19 @@ return '' return self.extra().get(constants.extrakey, '') context.basectx.topic = _contexttopic +def _contexttopicidx(self): + topic = self.topic() + if not topic: + # XXX we might want to include t0 here, + # however t0 is related to 'currenttopic' which has no place here. + return None + revlist = stack.getstack(self._repo, topic=topic) + try: + return revlist.index(self.rev()) + except IndexError: + # Lets move to the last ctx of the current topic + return None +context.basectx.topicidx = _contexttopicidx topicrev = re.compile(r'^t\d+$') branchrev = re.compile(r'^b\d+$') @@ -144,10 +160,14 @@ if revs is not None: try: - r = revs[idx - 1] + r = revs[idx] except IndexError: msg = _('cannot resolve "%s": %s "%s" has only %d changesets') - raise error.Abort(msg % (name, ttype, tname, len(revs))) + raise error.Abort(msg % (name, ttype, tname, len(revs) - 1)) + # b0 or t0 can be None + if r == -1 and idx == 0: + msg = _('the %s "%s" has no %s') + raise error.Abort(msg % (ttype, tname, name)) return [repo[r].node()] if name not in repo.topics: return [] @@ -176,6 +196,11 @@ extensions.wrapfunction(cmdutil, 'buildcommittext', committextwrap) extensions.wrapfunction(merge, 'update', mergeupdatewrap) + # We need to check whether t0 or b0 is passed to override the default update + # behaviour of changing topic and I can't find a better way + # to do that as scmutil.revsingle returns the rev number and hence we can't + # plug into logic for this into mergemod.update(). + extensions.wrapcommand(commands.table, 'update', checkt0) try: evolve = extensions.find('evolve') @@ -283,9 +308,30 @@ ('', 'clear', False, 'clear active topic if any'), ('r', 'rev', '', 'revset of existing revisions', _('REV')), ('l', 'list', False, 'show the stack of changeset in the topic'), + ('', 'age', False, 'show when you last touched the topics') ] + commands.formatteropts) def topics(ui, repo, topic='', clear=False, rev=None, list=False, **opts): - """View current topic, set current topic, or see all topics. + """View current topic, set current topic, change topic for a set of revisions, or see all topics. + + Clear topic on existing topiced revisions: + `hg topic --rev --clear` + + Change topic on some revisions: + `hg topic --rev ` + + Clear current topic: + `hg topic --clear` + + Set current topic: + `hg topic ` + + List of topics: + `hg topics` + + List of topics with their last touched time sorted according to it: + `hg topic --age` + + The active topic (if any) will be prepended with a "*". The --verbose version of this command display various information on the state of each topic.""" if list: @@ -411,6 +457,11 @@ def _listtopics(ui, repo, opts): fm = ui.formatter('topics', opts) + showlast = opts.get('age') + if showlast: + # we have a new function as plugging logic into existing function is + # pretty much difficult + return _showlasttouched(repo, fm, opts) activetopic = repo.currenttopic namemask = '%s' if repo.topics and ui.verbose: @@ -463,6 +514,76 @@ fm.plain('\n') fm.end() +def _showlasttouched(repo, fm, opts): + topics = repo.topics + timedict = _getlasttouched(repo, topics) + times = timedict.keys() + times.sort() + if topics: + maxwidth = max(len(t) for t in topics) + namemask = '%%-%is' % maxwidth + activetopic = repo.currenttopic + for timevalue in times: + curtopics = timedict[timevalue][1] + for topic in curtopics: + fm.startitem() + marker = ' ' + label = 'topic' + active = (topic == activetopic) + if active: + marker = '*' + label = 'topic.active' + fm.plain(' %s ' % marker, label=label) + fm.write('topic', namemask, topic, label=label) + fm.data(active=active) + fm.plain(' (') + if timevalue == -1: + timestr = 'not yet touched' + else: + timestr = templatefilters.age(timedict[timevalue][0]) + fm.write('lasttouched', '%s', timestr, label='topic.list.time') + fm.plain(')') + fm.plain('\n') + fm.end() + +def _getlasttouched(repo, topics): + """ + Calculates the last time a topic was used. Returns a dictionary of seconds + passed from current time for a topic as keys and topic name as values. + """ + topicstime = {} + curtime = time.time() + for t in topics: + maxtime = (0, 0) + trevs = repo.revs("topic(%s)", t) + # Need to check for the time of all changesets in the topic, whether + # they are obsolete of non-heads + # XXX: can we just rely on the max rev number for this + for revs in trevs: + rt = repo[revs].date() + if rt[0] > maxtime[0]: + # Can store the rev to gather more info + # latesthead = revs + maxtime = rt + # looking on the markers also to get more information and accurate + # last touch time. + obsmarkers = obsutil.getmarkers(repo, [repo[revs].node()]) + for marker in obsmarkers: + rt = marker.date() + if rt[0] > maxtime[0]: + maxtime = rt + # is the topic still yet untouched + if not trevs: + secspassed = -1 + else: + secspassed = (curtime - maxtime[0]) + try: + topicstime[secspassed][1].append(t) + except KeyError: + topicstime[secspassed] = (maxtime, [t]) + + return topicstime + def summaryhook(ui, repo): t = repo.currenttopic if not t: @@ -472,10 +593,16 @@ def commitwrap(orig, ui, repo, *args, **opts): with repo.wlock(): + enforcetopic = ui.configbool('experimental', 'enforce-topic') if opts.get('topic'): t = opts['topic'] with repo.vfs.open('topic', 'w') as f: f.write(t) + elif not repo.currenttopic and enforcetopic: + msg = _("no active topic") + hint = _("set a current topic or use '--config " + + "experimental.enforce-topic=no' to commit without a topic") + raise error.Abort(msg, hint=hint) return orig(ui, repo, *args, **opts) def committextwrap(orig, repo, ctx, subs, extramsg): @@ -491,6 +618,7 @@ partial = not (matcher is None or matcher.always()) wlock = repo.wlock() isrebase = False + ist0 = False try: ret = orig(repo, node, branchmerge, force, *args, **kwargs) # The mergeupdatewrap function makes the destination's topic as the @@ -500,7 +628,9 @@ # running. if repo.ui.hasconfig('experimental', 'topicrebase'): isrebase = True - if (not partial and not branchmerge) or isrebase: + if repo.ui.configbool('_internal', 'keep-topic'): + ist0 = True + if ((not partial and not branchmerge) or isrebase) and not ist0: ot = repo.currenttopic t = '' pctx = repo[node] @@ -510,10 +640,23 @@ f.write(t) if t and t != ot: repo.ui.status(_("switching to topic %s\n") % t) + elif ist0: + repo.ui.status(_("preserving the current topic '%s'\n") % + repo.currenttopic) return ret finally: wlock.release() +def checkt0(orig, ui, repo, node=None, rev=None, clean=False, date=None, + check=False, merge=None, tool=None): + + thezeros = set(['t0', 'b0']) + overrides = {} + if node in thezeros or rev in thezeros: + overrides[('_internal', 'keep-topic')] = 'yes' + with repo.ui.configoverride(overrides, source='topic-extension'): + return orig(ui, repo, node, rev, clean, date, check, merge, tool) + def _fixrebase(loaded): if not loaded: return diff -r 44a6e6fbf80b -r c64e2167514b hgext3rd/topic/revset.py --- a/hgext3rd/topic/revset.py Sun Jul 09 15:01:32 2017 +0300 +++ b/hgext3rd/topic/revset.py Fri Jul 14 03:16:06 2017 +0200 @@ -78,7 +78,7 @@ topic = repo.currenttopic if not topic: branch = repo[None].branch() - return revset.baseset(stack.getstack(repo, branch=branch, topic=topic)) & subset + return revset.baseset(stack.getstack(repo, branch=branch, topic=topic)[1:]) & subset def modsetup(ui): diff -r 44a6e6fbf80b -r c64e2167514b hgext3rd/topic/stack.py --- a/hgext3rd/topic/stack.py Sun Jul 09 15:01:32 2017 +0300 +++ b/hgext3rd/topic/stack.py Fri Jul 14 03:16:06 2017 +0200 @@ -20,7 +20,13 @@ trevs = repo.revs("branch(%s) - public() - obsolete() - topic()", branch) else: raise error.ProgrammingError('neither branch and topic specified (not defined yet)') - return _orderrevs(repo, trevs) + revs = _orderrevs(repo, trevs) + if revs: + pt1 = repo[revs[0]].p1() + if pt1.obsolete(): + pt1 = repo[_singlesuccessor(repo, pt1)] + revs.insert(0, pt1.rev()) + return revs def labelsgen(prefix, labelssuffix): """ Takes a label prefix and a list of suffixes. Returns a string of the prefix @@ -84,8 +90,16 @@ fm.plain('%d behind' % data['behindcount'], label='topic.stack.summary.behindcount') fm.plain('\n') - for idx, r in enumerate(getstack(repo, branch=branch, topic=topic), 1): + for idx, r in enumerate(getstack(repo, branch=branch, topic=topic), 0): ctx = repo[r] + # special case for t0, b0 as it's hard to plugin into rest of the logic + if idx == 0: + # t0, b0 can be None + if r == -1: + continue + entries.append((idx, False, ctx)) + prev = ctx.rev() + continue p1 = ctx.p1() if p1.obsolete(): p1 = repo[_singlesuccessor(repo, p1)] @@ -148,7 +162,7 @@ :behindcount: number of changeset on rebase destination """ data = {} - revs = getstack(repo, branch, topic) + revs = getstack(repo, branch, topic)[1:] data['changesetcount'] = len(revs) data['troubledcount'] = len([r for r in revs if repo[r].troubled()]) deps, rdeps = builddependencies(repo, revs) diff -r 44a6e6fbf80b -r c64e2167514b tests/test-amend.t --- a/tests/test-amend.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-amend.t Fri Jul 14 03:16:06 2017 +0200 @@ -132,11 +132,9 @@ If you don't specify -m, the parent's message will be reused. - Behind the scenes, Mercurial first commits the update as a regular child - of the current parent. Then it creates a new commit on the parent's - parents with the updated contents. Then it changes the working copy parent - to this new combined changeset. Finally, the old changeset and its update - are hidden from 'hg log' (unless you use --hidden with log). + If --extra is specified, the behavior of 'hg amend' is reversed: Changes + to selected files in the checked out revision appear again as uncommitted + changed in the working directory. Returns 0 on success, 1 if nothing changed. @@ -144,7 +142,9 @@ -A --addremove mark new/missing files as added/removed before committing + -a --all match all files -e --edit invoke editor on commit messages + --extract extract changes from the commit to the working copy --close-branch mark a branch as closed, hiding it from the branch list -s --secret use the secret phase for committing diff -r 44a6e6fbf80b -r c64e2167514b tests/test-discovery-obshashrange.t --- a/tests/test-discovery-obshashrange.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-discovery-obshashrange.t Fri Jul 14 03:16:06 2017 +0200 @@ -34,23 +34,9 @@ * @0000000000000000000000000000000000000000 (*)> serve --stdio (glob) * @0000000000000000000000000000000000000000 (*)> -R server serve --stdio exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugbuilddag .+7 (glob) - * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) - * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 1 nodes (glob) - * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) - * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 1 nodes (glob) - * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) - * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 1 nodes (glob) + * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (8r, 0o) (glob) * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 1 nodes (glob) - * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) - * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 1 nodes (glob) - * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) - * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 1 nodes (glob) - * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) - * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 1 nodes (glob) - * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) - * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 1 nodes (glob) - * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (8r, 0o) (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (8r, 0o) (glob) * @0000000000000000000000000000000000000000 (*)> debugbuilddag .+7 exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> blackbox (glob) @@ -166,10 +152,10 @@ $ rm ../server/.hg/blackbox.log $ hg blackbox * @0000000000000000000000000000000000000000 (*)> pull --rev 4 (glob) - * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) - * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 1 nodes (glob) * @0000000000000000000000000000000000000000 (*)> updated stablerange cache in *.???? seconds (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (5r, 3o) (glob) + * @0000000000000000000000000000000000000000 (*)> updated base branch cache in *.???? seconds (glob) + * @0000000000000000000000000000000000000000 (*)> wrote base branch cache with 1 labels and 1 nodes (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (5r, 3o) (glob) * @0000000000000000000000000000000000000000 (*)> 5 incoming changes - new heads: bebd167eb94d (glob) * @0000000000000000000000000000000000000000 (*)> pull --rev 4 exited 0 after *.?? seconds (glob) @@ -206,7 +192,7 @@ taking quick initial sample query 2; still undecided: 5, sample size is: 5 sending known command - 2 total queries + 2 total queries in *.????s (glob) preparing listkeys for "phases" sending listkeys command received listkey for "phases": 58 bytes @@ -238,7 +224,7 @@ remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) remote: 1 new obsolescence markers - bundle2-input-bundle: with-transaction + bundle2-input-bundle: no-transaction bundle2-input-part: "reply:changegroup" (advisory) (params: 0 advisory) supported bundle2-input-part: "reply:pushkey" (params: 0 advisory) supported bundle2-input-part: "reply:obsmarkers" (params: 0 advisory) supported @@ -248,12 +234,12 @@ received listkey for "phases": 58 bytes $ hg -R ../server blackbox * @0000000000000000000000000000000000000000 (*)> serve --stdio (glob) - * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (1r, 0o) (glob) + * @0000000000000000000000000000000000000000 (*)> updated stablerange cache in *.???? seconds (glob) + * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 1o) (glob) + * @0000000000000000000000000000000000000000 (*)> obscache is out of date, falling back to slower obsstore version (glob) * @0000000000000000000000000000000000000000 (*)> updated served branch cache in *.???? seconds (glob) * @0000000000000000000000000000000000000000 (*)> wrote served branch cache with 1 labels and 2 nodes (glob) - * @0000000000000000000000000000000000000000 (*)> updated stablerange cache in *.???? seconds (glob) - * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 1o) (glob) - * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) + * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (1r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> 1 incoming changes - new heads: 45f8b879de92 (glob) * @0000000000000000000000000000000000000000 (*)> -R server serve --stdio exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> blackbox (glob) @@ -310,10 +296,11 @@ * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> add foo (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> add foo exited 0 after *.?? seconds (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> commit -m foo (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (1r, 0o) (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated served branch cache in *.???? seconds (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> wrote served branch cache with 1 labels and 1 nodes (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 0o) (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obscache is out of date, falling back to slower obsstore version (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated served branch cache in *.???? seconds (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> wrote served branch cache with 1 labels and 1 nodes (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (1r, 0o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> commit -m foo exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete ffffffffffffffffffffffffffffffffffffffff 45f8b879de922f6a6e620ba04205730335b6fc7e (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) @@ -322,6 +309,7 @@ * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete ffffffffffffffffffffffffffffffffffffffff 45f8b879de922f6a6e620ba04205730335b6fc7e exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> push -f --debug (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> found 1 common and 1 unknown server heads, 2 roundtrips in *.????s (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated stablerange cache in *.???? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 0/5 mismatch - 1 obshashrange queries in *.???? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> push -f --debug exited 0 after *.?? seconds (glob) @@ -342,7 +330,7 @@ * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete 22222222222222222bbbbbbbbbbbbb2222222222 2dc09a01254db841290af0538aa52f6f52c776e3 exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> push (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 2/6 mismatch - 1 obshashrange queries in *.???? seconds (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> push exited True after *.?? seconds (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> push exited 1 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob) $ rm .hg/blackbox.log $ hg debugobsolete | sort @@ -421,13 +409,12 @@ * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> log -G exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r 6 (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 2/6 mismatch - 1 obshashrange queries in *.???? seconds (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (2r, 0o) (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated served branch cache in *.???? seconds (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> wrote served branch cache with 1 labels and 2 nodes (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated stablerange cache in *.???? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache reset - new markers affect cached ranges (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (2r, 3o) (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 3o) (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated served branch cache in *.???? seconds (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> wrote served branch cache with 1 labels and 2 nodes (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (2r, 3o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> 2 incoming changes - new heads: f69452c5b1af (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull -r 6 exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob) @@ -567,17 +554,18 @@ * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 0/8 mismatch - 1 obshashrange queries in *.???? seconds (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (1r, 0o) (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated stablerange cache in *.???? seconds (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 1o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated served branch cache in *.???? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> wrote served branch cache with 1 labels and 2 nodes (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated stablerange cache in *.???? seconds (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 1o) (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (1r, 1o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> 1 incoming changes - new heads: 4de32a90b66c (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> rollback (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated base branch cache in *.???? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> wrote base branch cache with 1 labels and 2 nodes (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-obscache cache reset (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (8r, 12o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> rollback exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob) $ rm .hg/blackbox.log @@ -617,11 +605,9 @@ * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev 'heads(all())' exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obsdiscovery, 0/8 mismatch - 1 obshashrange queries in *.???? seconds (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip detected, evo-ext-obscache cache reset (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (9r, 12o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated stablerange cache in *.???? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 1o) (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) + * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (1r, 1o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> 1 incoming changes - new heads: 4de32a90b66c (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> pull exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> blackbox (glob) @@ -695,10 +681,12 @@ pulling from ssh://user@dummy/server searching for changes OBSEXC: looking for common markers in 8 nodes + OBSEXC: request obsmarkers for 1 common nodes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) + 2 new obsolescence markers (run 'hg heads' to see heads, 'hg merge' to merge) $ hg log -G o 8 45f8b879de92 foo tip @@ -728,9 +716,9 @@ * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> strip -r 'desc("foo")' (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> saved backup bundle to $TESTTMP/client/.hg/strip-backup/45f8b879de92-94c82517-backup.hg (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-obshashrange cache reset (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obshashrange in *.???? seconds (5r, 13o) (glob) + * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obshashrange in *.???? seconds (5r, 11o) (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> strip detected, evo-ext-obscache cache reset (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (5r, 13o) (glob) + * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (5r, 11o) (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated stablerange cache in *.???? seconds (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obshashrange in *.???? seconds (3r, 0o) (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (3r, 0o) (glob) @@ -742,12 +730,13 @@ * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> writing .hg/cache/tags2-visible with 0 tags (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> log -G exited 0 after *.?? seconds (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> pull (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> obsdiscovery, 0/8 mismatch - 1 obshashrange queries in *.???? seconds (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (1r, 0o) (glob) + * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> obsdiscovery, 1/8 mismatch - 1 obshashrange queries in *.???? seconds (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated stablerange cache in *.???? seconds (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 0o) (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated served branch cache in *.???? seconds (glob) - * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> wrote served branch cache with 1 labels and 2 nodes (glob) + * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> obshashcache reset - new markers affect cached ranges (glob) + * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 2o) (glob) + * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated base branch cache in *.???? seconds (glob) + * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> wrote base branch cache with 1 labels and 2 nodes (glob) + * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> updated evo-ext-obscache in *.???? seconds (1r, 2o) (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> 1 incoming changes - new heads: 45f8b879de92 (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> pull exited 0 after *.?? seconds (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> log -G (glob) diff -r 44a6e6fbf80b -r c64e2167514b tests/test-drop.t --- a/tests/test-drop.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-drop.t Fri Jul 14 03:16:06 2017 +0200 @@ -207,11 +207,13 @@ | x changeset: 3:87ea30a976fd | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: pruned | | summary: temporary amend commit for 34b6c051bf1f | | | x changeset: 2:34b6c051bf1f |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as a2c06c884bfe | summary: add child | o changeset: 1:19509a42b0d0 @@ -263,4 +265,3 @@ summary: add base ============ obsmark ============ - 87ea30a976fdf235bf096f04899cb02a903873e2 0 {34b6c051bf1f78db6aef400776de5cb964470207} (*) {'ef1': '0', 'user': 'test'} (glob) diff -r 44a6e6fbf80b -r c64e2167514b tests/test-evolve-cycles.t --- a/tests/test-evolve-cycles.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-evolve-cycles.t Fri Jul 14 03:16:06 2017 +0200 @@ -62,16 +62,19 @@ | tag: tip | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as 2a34000d3544 | summary: C | x changeset: 2:c473644ee0e9 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as a8df460dbbfe | summary: B | @ changeset: 1:2a34000d3544 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as c473644ee0e9 | summary: A | o changeset: 0:ea207398892e @@ -204,31 +207,37 @@ | tag: tip | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as 868d2e0eb19c | summary: F | x changeset: 5:0da815c333f6 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as d9f908fde1a1 | summary: E | @ changeset: 4:868d2e0eb19c | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as 0da815c333f6 | summary: D | x changeset: 3:a8df460dbbfe | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: split as 2a34000d3544, 868d2e0eb19c | summary: C | x changeset: 2:c473644ee0e9 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as a8df460dbbfe | summary: B | x changeset: 1:2a34000d3544 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as c473644ee0e9 | summary: A | o changeset: 0:ea207398892e diff -r 44a6e6fbf80b -r c64e2167514b tests/test-evolve-obshistory-complex.t --- a/tests/test-evolve-obshistory-complex.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-evolve-obshistory-complex.t Fri Jul 14 03:16:06 2017 +0200 @@ -99,21 +99,25 @@ x | | changeset: 4:868d2e0eb19c | | | user: test | | | date: Thu Jan 01 00:00:00 1970 +0000 + | | | obsolete: rewritten as d15d0ffc75f6 | | | summary: D | | | x | | changeset: 3:a8df460dbbfe |/ / user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: rewritten as d15d0ffc75f6 | | summary: C | | x | changeset: 2:c473644ee0e9 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: rewritten as b868bc49b0a4 | | summary: B | | x | changeset: 1:2a34000d3544 |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as b868bc49b0a4 | summary: A | o changeset: 0:ea207398892e @@ -269,21 +273,25 @@ x | | changeset: 4:868d2e0eb19c | | | user: test | | | date: Thu Jan 01 00:00:00 1970 +0000 + | | | obsolete: split as 7b3290f6e0a0, d0f33db50670 | | | summary: D | | | x | | changeset: 3:a8df460dbbfe |/ / user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: split as 7b3290f6e0a0, d0f33db50670 | | summary: C | | x | changeset: 2:c473644ee0e9 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: split as 19e14c8397fc, e036916b63ea | | summary: B | | x | changeset: 1:2a34000d3544 |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: split as 19e14c8397fc, e036916b63ea | summary: A | o changeset: 0:ea207398892e @@ -330,21 +338,25 @@ x | | changeset: 4:868d2e0eb19c | | | user: test | | | date: Thu Jan 01 00:00:00 1970 +0000 + | | | obsolete: split as 7b3290f6e0a0, ec31316faa9d | | | summary: D | | | x | | changeset: 3:a8df460dbbfe |/ / user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: split as 7b3290f6e0a0, ec31316faa9d | | summary: C | | x | changeset: 2:c473644ee0e9 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: split as 19e14c8397fc, 7b3290f6e0a0 | | summary: B | | x | changeset: 1:2a34000d3544 |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: split as 19e14c8397fc, 7b3290f6e0a0 | summary: A | o changeset: 0:ea207398892e diff -r 44a6e6fbf80b -r c64e2167514b tests/test-evolve-obshistory.t --- a/tests/test-evolve-obshistory.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-evolve-obshistory.t Fri Jul 14 03:16:06 2017 +0200 @@ -41,11 +41,13 @@ | x changeset: 2:f137d23bb3e1 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: pruned | | summary: temporary amend commit for 471f378eab4c | | | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as 4ae3a4151de9 | summary: A0 | o changeset: 0:ea207398892e @@ -59,7 +61,7 @@ @ 4ae3a4151de9 (3) A1 | x 471f378eab4c (1) A0 - rewritten(description, content) by test (*) as 4ae3a4151de9 (glob) + rewritten(description, content) by test (Thu Jan 01 00:00:00 1970 +0000) as 4ae3a4151de9 --- a/471f378eab4c-changeset-description +++ b/4ae3a4151de9-changeset-description @@ -1,1 +1,3 @@ @@ -197,6 +199,7 @@ | tag: tip | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: pruned | summary: B0 | @ changeset: 1:471f378eab4c @@ -336,6 +339,7 @@ | x changeset: 1:471597cad322 |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: split as 337fec4d2edc, f257fde29c7a | summary: A0 | o changeset: 0:ea207398892e @@ -589,6 +593,7 @@ | x changeset: 1:de7290d8b885 |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: split as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a | summary: A0 | o changeset: 0:ea207398892e @@ -764,11 +769,13 @@ | x changeset: 2:0dec01379d3b | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: rewritten as eb5a0daa2192 | | summary: B0 | | | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as eb5a0daa2192 | summary: A0 | o changeset: 0:ea207398892e @@ -969,6 +976,7 @@ | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as fdf9bde5129a | summary: A0 | o changeset: 0:ea207398892e @@ -1001,6 +1009,8 @@ | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as fdf9bde5129a + | obsolete: rewritten as 65b757b745b9 | summary: A0 | o changeset: 0:ea207398892e @@ -1282,6 +1292,7 @@ | x changeset: 2:0dec01379d3b |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as b7ea6d14e664 | summary: B0 | o changeset: 1:471f378eab4c @@ -1309,16 +1320,19 @@ | | parent: 1:471f378eab4c | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: rewritten as eb5a0daa2192 | | summary: B1 | | | | x changeset: 2:0dec01379d3b | |/ user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: rewritten as b7ea6d14e664 | | summary: B0 | | | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as eb5a0daa2192 | summary: A0 | o changeset: 0:ea207398892e @@ -1542,11 +1556,13 @@ |/ parent: 0:ea207398892e | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as 7a230b46bf61 | summary: A1 | | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as fdf9bde5129a | summary: A0 | o changeset: 0:ea207398892e @@ -1587,6 +1603,7 @@ adding file changes added 1 changesets with 0 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 1 changesets (run 'hg heads' to see heads, 'hg merge' to merge) working directory parent is obsolete! (471f378eab4c) (use 'hg evolve' to update to its successor: 7a230b46bf61) diff -r 44a6e6fbf80b -r c64e2167514b tests/test-evolve-serveronly-bundle2.t --- a/tests/test-evolve-serveronly-bundle2.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-evolve-serveronly-bundle2.t Fri Jul 14 03:16:06 2017 +0200 @@ -108,6 +108,7 @@ remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) remote: 2 new obsolescence markers + remote: obsoleted 1 changesets $ cat ../errors.log $ hg push pushing to http://localhost:$HGPORT/ @@ -127,6 +128,7 @@ adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) 2 new obsolescence markers + obsoleted 1 changesets (run 'hg heads' to see heads) $ cat ../errors.log $ hg -R ../other pull diff -r 44a6e6fbf80b -r c64e2167514b tests/test-evolve-templates.t --- a/tests/test-evolve-templates.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-evolve-templates.t Fri Jul 14 03:16:06 2017 +0200 @@ -47,16 +47,19 @@ |/ parent: 0:ea207398892e | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten by test2 as d004c8f274b9 | summary: A1 | | x changeset: 2:f137d23bb3e1 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: pruned by test1 | | summary: temporary amend commit for 471f378eab4c | | | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten by test1 as a468dc9b3633 | summary: A0 | o changeset: 0:ea207398892e @@ -76,10 +79,10 @@ o d004c8f274b9 (4) A2 | x a468dc9b3633 (3) A1 - | rewritten(description) by test2 (*) as d004c8f274b9 (glob) + | rewritten(description) by test2 (Thu Apr 19 04:25:21 2001 +0000) as d004c8f274b9 | @ 471f378eab4c (1) A0 - rewritten(description, content) by test1 (*) as a468dc9b3633 (glob) + rewritten(description, content) by test1 (Fri Feb 13 23:31:30 2009 +0000) as a468dc9b3633 $ hg tlog o d004c8f274b9 @@ -113,7 +116,7 @@ o d004c8f274b9 | | @ 471f378eab4c - |/ Obsfate: rewritten by test1, test2 as d004c8f274b9 (between * and *) (glob) + |/ Obsfate: rewritten by test1, test2 as d004c8f274b9 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000) | o ea207398892e @@ -180,7 +183,7 @@ o d004c8f274b9 | | @ a468dc9b3633 - |/ Obsfate: rewritten by test2 as d004c8f274b9 (at *) (glob) + |/ Obsfate: rewritten by test2 as d004c8f274b9 (at 2001-04-19 04:25 +0000) | o ea207398892e @@ -222,13 +225,13 @@ @ d004c8f274b9 | | x a468dc9b3633 - |/ Obsfate: rewritten by test2 as d004c8f274b9 (at *) (glob) + |/ Obsfate: rewritten by test2 as d004c8f274b9 (at 2001-04-19 04:25 +0000) | | x f137d23bb3e1 - | | Obsfate: pruned by test1 (at *) (glob) + | | Obsfate: pruned by test1 (at 2009-02-13 23:31 +0000) | | | x 471f378eab4c - |/ Obsfate: rewritten by test1 as a468dc9b3633 (at *) (glob) + |/ Obsfate: rewritten by test1 as a468dc9b3633 (at 2009-02-13 23:31 +0000) | o ea207398892e @@ -236,11 +239,11 @@ $ hg fatelogjson --hidden @ d004c8f274b9 "" | - | x a468dc9b3633 [{"markers": [["a468dc9b36338b14fdb7825f55ce3df4e71517ad", ["d004c8f274b9ec480a47a93c10dac5eee63adb78"], 0, [["ef1", "1"], ["user", "test2"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["d004c8f274b9ec480a47a93c10dac5eee63adb78"], "users": ["test2"], "verb": "rewritten"}] (glob) + | x a468dc9b3633 [{"markers": [["a468dc9b36338b14fdb7825f55ce3df4e71517ad", ["d004c8f274b9ec480a47a93c10dac5eee63adb78"], 0, [["ef1", "1"], ["user", "test2"]], [987654321.0, 0], null]], "max_date": [987654321.0, 0], "min_date": [987654321.0, 0], "successors": ["d004c8f274b9ec480a47a93c10dac5eee63adb78"], "users": ["test2"], "verb": "rewritten"}] |/ - | x f137d23bb3e1 [{"markers": [["f137d23bb3e11dc1daeb6264fac9cb2433782e15", [], 0, [["ef1", "0"], ["user", "test1"]], [*, 0], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]], "max_date": [*, 0], "min_date": [*, 0], "successors": [], "users": ["test1"], "verb": "pruned"}] (glob) + | x f137d23bb3e1 [{"markers": [["f137d23bb3e11dc1daeb6264fac9cb2433782e15", [], 0, [["ef1", "0"], ["user", "test1"]], [1234567890.0, 0], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]], "max_date": [1234567890.0, 0], "min_date": [1234567890.0, 0], "successors": [], "users": ["test1"], "verb": "pruned"}] | | - | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"], 0, [["ef1", "9"], ["user", "test1"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"], "users": ["test1"], "verb": "rewritten"}] (glob) + | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"], 0, [["ef1", "9"], ["user", "test1"]], [1234567890.0, 0], null]], "max_date": [1234567890.0, 0], "min_date": [1234567890.0, 0], "successors": ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"], "users": ["test1"], "verb": "rewritten"}] |/ o ea207398892e "" @@ -319,6 +322,7 @@ | x changeset: 1:471597cad322 |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: split as 337fec4d2edc, f257fde29c7a | summary: A0 | o changeset: 0:ea207398892e @@ -405,7 +409,7 @@ | o 337fec4d2edc "" | - | x 471597cad322 [{"markers": [["471597cad322d1f659bb169751be9133dad92ef3", ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"], 0, [["ef1", "12"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"], "users": ["test"], "verb": "split"}] (glob) + | x 471597cad322 [{"markers": [["471597cad322d1f659bb169751be9133dad92ef3", ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"], 0, [["ef1", "12"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"], "users": ["test"], "verb": "split"}] |/ o ea207398892e "" @@ -452,11 +456,13 @@ | x changeset: 2:0dec01379d3b | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: rewritten as eb5a0daa2192 | | summary: B0 | | | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as eb5a0daa2192 | summary: A0 | o changeset: 0:ea207398892e @@ -570,9 +576,9 @@ $ hg fatelogjson --hidden @ eb5a0daa2192 "" | - | x 0dec01379d3b [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["ef1", "13"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], "users": ["test"], "verb": "rewritten"}] (glob) + | x 0dec01379d3b [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["ef1", "13"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], "users": ["test"], "verb": "rewritten"}] | | - | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["ef1", "9"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], "users": ["test"], "verb": "rewritten"}] (glob) + | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["ef1", "9"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], "users": ["test"], "verb": "rewritten"}] |/ o ea207398892e "" @@ -599,6 +605,7 @@ | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as fdf9bde5129a | summary: A0 | o changeset: 0:ea207398892e @@ -631,6 +638,8 @@ | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as fdf9bde5129a + | obsolete: rewritten as 65b757b745b9 | summary: A0 | o changeset: 0:ea207398892e @@ -734,11 +743,11 @@ $ hg fatelogjson --hidden o 019fadeab383 "" | - | x 65b757b745b9 [{"markers": [["65b757b745b935093c87a2bccd877521cccffcbd", ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"], 0, [["ef1", "1"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"], "users": ["test"], "verb": "rewritten"}] (glob) + | x 65b757b745b9 [{"markers": [["65b757b745b935093c87a2bccd877521cccffcbd", ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"], 0, [["ef1", "1"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"], "users": ["test"], "verb": "rewritten"}] |/ | @ fdf9bde5129a "" |/ - | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], 0, [["ef1", "1"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], "users": ["test"], "verb": "rewritten"}, {"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["65b757b745b935093c87a2bccd877521cccffcbd"], 0, [["ef1", "1"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["65b757b745b935093c87a2bccd877521cccffcbd"], "users": ["test"], "verb": "rewritten"}] (glob) + | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], 0, [["ef1", "1"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], "users": ["test"], "verb": "rewritten"}, {"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["65b757b745b935093c87a2bccd877521cccffcbd"], 0, [["ef1", "1"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["65b757b745b935093c87a2bccd877521cccffcbd"], "users": ["test"], "verb": "rewritten"}] |/ o ea207398892e "" @@ -766,6 +775,7 @@ | x changeset: 2:0dec01379d3b |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as b7ea6d14e664 | summary: B0 | o changeset: 1:471f378eab4c @@ -793,16 +803,19 @@ | | parent: 1:471f378eab4c | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: rewritten as eb5a0daa2192 | | summary: B1 | | | | x changeset: 2:0dec01379d3b | |/ user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: rewritten as b7ea6d14e664 | | summary: B0 | | | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as eb5a0daa2192 | summary: A0 | o changeset: 0:ea207398892e @@ -947,11 +960,11 @@ $ hg fatelogjson --hidden @ eb5a0daa2192 "" | - | x b7ea6d14e664 [{"markers": [["b7ea6d14e664bdc8922221f7992631b50da3fb07", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["ef1", "13"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], "users": ["test"], "verb": "rewritten"}] (glob) + | x b7ea6d14e664 [{"markers": [["b7ea6d14e664bdc8922221f7992631b50da3fb07", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["ef1", "13"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], "users": ["test"], "verb": "rewritten"}] | | - | | x 0dec01379d3b [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["b7ea6d14e664bdc8922221f7992631b50da3fb07"], 0, [["ef1", "1"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["b7ea6d14e664bdc8922221f7992631b50da3fb07"], "users": ["test"], "verb": "rewritten"}] (glob) + | | x 0dec01379d3b [{"markers": [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", ["b7ea6d14e664bdc8922221f7992631b50da3fb07"], 0, [["ef1", "1"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["b7ea6d14e664bdc8922221f7992631b50da3fb07"], "users": ["test"], "verb": "rewritten"}] | |/ - | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["ef1", "9"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], "users": ["test"], "verb": "rewritten"}] (glob) + | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], 0, [["ef1", "9"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"], "users": ["test"], "verb": "rewritten"}] |/ o ea207398892e "" @@ -997,11 +1010,13 @@ |/ parent: 0:ea207398892e | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as 7a230b46bf61 | summary: A1 | | x changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as fdf9bde5129a | summary: A0 | o changeset: 0:ea207398892e @@ -1018,6 +1033,7 @@ adding file changes added 1 changesets with 0 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 1 changesets (run 'hg heads' to see heads, 'hg merge' to merge) working directory parent is obsolete! (471f378eab4c) (use 'hg evolve' to update to its successor: 7a230b46bf61) @@ -1032,6 +1048,7 @@ | @ changeset: 1:471f378eab4c |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as 7a230b46bf61 | summary: A0 | o changeset: 0:ea207398892e @@ -1057,7 +1074,7 @@ o 7a230b46bf61 | | @ 471f378eab4c - |/ Obsfate: rewritten by test as 7a230b46bf61 (between * and *) (glob) + |/ Obsfate: rewritten by test as 7a230b46bf61 (at 1970-01-01 00:00 +0000) | o ea207398892e @@ -1088,7 +1105,7 @@ @ 7a230b46bf61 | | x 471f378eab4c - |/ Obsfate: rewritten by test as 7a230b46bf61 (between * and *) (glob) + |/ Obsfate: rewritten by test as 7a230b46bf61 (at 1970-01-01 00:00 +0000) | o ea207398892e @@ -1096,7 +1113,7 @@ $ hg fatelogjson --hidden @ 7a230b46bf61 "" | - | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], 0, [["ef1", "1"], ["user", "test"]], [*, 0], null], ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e", ["7a230b46bf61e50b30308c6cfd7bd1269ef54702"], 0, [["ef1", "1"], ["user", "test"]], [*, 0], null]], "max_date": [*, 0], "min_date": [*, 0], "successors": ["7a230b46bf61e50b30308c6cfd7bd1269ef54702"], "users": ["test"], "verb": "rewritten"}] (glob) + | x 471f378eab4c [{"markers": [["471f378eab4c5e25f6c77f785b27c936efb22874", ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], 0, [["ef1", "1"], ["user", "test"]], [0.0, 0], null], ["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e", ["7a230b46bf61e50b30308c6cfd7bd1269ef54702"], 0, [["ef1", "1"], ["user", "test"]], [0.0, 0], null]], "max_date": [0.0, 0], "min_date": [0.0, 0], "successors": ["7a230b46bf61e50b30308c6cfd7bd1269ef54702"], "users": ["test"], "verb": "rewritten"}] |/ o ea207398892e "" @@ -1131,7 +1148,7 @@ $ hg fatelog -v @ 471f378eab4c - | Obsfate: pruned by test (at *) (glob) + | Obsfate: pruned by test (at 1970-01-01 00:00 +0000) | o ea207398892e diff -r 44a6e6fbf80b -r c64e2167514b tests/test-evolve-topic.t --- a/tests/test-evolve-topic.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-evolve-topic.t Fri Jul 14 03:16:06 2017 +0200 @@ -78,7 +78,7 @@ t3: add eee t2: add ddd t1: add ccc - ^ add bbb + t0^ add bbb (base) $ hg up 'desc(ddd)' 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ echo ddd >> ddd @@ -209,9 +209,14 @@ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved [16] add ggg $ hg prev + preserving the current topic 'bar' + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + [15] add fff + $ hg prev no parent in topic "bar" (do you want --no-topic) + [1] $ hg prev --no-topic switching to topic foo 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - [15] add fff + [14] add eee diff -r 44a6e6fbf80b -r c64e2167514b tests/test-exchange-obsmarkers-case-A3.t --- a/tests/test-exchange-obsmarkers-case-A3.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-exchange-obsmarkers-case-A3.t Fri Jul 14 03:16:06 2017 +0200 @@ -242,6 +242,7 @@ remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) remote: 1 new obsolescence markers + remote: obsoleted 1 changesets ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -257,6 +258,7 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 1 new obsolescence markers + obsoleted 1 changesets (run 'hg heads' to see heads, 'hg merge' to merge) 1 new unstable changesets ## post pull state diff -r 44a6e6fbf80b -r c64e2167514b tests/test-exchange-obsmarkers-case-A6.t --- a/tests/test-exchange-obsmarkers-case-A6.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-exchange-obsmarkers-case-A6.t Fri Jul 14 03:16:06 2017 +0200 @@ -108,6 +108,7 @@ searching for changes no changes found remote: 1 new obsolescence markers + remote: obsoleted 1 changesets ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -118,6 +119,7 @@ pulling from main no changes found 1 new obsolescence markers + obsoleted 1 changesets ## post pull state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -141,6 +143,7 @@ searching for changes no changes found remote: 1 new obsolescence markers + remote: obsoleted 1 changesets ## post push state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} @@ -152,6 +155,7 @@ searching for changes no changes found 1 new obsolescence markers + obsoleted 1 changesets ## post pull state # obstore: main 28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} diff -r 44a6e6fbf80b -r c64e2167514b tests/test-inhibit.t --- a/tests/test-inhibit.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-inhibit.t Fri Jul 14 03:16:06 2017 +0200 @@ -686,6 +686,8 @@ adding manifests adding file changes added 2 changesets with 1 changes to 2 files (+1 heads) + 3 new obsolescence markers + obsoleted 1 changesets (run 'hg heads .' to see heads, 'hg merge' to merge) Only allow direct access and check that evolve works like before diff -r 44a6e6fbf80b -r c64e2167514b tests/test-obsolete.t --- a/tests/test-obsolete.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-obsolete.t Fri Jul 14 03:16:06 2017 +0200 @@ -126,6 +126,7 @@ parent: 1:7c3bad9141dc user: test date: Thu Jan 01 00:00:00 1970 +0000 + obsolete: rewritten as 725c380fe99b summary: add obsol_c working directory parent is obsolete! (0d3f46688ccc) @@ -237,6 +238,7 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 1 new obsolescence markers + obsoleted 1 changesets $ qlog -R ../other-new 5 - 95de7fc6918d @@ -274,6 +276,7 @@ adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) 1 new obsolescence markers + obsoleted 1 changesets (run 'hg heads' to see heads, 'hg merge' to merge) $ qlog -R ../other-new 6 @@ -364,6 +367,7 @@ adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) 1 new obsolescence markers + obsoleted 1 changesets (run 'hg heads' to see heads, 'hg merge' to merge) $ hg up -q 7 # to check rollback update behavior @@ -455,6 +459,7 @@ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg up 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + updated to "159dfc9fa5d3: add obsol_d''" 1 other heads for branch "default" $ hg id -n 8 @@ -539,6 +544,7 @@ adding file changes added 2 changesets with 1 changes to [12] files (re) 3 new obsolescence markers + obsoleted 1 changesets $ hg up -q 10 $ mkcommit "obsol_d'''" created new head @@ -551,6 +557,7 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 1 new obsolescence markers + obsoleted 1 changesets $ cd .. check bumped detection @@ -739,12 +746,14 @@ | | | x changeset: 14:33d458d86621 | | | | user: test | | | | date: Thu Jan 01 00:00:00 1970 +0000 + | | | | obsolete: pruned | | | | summary: temporary amend commit for 0b1b6dd009c0 | | | | | | | x changeset: 13:0b1b6dd009c0 | | |/ parent: 10:2033b4e49474 | | | user: test | | | date: Thu Jan 01 00:00:00 1970 +0000 + | | | obsolete: rewritten as 705ab2a6b72e | | | summary: add f | | | | | | o changeset: 12:6db5e282cb91 @@ -769,30 +778,36 @@ | | parent: -1:000000000000 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: pruned | | summary: add toto | | | | x changeset: 8:159dfc9fa5d3 | | | parent: 3:0d3f46688ccc | | | user: test | | | date: Thu Jan 01 00:00:00 1970 +0000 + | | | obsolete: rewritten as 9468a5f5d8b2 | | | summary: add obsol_d'' | | | | | | x changeset: 7:909a0fb57e5d | | |/ parent: 3:0d3f46688ccc | | | user: test | | | date: Thu Jan 01 00:00:00 1970 +0000 + | | | obsolete: rewritten as 159dfc9fa5d3 | | | summary: add obsol_d' | | | | | | x changeset: 6:95de7fc6918d | | |/ parent: 3:0d3f46688ccc | | | user: test | | | date: Thu Jan 01 00:00:00 1970 +0000 + | | | obsolete: rewritten as 909a0fb57e5d | | | summary: add obsol_d | | | | | | x changeset: 5:a7a6f2b5d8a5 | | |/ parent: 3:0d3f46688ccc | | | user: test | | | date: Thu Jan 01 00:00:00 1970 +0000 + | | | obsolete: rewritten as 95de7fc6918d + | | | obsolete: rewritten as 50f11e5e3a63 | | | summary: add d | | | | o | changeset: 4:725c380fe99b @@ -805,11 +820,14 @@ | |/ parent: 1:7c3bad9141dc | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 + | | obsolete: rewritten as 725c380fe99b + | | obsolete: rewritten as 2033b4e49474 | | summary: add obsol_c | | x | changeset: 2:4538525df7e2 |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as 0d3f46688ccc | summary: add c | o changeset: 1:7c3bad9141dc diff -r 44a6e6fbf80b -r c64e2167514b tests/test-prev-next.t --- a/tests/test-prev-next.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-prev-next.t Fri Jul 14 03:16:06 2017 +0200 @@ -5,7 +5,8 @@ $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH hg prev -B should move active bookmark - $ hg init + $ hg init test-repo + $ cd test-repo $ touch a $ hg add a $ hg commit -m 'added a' @@ -93,6 +94,15 @@ mark 2:4e26ef31f919 no-move 2:4e26ef31f919 +test prev on root + + $ hg up null + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ hg prev + already at repository root + [1] + $ hg up 1 + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved Behavior with local modification -------------------------------- @@ -216,6 +226,8 @@ atop:[6] added b (3) working directory is now at 47ea25be8aea + $ cd .. + prev and next should lock properly against other commands $ hg init repo diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-pruned-B1.t --- a/tests/test-push-checkheads-pruned-B1.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-pruned-B1.t Fri Jul 14 03:16:06 2017 +0200 @@ -68,5 +68,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 1 new obsolescence markers + obsoleted 1 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-pruned-B2.t --- a/tests/test-push-checkheads-pruned-B2.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-pruned-B2.t Fri Jul 14 03:16:06 2017 +0200 @@ -81,5 +81,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 2 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-pruned-B3.t --- a/tests/test-push-checkheads-pruned-B3.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-pruned-B3.t Fri Jul 14 03:16:06 2017 +0200 @@ -81,6 +81,7 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 2 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-pruned-B4.t --- a/tests/test-push-checkheads-pruned-B4.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-pruned-B4.t Fri Jul 14 03:16:06 2017 +0200 @@ -82,5 +82,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 2 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-pruned-B5.t --- a/tests/test-push-checkheads-pruned-B5.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-pruned-B5.t Fri Jul 14 03:16:06 2017 +0200 @@ -88,5 +88,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 3 new obsolescence markers + obsoleted 3 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-pruned-B6.t --- a/tests/test-push-checkheads-pruned-B6.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-pruned-B6.t Fri Jul 14 03:16:06 2017 +0200 @@ -74,5 +74,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 1 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-pruned-B7.t --- a/tests/test-push-checkheads-pruned-B7.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-pruned-B7.t Fri Jul 14 03:16:06 2017 +0200 @@ -73,5 +73,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 1 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-pruned-B8.t --- a/tests/test-push-checkheads-pruned-B8.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-pruned-B8.t Fri Jul 14 03:16:06 2017 +0200 @@ -94,5 +94,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 4 new obsolescence markers + obsoleted 2 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-superceed-A1.t --- a/tests/test-push-checkheads-superceed-A1.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-superceed-A1.t Fri Jul 14 03:16:06 2017 +0200 @@ -65,5 +65,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 1 new obsolescence markers + obsoleted 1 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-superceed-A2.t --- a/tests/test-push-checkheads-superceed-A2.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-superceed-A2.t Fri Jul 14 03:16:06 2017 +0200 @@ -83,5 +83,6 @@ adding file changes added 2 changesets with 2 changes to 2 files (+1 heads) 2 new obsolescence markers + obsoleted 2 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-superceed-A3.t --- a/tests/test-push-checkheads-superceed-A3.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-superceed-A3.t Fri Jul 14 03:16:06 2017 +0200 @@ -86,5 +86,6 @@ adding file changes added 2 changesets with 2 changes to 2 files (+1 heads) 2 new obsolescence markers + obsoleted 2 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-superceed-A4.t --- a/tests/test-push-checkheads-superceed-A4.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-superceed-A4.t Fri Jul 14 03:16:06 2017 +0200 @@ -70,5 +70,6 @@ adding file changes added 2 changesets with 2 changes to 2 files (+1 heads) 1 new obsolescence markers + obsoleted 1 changesets $ cd ../../ diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-superceed-A5.t --- a/tests/test-push-checkheads-superceed-A5.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-superceed-A5.t Fri Jul 14 03:16:06 2017 +0200 @@ -70,6 +70,7 @@ adding file changes added 2 changesets with 2 changes to 2 files (+1 heads) 1 new obsolescence markers + obsoleted 1 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-superceed-A6.t --- a/tests/test-push-checkheads-superceed-A6.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-superceed-A6.t Fri Jul 14 03:16:06 2017 +0200 @@ -94,5 +94,6 @@ adding file changes added 2 changesets with 2 changes to 2 files (+1 heads) 2 new obsolescence markers + obsoleted 2 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-superceed-A7.t --- a/tests/test-push-checkheads-superceed-A7.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-superceed-A7.t Fri Jul 14 03:16:06 2017 +0200 @@ -94,5 +94,6 @@ adding file changes added 2 changesets with 2 changes to 2 files (+1 heads) 2 new obsolescence markers + obsoleted 2 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-superceed-A8.t --- a/tests/test-push-checkheads-superceed-A8.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-superceed-A8.t Fri Jul 14 03:16:06 2017 +0200 @@ -75,5 +75,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 1 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-unpushed-D4.t --- a/tests/test-push-checkheads-unpushed-D4.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-unpushed-D4.t Fri Jul 14 03:16:06 2017 +0200 @@ -118,5 +118,6 @@ adding file changes added 1 changesets with 1 changes to 1 files 1 new obsolescence markers + obsoleted 1 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-unpushed-D5.t --- a/tests/test-push-checkheads-unpushed-D5.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-unpushed-D5.t Fri Jul 14 03:16:06 2017 +0200 @@ -103,5 +103,6 @@ adding file changes added 1 changesets with 1 changes to 1 files 1 new obsolescence markers + obsoleted 1 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-push-checkheads-unpushed-D7.t --- a/tests/test-push-checkheads-unpushed-D7.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-push-checkheads-unpushed-D7.t Fri Jul 14 03:16:06 2017 +0200 @@ -92,5 +92,6 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 3 new obsolescence markers + obsoleted 1 changesets $ cd ../.. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-sharing.t --- a/tests/test-sharing.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-sharing.t Fri Jul 14 03:16:06 2017 +0200 @@ -88,7 +88,9 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 1 changesets 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + updated to "60ffde5765c5: fix bug 37" 1 other heads for branch "default" Figure SG03 @@ -120,6 +122,7 @@ $ cd ../test-repo $ hg update 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + updated to "de6151c48e1c: fix bug 37" 1 other heads for branch "default" $ hg shortlog --hidden -G @ 4:de6151c48e1c draft fix bug 37 @@ -209,6 +212,7 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 1 changesets updating bookmark bug15 $ hg -R ../review bookmarks bug15 3:cbdfbd5a5db2 @@ -253,6 +257,7 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 1 changesets updating bookmark featureX Bob receives second review, amends, and pushes to public: @@ -278,6 +283,7 @@ adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers + obsoleted 1 changesets updating bookmark featureX $ hg -R ../review bookmarks bug15 3:cbdfbd5a5db2 @@ -393,6 +399,7 @@ adding file changes added 1 changesets with 0 changes to 1 files 1 new obsolescence markers + obsoleted 1 changesets updating bookmark bug15 Figure SG08: review and public changesets after Alice pushes. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-stabilize-conflict.t --- a/tests/test-stabilize-conflict.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-stabilize-conflict.t Fri Jul 14 03:16:06 2017 +0200 @@ -152,6 +152,7 @@ |/ parent: 0:29ec1554cfaf | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as e04690b09bc6 | summary: babar count up to ten | o changeset: 0:29ec1554cfaf @@ -243,6 +244,7 @@ |/ parent: 0:29ec1554cfaf | user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as b20d08eea373 | summary: babar count up to ten | o changeset: 0:29ec1554cfaf diff -r 44a6e6fbf80b -r c64e2167514b tests/test-stabilize-order.t --- a/tests/test-stabilize-order.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-stabilize-order.t Fri Jul 14 03:16:06 2017 +0200 @@ -221,6 +221,7 @@ | x changeset: 12:2256dae6521f |/ user: test | date: Thu Jan 01 00:00:00 1970 +0000 + | obsolete: rewritten as f83a0bce03e4 | summary: addc | o changeset: 11:7a68bc4596ea diff -r 44a6e6fbf80b -r c64e2167514b tests/test-stack-branch.t --- a/tests/test-stack-branch.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-stack-branch.t Fri Jul 14 03:16:06 2017 +0200 @@ -75,7 +75,7 @@ b3: c_e b2: c_d b1: c_c - ^ c_b + b0^ c_b (base) Test "t#" reference ------------------- @@ -123,7 +123,7 @@ b3$ c_e (unstable) b2@ c_d (current) b1: c_c - ^ c_b + b0^ c_b (base) $ hg up b3 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg stack @@ -132,7 +132,7 @@ b3$ c_e (current unstable) b2: c_d b1: c_c - ^ c_b + b0^ c_b (base) $ hg up b2 1 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -206,7 +206,7 @@ b3: c_g b2: c_d b1: c_c - ^ c_b + b0^ c_b (base) Case with multiple heads on the topic with unstability involved --------------------------------------------------------------- @@ -249,7 +249,7 @@ b3: c_g b2@ c_D (current) b1: c_c - ^ c_b + b0^ c_b (base) Check that stack doesn't show draft changesets on a branch ---------------------------------------------------------- @@ -263,7 +263,7 @@ b3: c_g b2@ c_D (current) b1: c_c - ^ c_b + b0^ c_b (base) $ hg phase --public b1 $ hg stack ### branch: foo (2 heads) @@ -273,7 +273,7 @@ b3: c_h b2: c_g b1@ c_D (current) - ^ c_c + b0^ c_c (base) Check that stack doesn't show changeset with a topic ---------------------------------------------------- @@ -285,4 +285,4 @@ b3: c_h b2: c_g b1@ c_D (current) - ^ c_c + b0^ c_c (base) diff -r 44a6e6fbf80b -r c64e2167514b tests/test-topic-fold.t --- a/tests/test-topic-fold.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-topic-fold.t Fri Jul 14 03:16:06 2017 +0200 @@ -54,7 +54,7 @@ ### topic: myfeature ### branch: default t1@ folded (current) - ^ add ROOT + t0^ add ROOT (base) $ logtopic @ 3:4fd43e5bdc443dc8489edffac19bd8f93ccf1a5c | topics: myfeature diff -r 44a6e6fbf80b -r c64e2167514b tests/test-topic-rebase.t --- a/tests/test-topic-rebase.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-topic-rebase.t Fri Jul 14 03:16:06 2017 +0200 @@ -46,7 +46,7 @@ ### topic: myfeature ### branch: default t1@ add feature1 (current) - ^ add ROOT + t0^ add ROOT (base) $ logtopic @ 1:39e7a938055e87615edf675c24a10997ff05bb06 | topics: myfeature @@ -76,7 +76,7 @@ ### topic: myfeature ### branch: default t1@ add feature1 (current) - ^ add default + t0^ add default (base) $ logtopic @ 3:fc6593661cf3256ba165cbccd6019ead17cc3726 | topics: myfeature @@ -90,7 +90,7 @@ ### topic: myfeature ### branch: default t1@ add feature1 (current) - ^ add default + t0^ add default (base) Check that rebase keep the topic in case of merge conflict ---------------------------------------------------------- @@ -152,11 +152,11 @@ ### topic: myotherfeature ### branch: default t1@ myotherfeature1 (current) - ^ default3 + t0^ default3 (base) $ hg update --rev 7 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg stack ### topic: myotherfeature ### branch: default t1@ myotherfeature1 (current) - ^ default3 + t0^ default3 (base) diff -r 44a6e6fbf80b -r c64e2167514b tests/test-topic-stack-data.t --- a/tests/test-topic-stack-data.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-topic-stack-data.t Fri Jul 14 03:16:06 2017 +0200 @@ -248,23 +248,23 @@ t3: bar1_d t2: add bar_b t1: add bar_a - ^ add base_e + t0^ add base_e (base) $ hg stack baz ### topic: baz ### branch: default, 2 behind t2: add baz_b t1: add baz_a - ^ add base_c + t0^ add base_c (base) $ hg stack foo ### topic: foo ### branch: lake, ambigious rebase destination t2@ add foo_b (current) t1: add foo_a - ^ add lake_a + t0^ add lake_a (base) $ hg stack fuz ### topic: fuz ### branch: default, 1 behind t3$ add fuz_c (unstable) t2$ add fuz_b (unstable) t1: fuz1_a - ^ add base_d + t0^ add base_d (base) diff -r 44a6e6fbf80b -r c64e2167514b tests/test-topic-stack.t --- a/tests/test-topic-stack.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-topic-stack.t Fri Jul 14 03:16:06 2017 +0200 @@ -76,7 +76,7 @@ t3: c_e t2: c_d t1: c_c - ^ c_b + t0^ c_b (base) $ hg stack -Tjson | python -m json.tool [ { @@ -118,6 +118,7 @@ { "isentry": false, "topic.stack.desc": "c_b", + "topic.stack.index": 0, "topic.stack.state": [ "base" ], @@ -180,7 +181,7 @@ t3$ c_e (unstable) t2@ c_d (current) t1: c_c - ^ c_b + t0^ c_b (base) $ hg up t3 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg topic --list @@ -190,7 +191,7 @@ t3$ c_e (current unstable) t2: c_d t1: c_c - ^ c_b + t0^ c_b (base) $ hg topic --list --color=debug [topic.stack.summary.topic|### topic: [topic.active|foo]] [topic.stack.summary.branches|### branch: default] @@ -198,7 +199,7 @@ [topic.stack.index topic.stack.index.current topic.stack.index.unstable|t3][topic.stack.state topic.stack.state.current topic.stack.state.unstable|$] [topic.stack.desc topic.stack.desc.current topic.stack.desc.unstable|c_e][topic.stack.state topic.stack.state.current topic.stack.state.unstable| (current unstable)] [topic.stack.index topic.stack.index.clean|t2][topic.stack.state topic.stack.state.clean|:] [topic.stack.desc topic.stack.desc.clean|c_d] [topic.stack.index topic.stack.index.clean|t1][topic.stack.state topic.stack.state.clean|:] [topic.stack.desc topic.stack.desc.clean|c_c] - [topic.stack.state topic.stack.state.base|^] [topic.stack.desc topic.stack.desc.base|c_b] + [topic.stack.index topic.stack.index.base|t0][topic.stack.state topic.stack.state.base|^] [topic.stack.desc topic.stack.desc.base|c_b][topic.stack.state topic.stack.state.base| (base)] $ hg up t2 1 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -281,7 +282,7 @@ t3: c_g t2: c_d t1: c_c - ^ c_b + t0^ c_b (base) Case with multiple heads on the topic with unstability involved --------------------------------------------------------------- @@ -325,7 +326,7 @@ t3: c_g t2@ c_D (current) t1: c_c - ^ c_b + t0^ c_b (base) Trying to list non existing topic $ hg stack thisdoesnotexist diff -r 44a6e6fbf80b -r c64e2167514b tests/test-topic-tutorial.t --- a/tests/test-topic-tutorial.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-topic-tutorial.t Fri Jul 14 03:16:06 2017 +0200 @@ -126,7 +126,7 @@ ### branch: default t2@ adding fruits (current) t1: adding condiments - ^ Shopping list + t0^ Shopping list (base) The topic deactivates when we update away from it:: @@ -361,7 +361,7 @@ ### branch: default t2@ Adding orange juice (current) t1: Adding apple juice - ^ adding fruits + t0^ adding fruits (base) $ hg up tools switching to topic tools 1 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -371,7 +371,7 @@ t3@ Adding drill (current) t2: Adding saw t1: Adding hammer - ^ adding fruits + t0^ adding fruits (base) They are seen as independent branches by Mercurial. No rebase or merge between them will be attempted by default:: @@ -479,5 +479,5 @@ t3@ Adding drill (current) t2: Adding saw t1: Adding hammer - ^ add a pair of shoes + t0^ add a pair of shoes (base) diff -r 44a6e6fbf80b -r c64e2167514b tests/test-topic.t --- a/tests/test-topic.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-topic.t Fri Jul 14 03:16:06 2017 +0200 @@ -15,7 +15,28 @@ $ hg help topics hg topics [TOPIC] - View current topic, set current topic, or see all topics. + View current topic, set current topic, change topic for a set of revisions, or + see all topics. + + Clear topic on existing topiced revisions: + 'hg topic --rev --clear' + + Change topic on some revisions: + 'hg topic --rev ' + + Clear current topic: + 'hg topic --clear' + + Set current topic: + 'hg topic ' + + List of topics: + 'hg topics' + + List of topics with their last touched time sorted according to it: + 'hg topic --age' + + The active topic (if any) will be prepended with a "*". The --verbose version of this command display various information on the state of each topic. @@ -25,6 +46,7 @@ --clear clear active topic if any -r --rev REV revset of existing revisions -l --list show the stack of changeset in the topic + --age show when you last touched the topics (some details hidden, use --verbose to show complete help) $ hg topics @@ -777,3 +799,69 @@ | date: Thu Jan 01 00:00:00 1970 +0000 | summary: start on fran | + +Testing for updating to t0 +========================== + + $ hg stack + ### topic: changewut (2 heads) + ### branch: default, 5 behind + t3: fran? + t1^ start on fran (base) + t2@ gamma (current) + t1: start on fran + t0^ Add file delta (base) + $ hg up t0 + preserving the current topic 'changewut' + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg topic + * changewut + $ hg stack + ### topic: changewut (2 heads) + ### branch: default, 5 behind + t3: fran? + t1^ start on fran (base) + t2: gamma + t1: start on fran + t0^ Add file delta (base) + + $ hg topics --age + * changewut (1970-01-01) + + $ cd .. + +Testing the new config knob to forbid untopiced commit +====================================================== + + $ hg init ponky + $ cd ponky + $ cat <> .hg/hgrc + > [phases] + > publish=false + > EOF + $ cat <> $HGRCPATH + > [experimental] + > enforce-topic = yes + > EOF + $ touch a b c d + $ hg add a + $ hg ci -m "Added a" + abort: no active topic + (set a current topic or use '--config experimental.enforce-topic=no' to commit without a topic) + [255] + +(same test, checking we abort before the editor) + + $ EDITOR=cat hg ci -m "Added a" --edit + abort: no active topic + (set a current topic or use '--config experimental.enforce-topic=no' to commit without a topic) + [255] + $ hg ci -m "added a" --config experimental.enforce-topic=no + $ hg log + changeset: 0:a154386e50d1 + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: added a + + $ cd .. diff -r 44a6e6fbf80b -r c64e2167514b tests/test-tutorial.t --- a/tests/test-tutorial.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-tutorial.t Fri Jul 14 03:16:06 2017 +0200 @@ -461,6 +461,12 @@ -r --rev VALUE revert commit content to REV instead -I --include PATTERN [+] include names matching the given patterns -X --exclude PATTERN [+] exclude names matching the given patterns + -m --message TEXT use text as commit message + -l --logfile FILE read commit message from file + -d --date DATE record the specified date as commit date + -u --user USER record the specified user as committer + -D --current-date record the current date as commit date + -U --current-user record the current user as committer (some details hidden, use --verbose to show complete help) @@ -733,6 +739,7 @@ adding file changes added 2 changesets with 2 changes to 1 files (+1 heads) 3 new obsolescence markers + obsoleted 2 changesets remote get a warning that current working directory is based on an obsolete changeset diff -r 44a6e6fbf80b -r c64e2167514b tests/test-uncommit.t --- a/tests/test-uncommit.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-uncommit.t Fri Jul 14 03:16:06 2017 +0200 @@ -358,7 +358,103 @@ Test uncommiting precursors - $ hg uncommit --hidden --rev 'precursors(.)' b + $ hg uncommit --hidden --rev 'precursors(.)' b --traceback $ hg cat b --rev . b b + +Test date, message and user update + + $ hg log -r . + changeset: 12:912ed871207c + branch: bar + tag: tip + parent: 7:4f1c269eab68 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: touncommit + + $ hg uncommit -m 'to-uncommit' d --user test2 --date '1337 0' + $ hg log -r . + changeset: 13:f1efd9ec508c + branch: bar + tag: tip + parent: 7:4f1c269eab68 + user: test2 + date: Thu Jan 01 00:22:17 1970 +0000 + summary: to-uncommit + + +test -U option + + $ hg uncommit -U b + $ hg log -r . + changeset: 14:288da4a95941 + branch: bar + tag: tip + parent: 7:4f1c269eab68 + user: test + date: Thu Jan 01 00:22:17 1970 +0000 + summary: to-uncommit + + +test the `hg amend --extract` entry point + + $ hg status --change . + M j + M o + A e + A ff + A h + A k + A l + R c + R f + R g + R m + R n + $ hg status + M d + A aa + R b + $ hg amend --extract j + $ hg status --change . + M o + A e + A ff + A h + A k + A l + R c + R f + R g + R m + R n + $ hg status + M d + M j + A aa + R b + +(with all) + + $ hg amend --extract --all + new changeset is empty + (use 'hg prune .' to remove it) + $ hg status --change . + $ hg status + M d + M j + M o + A aa + A e + A ff + A h + A k + A l + R b + R c + R f + R g + R m + R n diff -r 44a6e6fbf80b -r c64e2167514b tests/test-userguide.t --- a/tests/test-userguide.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-userguide.t Fri Jul 14 03:16:06 2017 +0200 @@ -18,7 +18,7 @@ example 2: unsafe amend with plain vanilla Mercurial: the original commit is stripped $ hg commit --amend -u alice -d '1 0' -m 'implement feature Y' - saved backup bundle to $TESTTMP/t/.hg/strip-backup/6e725fd2be6f-42cc74d4-amend-backup.hg (glob) + saved backup bundle to $TESTTMP/t/.hg/strip-backup/6e725fd2be6f-42cc74d4-amend.hg (glob) $ hg log -r 23fe4ac6d3f1 abort: unknown revision '23fe4ac6d3f1'! [255] diff -r 44a6e6fbf80b -r c64e2167514b tests/test-wireproto-bundle1.t --- a/tests/test-wireproto-bundle1.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-wireproto-bundle1.t Fri Jul 14 03:16:06 2017 +0200 @@ -70,6 +70,7 @@ remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) remote: 2 new obsolescence markers + remote: obsoleted 1 changesets $ hg push pushing to ssh://user@dummy/server searching for changes @@ -87,6 +88,7 @@ adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) 2 new obsolescence markers + obsoleted 1 changesets (run 'hg heads' to see heads) $ hg -R ../other pull pulling from ssh://user@dummy/server diff -r 44a6e6fbf80b -r c64e2167514b tests/test-wireproto.t --- a/tests/test-wireproto.t Sun Jul 09 15:01:32 2017 +0300 +++ b/tests/test-wireproto.t Fri Jul 14 03:16:06 2017 +0200 @@ -74,6 +74,7 @@ remote: added 1 changesets with 1 changes to 1 files (+1 heads) remote: obsmarker-exchange: 151 bytes received remote: 2 new obsolescence markers + remote: obsoleted 1 changesets $ hg push pushing to ssh://user@dummy/server searching for changes @@ -92,6 +93,7 @@ added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) obsmarker-exchange: 151 bytes received 2 new obsolescence markers + obsoleted 1 changesets (run 'hg heads' to see heads) $ hg -R ../other pull pulling from ssh://user@dummy/server @@ -136,8 +138,9 @@ remote: adding manifests remote: adding file changes remote: added 1 changesets with 0 changes to 1 files (+1 heads) - remote: obsmarker-exchange: 227 bytes received + remote: obsmarker-exchange: 226 bytes received remote: 1 new obsolescence markers + remote: obsoleted 1 changesets $ hg -R ../other pull pulling from ssh://user@dummy/server searching for changes @@ -145,8 +148,9 @@ adding manifests adding file changes added 1 changesets with 0 changes to 1 files (+1 heads) - obsmarker-exchange: 227 bytes received + obsmarker-exchange: 226 bytes received 1 new obsolescence markers + obsoleted 1 changesets (run 'hg heads' to see heads) test discovery avoid exchanging known markers @@ -169,7 +173,7 @@ (skipping discovery of obsolescence markers, will exchange everything) (controled by 'experimental.evolution.obsdiscovery' configuration) no changes found - remote: obsmarker-exchange: 377 bytes received + remote: obsmarker-exchange: 376 bytes received [1] $ hg -R ../other pull --config experimental.evolution.obsdiscovery=no pulling from ssh://user@dummy/server @@ -177,6 +181,6 @@ no changes found (skipping discovery of obsolescence markers, will exchange everything) (controled by 'experimental.evolution.obsdiscovery' configuration) - obsmarker-exchange: 377 bytes received + obsmarker-exchange: 376 bytes received $ cd ..