# HG changeset patch # User Anton Shestakov # Date 1588941389 -28800 # Node ID be5aa681c122ff762f161dcae8f4bc29020b4520 # Parent 90fbbc29b93a459269478dc344a854273bbac95a# Parent c7c37251d0e2d0100683d1d3025adebefbed540b test-compat: merge mercurial-5.1 into mercurial-5.0 diff -r 90fbbc29b93a -r be5aa681c122 .hgtags --- a/.hgtags Wed Apr 08 01:16:54 2020 +0800 +++ b/.hgtags Fri May 08 20:36:29 2020 +0800 @@ -85,3 +85,5 @@ d989bab720e5f7638a9e58fda76cf3f4b40d0611 9.2.1 ef41094c34e162eb32ef24bf66d9776d1112751a 9.2.2 583dc6ef3eb21fbf6574021136f32b8a1163506c 9.3.0 +8d955635cf457aaa4810d77740721d4275001f74 9.3.1 +0b5d1b0b3336151bd176ced7862ec54fb9c260aa 10.0.0 diff -r 90fbbc29b93a -r be5aa681c122 CHANGELOG --- a/CHANGELOG Wed Apr 08 01:16:54 2020 +0800 +++ b/CHANGELOG Fri May 08 20:36:29 2020 +0800 @@ -1,17 +1,49 @@ Changelog ========= -9.3.1 - in progress +10.0.0 -- 2020-05-08 +-------------------- + + * auto-publish: issue the capabilities in all cases + + * compat: clean up old compatibility code + * compat: compatibility with Mercurial 5.4 + + * evolve: add {obsorigin}, a template keyword that works similarly to + {obsfate}, but shows predecessors of a changeset + * evolve: fix permissions of new cache files using SQLite + * evolve: always create commit when resolving divergence + * evolve: handle relocation during divergence resolution producing no changes + * evolve: provide cache to successorssets() in more cases + + * obslog: make --all and --filternonlocal work properly with --no-graph + * obslog: add --origin flag to show predecessors instead of successors + * obslog: make --origin flag the default + + * stablerangecache: sanity check subranges + +topic (0.18.2) + + * topic: provide cache to successorssets() in one more case + +9.3.1 -- 2020-04-08 ------------------- + * compat: make __touch-noise__ and __rewind-hash__ extra field be bytes + * obsexchange: avoid sending too large request to http server * obsdiscovery: server no longer aborts with a 500 error if client sends a request without obscommon + * obsdiscovery: avoid considering locally hidden changeset + * single-heads: ignore obsolete section when enforcing one head per branch + * evolve: improved behavior when evolving above the result of a split - * topic: fix auto-publish=abort with server that auto-publishes bare branches * evolve: checking for new head on push is no longer confused by mixed - branches(or topics) - * single-heads: ignore obsolete section when enforcing one head per branch + branches (or topics) + +topic (0.18.1) + + * topic: fix auto-publish=abort with server that auto-publishes bare branches 9.3.0 -- 2020-03-04 ------------------- diff -r 90fbbc29b93a -r be5aa681c122 MANIFEST.in --- a/MANIFEST.in Wed Apr 08 01:16:54 2020 +0800 +++ b/MANIFEST.in Fri May 08 20:36:29 2020 +0800 @@ -1,31 +1,11 @@ -prune contrib -prune debian -prune .gitlab -prune hgext3rd/evolve/hack - -exclude .hg-format-source -exclude .gitlab-ci.yml -exclude hgext3rd/evolve/legacy.py -exclude Makefile -exclude tests/test-drop.t -exclude tests/test-inhibit.t -exclude tests/test-oldconvert.t include CHANGELOG include COPYING -include hgext3rd/__init__.py -include hgext3rd/evolve/*.py -include hgext3rd/evolve/thirdparty/*.py -include hgext3rd/topic/*.py include hgext3rd/topic/README include MANIFEST.in include README include setup.py -include tests/*.py -include tests/*.sh -include tests/testlib/*.sh -include tests/*.t +recursive-include tests *.py *.sh *.t -exclude docs/tutorial/.netlify include docs/makefile include docs/*.py include docs/README @@ -35,3 +15,17 @@ include docs/tutorial/standalone.html recursive-include docs/figures *.svg *.png recursive-include docs/tutorial *.css *.js *.md *.py *.rst *.sh *.t + +exclude docs/tutorial/.netlify +exclude .gitlab-ci.yml +exclude ./hgext3rd/evolve/legacy.py +exclude .hg-format-source +exclude Makefile +exclude tests/test-drop.t +exclude tests/test-inhibit.t +exclude tests/test-oldconvert.t + +prune contrib +prune debian +prune .gitlab +prune hgext3rd/evolve/hack diff -r 90fbbc29b93a -r be5aa681c122 README --- a/README Wed Apr 08 01:16:54 2020 +0800 +++ b/README Fri May 08 20:36:29 2020 +0800 @@ -139,20 +139,32 @@ $ cd tests $ python $HGSRC/tests/run-tests.py +When certain blocks of code need to cope with API changes in core Mercurial, +they should have comments in the ``hg <= x.y (commit hash)`` format. For +example, if a function needs another code path because of changes introduced in +02802fa87b74 that was first included in Mercurial 5.3, then the comment should +be:: + + # hg <= 5.2 (02802fa87b74) + +See also tests/test-check-compat-strings.t. + Branch policy ------------- -The evolve test are highly impacted by changes in core. To deal with this, we use named branches. +The evolve tests are highly impacted by changes in core. To deal with this, we +use named branches. -There are two main branches: "stable" and "default". Tests on these branch are -supposed to pass with the corresponding "default" and "stable" branch from core -Mercurial. The documentation is built from the tip of stable. +There are two main branches: "stable" and "default". Tests on these branches +are supposed to pass with the corresponding "default" and "stable" branch from +core Mercurial. The documentation is built from the tip of stable. -In addition, we have compatibility branches to check tests on older version of +In addition, we have compatibility branches to check tests on older versions of Mercurial. They are the "mercurial-x.y" branches. They are used to apply -expected test change only, no code change should happen there. +expected test changes only, no code changes should happen there. -test output change from a changeset in core should adds the following line to their description: +Test output changes from a changeset in core should add the following line to +their patch description: CORE-TEST-OUTPUT-UPDATE: diff -r 90fbbc29b93a -r be5aa681c122 contrib/check-compat-strings.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/check-compat-strings.sh Fri May 08 20:36:29 2020 +0800 @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -euo pipefail + +unset GREP_OPTIONS + +# This script finds compatibility-related comments with a node hash specified +# in all files in a given directory (. by default) and looks up the hash in a +# repo (~/hg by default) to determine if each of the comments is correct and, +# if not, it suggests the correct release. This can prevent accidentally +# removing a piece of code that was misattributed to a different (earlier) +# release of core hg. + +# Usage: $0 WDIR HGREPO where WDIR is usually evolve/hgext3rd/ and HGREPO is +# the place with core Mercurial repo (not just checkout). Said repo has to be +# sufficiently up-to-date, otherwise this script may not work correctly. + +workdir=${1:-'.'} +hgdir=${2:-~/hg} +grep -Ern 'hg <= [0-9.]+ \([0-9a-f+]+\)' "$workdir" | while read -r line; do + bashre='hg <= ([0-9.]+) \(([0-9a-f+]+)\)' + if [[ $line =~ $bashre ]]; then + expected=${BASH_REMATCH[1]} + revset=${BASH_REMATCH[2]} + tagrevset="max(tag('re:^[0-9]\\.[0-9]$') - ($revset)::)" + lastrel=$(HGPLAIN=1 hg --cwd "$hgdir" log -r "$tagrevset" -T '{tags}') + if [[ "$lastrel" != "$expected" ]]; then + echo "$line" + echo "actual last major release without $revset is $lastrel" + echo + fi + fi +done diff -r 90fbbc29b93a -r be5aa681c122 debian/changelog --- a/debian/changelog Wed Apr 08 01:16:54 2020 +0800 +++ b/debian/changelog Fri May 08 20:36:29 2020 +0800 @@ -1,3 +1,21 @@ +mercurial-evolve (10.0.0-1) unstable; urgency=medium + + * new upstream release + + -- Anton Shestakov Fri, 08 May 2020 18:33:58 +0800 + +mercurial-evolve (9.3.1-2) unstable; urgency=medium + + * update minimum required version of mercurial in debian/control + + -- Anton Shestakov Thu, 16 Apr 2020 18:30:35 +0800 + +mercurial-evolve (9.3.1-1) unstable; urgency=medium + + * new upstream release + + -- Anton Shestakov Wed, 08 Apr 2020 21:04:59 +0800 + mercurial-evolve (9.3.0-1) unstable; urgency=medium * new upstream release diff -r 90fbbc29b93a -r be5aa681c122 debian/control --- a/debian/control Wed Apr 08 01:16:54 2020 +0800 +++ b/debian/control Fri May 08 20:36:29 2020 +0800 @@ -7,7 +7,7 @@ Pierre-Yves David , Standards-Version: 3.9.3 Build-Depends: - mercurial (>= 4.5), + mercurial (>= 4.6), python, python3, debhelper (>= 10), @@ -28,7 +28,7 @@ ${python3:Depends}, ${misc:Depends}, ${sphinxdoc:Depends}, - mercurial (>= 4.5), + mercurial (>= 4.6), Built-Using: ${sphinxdoc:Built-Using} Description: evolve extension for Mercurial This package provides the experimental "evolve" extension for the Mercurial diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/__init__.py --- a/hgext3rd/evolve/__init__.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/__init__.py Fri May 08 20:36:29 2020 +0800 @@ -33,7 +33,7 @@ backported to older version of Mercurial by this extension. Some older experimental protocol are also supported for a longer time in the extensions to help people transitioning. (The extensions is currently compatible down to -Mercurial version 4.4). +Mercurial version 4.6). New Config:: @@ -269,14 +269,12 @@ bookmarks as bookmarksmod, cmdutil, commands, - context, - dirstate, error, help, hg, lock as lockmod, + logcmdutil, node, - patch, pycompat, revset, scmutil, @@ -361,29 +359,6 @@ eh.configitem(b'experimental', b'evolution.allnewcommands', None) eh.configitem(b'experimental', b'prunestrip', False) -# pre hg 4.0 compat - -if not util.safehasattr(dirstate.dirstate, 'parentchange'): - import contextlib - - @contextlib.contextmanager - def parentchange(self): - '''Context manager for handling dirstate parents. - - If an exception occurs in the scope of the context manager, - the incoherent dirstate won't be written when wlock is - released. - ''' - self._parentwriters += 1 - yield - # Typically we want the "undo" step of a context manager in a - # finally block so it happens even when an exception - # occurs. In this case, however, we only want to decrement - # parentwriters if the code in the with statement exits - # normally, so we don't have a try/finally here on purpose. - self._parentwriters -= 1 - dirstate.dirstate.parentchange = parentchange - ##################################################################### ### Option configuration ### ##################################################################### @@ -723,38 +698,6 @@ ui.warn(b"(%s)\n" % solvemsg) -if util.safehasattr(context, '_filterederror'): # <= hg-4.5 - @eh.wrapfunction(context, '_filterederror') - def evolve_filtererror(original, repo, changeid): - """build an exception to be raised about a filtered changeid - - This is extracted in a function to help extensions (eg: evolve) to - experiment with various message variants.""" - if repo.filtername.startswith(b'visible'): - - unfilteredrepo = repo.unfiltered() - rev = repo[scmutil.revsingle(unfilteredrepo, changeid)] - reason, successors = obshistory._getobsfateandsuccs(unfilteredrepo, rev.node()) - - # Be more precise in case the revision is superseded - if reason == b'superseded': - reason = _(b"successor: %s") % successors[0] - elif reason == b'superseded_split': - if len(successors) <= 2: - reason = _(b"successors: %s") % b", ".join(successors) - else: - firstsuccessors = b", ".join(successors[:2]) - remainingnumber = len(successors) - 2 - successorsmsg = _(b"%s and %d more") % (firstsuccessors, remainingnumber) - reason = _(b"successors: %s") % successorsmsg - - msg = _(b"hidden revision '%s'") % changeid - hint = _(b'use --hidden to access hidden revisions; %s') % reason - return error.FilteredRepoLookupError(msg, hint=hint) - msg = _(b"filtered revision '%s' (not in '%s' subset)") - msg %= (changeid, repo.filtername) - return error.FilteredRepoLookupError(msg) - @eh.wrapcommand(b"update") @eh.wrapcommand(b"pull") def wrapmayobsoletewc(origfn, ui, repo, *args, **opts): @@ -827,21 +770,8 @@ @eh.wrapfunction(mercurial.cmdutil, 'tryimportone') def tryimportone(orig, ui, repo, hunk, parents, opts, *args, **kwargs): expected = {b'node': None} - if not util.safehasattr(hunk, 'get'): # hg < 4.6 - oldextract = patch.extract - - def extract(*args, **kwargs): - ret = oldextract(*args, **kwargs) - _getnodefrompatch(ret, expected) - return ret - try: - patch.extract = extract - ret = orig(ui, repo, hunk, parents, opts, *args, **kwargs) - finally: - patch.extract = oldextract - else: - _getnodefrompatch(hunk, expected) - ret = orig(ui, repo, hunk, parents, opts, *args, **kwargs) + _getnodefrompatch(hunk, expected) + ret = orig(ui, repo, hunk, parents, opts, *args, **kwargs) created = ret[1] if (opts[b'obsolete'] and None not in (created, expected[b'node']) and created != expected[b'node']): @@ -1019,7 +949,8 @@ if topic and hastopic: template = utility.stacktemplate - displayer = compat.changesetdisplayer(ui, repo, {b'template': template}) + displayer = logcmdutil.changesetdisplayer(ui, repo, + {b'template': template}) target, bookmark = _findprevtarget(repo, displayer, opts.get('move_bookmark'), topic) @@ -1077,7 +1008,8 @@ children = [ctx for ctx in children if ctx not in filtered] template = utility.stacktemplate opts['stacktemplate'] = True - displayer = compat.changesetdisplayer(ui, repo, {b'template': template}) + displayer = logcmdutil.changesetdisplayer(ui, repo, + {b'template': template}) # check if we need to evolve while updating to the next child revision needevolve = False @@ -1376,7 +1308,7 @@ statemod.addunfinished(b'pick', fname=b'pickstate', continueflag=True, abortfunc=cmdrewrite.hgabortpick) else: - # compat <= hg-5.0 (5f2f6912c9e6) + # hg <= 5.0 (5f2f6912c9e6) estate = (b'evolvestate', False, False, _(b'evolve in progress'), _(b"use 'hg evolve --continue' or 'hg evolve --abort' to abort")) cmdutil.unfinishedstates.append(estate) diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/cmdrewrite.py --- a/hgext3rd/evolve/cmdrewrite.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/cmdrewrite.py Fri May 08 20:36:29 2020 +0800 @@ -11,7 +11,6 @@ from __future__ import absolute_import -import contextlib import random from mercurial import ( @@ -23,6 +22,7 @@ error, hg, lock as lockmod, + logcmdutil, merge, node, obsolete, @@ -33,6 +33,8 @@ util, ) +from mercurial.utils import dateutil + from mercurial.i18n import _ from . import ( @@ -74,7 +76,7 @@ """ # N.B. this is extremely similar to setupheaderopts() in mq.py if not opts.get('date') and opts.get('current_date'): - opts['date'] = b'%d %d' % compat.makedate() + opts['date'] = b'%d %d' % dateutil.makedate() if not opts.get('user') and opts.get('current_user'): opts['user'] = ui.username() @@ -216,14 +218,7 @@ def _writepatch(ui, repo, old, fp): """utility function to use filestore and patchrepo to apply a patch to the repository with metadata being extracted from the patch""" - metadata = patch.extract(ui, fp) - if util.safehasattr(metadata, 'get'): # < hg-4.6 - @contextlib.contextmanager - def patchcontext(): - yield metadata - patchcontext = patchcontext() - else: - patchcontext = metadata + patchcontext = patch.extract(ui, fp) pold = old.p1() with patchcontext as metadata: @@ -267,7 +262,7 @@ fp.write(b"# HG changeset patch\n") fp.write(b"# User %s\n" % ctx.user()) fp.write(b"# Date %d %d\n" % ctx.date()) - fp.write(b"# %s\n" % compat.datestr(ctx.date())) + fp.write(b"# %s\n" % dateutil.datestr(ctx.date())) if branch and branch != b'default': fp.write(b"# Branch %s\n" % branch) fp.write(b"# Node ID %s\n" % node.hex(nodeval)) @@ -525,7 +520,8 @@ try: uipathfn = scmutil.getuipathfn(repo) except AttributeError: - uipathfn = match.rel # <= 4.9 + # hg <= 4.9 (e6ec0737b706) + uipathfn = match.rel for f in sorted(badfiles): if f in s.clean: @@ -970,7 +966,7 @@ date = opts.get('date') user = opts.get('user') if date: - metadata[b'date'] = b'%i %i' % compat.parsedate(date) + metadata[b'date'] = b'%i %i' % dateutil.parsedate(date) if user: metadata[b'user'] = user return metadata @@ -1395,7 +1391,7 @@ with ui.configoverride(overrides, b'touch'): rewriteutil.precheck(repo, revs, b'touch') tmpl = utility.shorttemplate - displayer = compat.changesetdisplayer(ui, repo, {b'template': tmpl}) + displayer = logcmdutil.changesetdisplayer(ui, repo, {b'template': tmpl}) with repo.wlock(), repo.lock(), repo.transaction(b'touch'): touchnodes(ui, repo, revs, displayer, **opts) @@ -1495,7 +1491,7 @@ with ui.configoverride(overrides, b'pick'): stats = merge.graft(repo, origctx, origctx.p1(), [b'local', b'destination']) - if compat.hasconflict(stats): + if stats.unresolvedcount: pickstate.addopts({b'orignode': origctx.node(), b'oldpctx': pctx.node()}) pickstate.save() diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/compat.py --- a/hgext3rd/evolve/compat.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/compat.py Fri May 08 20:36:29 2020 +0800 @@ -8,12 +8,10 @@ import array import contextlib -import inspect from mercurial import ( context, copies, - mdiff, obsolete, pycompat, registrar, @@ -22,7 +20,6 @@ util, ui as uimod, ) -from mercurial.hgweb import hgweb_mod if pycompat.ispy3: arraytobytes = array.array.tobytes @@ -31,21 +28,7 @@ arraytobytes = array.array.tostring arrayfrombytes = array.array.fromstring -# hg < 4.6 compat (c8e2d6ed1f9e) -try: - from mercurial import logcmdutil - changesetdisplayer = logcmdutil.changesetdisplayer - changesetprinter = logcmdutil.changesetprinter - displaygraph = logcmdutil.displaygraph - changesetdiffer = logcmdutil.changesetdiffer -except (AttributeError, ImportError): - from mercurial import cmdutil - changesetdisplayer = cmdutil.show_changeset # pytype: disable=module-attr - changesetprinter = cmdutil.changeset_printer # pytype: disable=module-attr - displaygraph = cmdutil.displaygraph # pytype: disable=module-attr - changesetdiffer = None - -# hg <= 5.3 (c21aca51b392) +# hg <= 5.2 (c21aca51b392) try: from mercurial import pathutil dirs = pathutil.dirs @@ -95,96 +78,27 @@ islink=b'l' in flags, isexec=b'x' in flags, copysource=copied.get(path)) - # compat with hg <- 4.9 + # hg <= 4.9 (550a172a603b) elif varnames[2] == r"changectx": mctx = context.memfilectx(repo, ctx, fctx.path(), fctx.data(), islink=b'l' in flags, isexec=b'x' in flags, copied=copied.get(path)) # pytype: disable=wrong-keyword-args - else: - mctx = context.memfilectx(repo, fctx.path(), fctx.data(), - islink=b'l' in flags, - isexec=b'x' in flags, - copied=copied.get(path)) # pytype: disable=wrong-keyword-args return mctx -def strdiff(a, b, fn1, fn2): - """ A version of mdiff.unidiff for comparing two strings - """ - args = [a, b'', b, b'', fn1, fn2] - - # hg < 4.6 compat 8b6dd3922f70 - if util.safehasattr(inspect, 'signature'): - signature = inspect.signature(mdiff.unidiff) - needsbinary = r'binary' in signature.parameters - else: - argspec = inspect.getargspec(mdiff.unidiff) - needsbinary = r'binary' in argspec.args - - if needsbinary: - args.append(False) - - return mdiff.unidiff(*args) - -# date related - -# hg <= 4.5 (c6061cadb400) try: - import mercurial.utils.dateutil - datestr = mercurial.utils.dateutil.datestr - makedate = mercurial.utils.dateutil.makedate - parsedate = mercurial.utils.dateutil.parsedate -except ImportError: - import mercurial.util - datestr = mercurial.util.datestr # pytype: disable=module-attr - makedate = mercurial.util.makedate # pytype: disable=module-attr - parsedate = mercurial.util.parsedate # pytype: disable=module-attr - -def wireprotocommand(exthelper, name, args=b'', permission=b'pull'): - try: - # Since b4d85bc1 - from mercurial.wireprotov1server import wireprotocommand - return wireprotocommand(name, args, permission=permission) - except (ImportError, AttributeError): - from mercurial import wireproto - - if 3 <= len(wireproto.wireprotocommand.func_defaults): - return wireproto.wireprotocommand(name, args, permission=permission) - - # <= hg-4.5 permission must be registered in dictionnary - def decorator(func): - @eh.extsetup - def install(ui): - hgweb_mod.perms[name] = permission - wireproto.commands[name] = (func, args) - return decorator - -# mercurial <= 4.5 do not have the updateresult object -try: - from mercurial.merge import updateresult -except (ImportError, AttributeError): - updateresult = None - -# 46c2b19a1263f18a5829a21b7a5053019b0c5a31 in hg moved repair.stripbmrevset to -# scmutil.bookmarkrevs -# This change is a part of 4.7 cycle, so drop this when we drop support for 4.6 -try: + # hg <= 4.6 (46c2b19a1263) bmrevset = repair.stripbmrevset # pytype: disable=module-attr except AttributeError: bmrevset = scmutil.bookmarkrevs -def hasconflict(upres): - if updateresult is None: - return bool(upres[-1]) - return bool(upres.unresolvedcount) - hg48 = util.safehasattr(copies, 'stringutil') # code imported from Mercurial core at ae17555ef93f + patch def fixedcopytracing(repo, c1, c2, base): """A complete copy-patse of copies._fullcopytrace with a one line fix to handle when the base is not parent of both c1 and c2. This should be converted in a compat function once https://phab.mercurial-scm.org/D3896 - gets in and once we drop support for 4.7, this should be removed.""" + gets in and once we drop support for 4.6, this should be removed.""" from mercurial import pathutil @@ -205,7 +119,7 @@ if util.safehasattr(base, 'isancestorof'): dirtyc1 = not base.isancestorof(_c1) dirtyc2 = not base.isancestorof(_c2) - else: # hg <= 4.6 + else: # hg <= 4.6 (fbec9c0b32d3) dirtyc1 = not base.descendant(_c1) dirtyc2 = not base.descendant(_c2) graft = dirtyc1 or dirtyc2 @@ -213,7 +127,7 @@ if graft: tca = _c1.ancestor(_c2) - # hg < 4.8 compat (dc50121126ae) + # hg <= 4.9 (dc50121126ae) try: limit = copies._findlimit(repo, c1, c2) # pytype: disable=module-attr except (AttributeError, TypeError): @@ -434,7 +348,7 @@ return copy, movewithdir, diverge, renamedelete, dirmove -# hg <= 4.9 compat (7694b685bb10) +# hg <= 4.9 (7694b685bb10) fixupstreamed = util.safehasattr(scmutil, 'movedirstate') if not fixupstreamed: copies._fullcopytracing = fixedcopytracing @@ -449,7 +363,7 @@ return {'helpcategory': category} # nodemap.get and index.[has_node|rev|get_rev] -# hg <= 5.3 (02802fa87b74) +# hg <= 5.2 (02802fa87b74) def getgetrev(cl): """Returns index.get_rev or nodemap.get (for pre-5.3 Mercurial).""" if util.safehasattr(cl.index, 'get_rev'): diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/depthcache.py --- a/hgext3rd/evolve/depthcache.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/depthcache.py Fri May 08 20:36:29 2020 +0800 @@ -16,11 +16,7 @@ scmutil, ) -try: - from mercurial.utils.stringutil import forcebytestr -except ImportError: - # hg <= 4.5 (f99d64e8a4e4) - from mercurial.util import forcebytestr +from mercurial.utils.stringutil import forcebytestr from . import ( compat, diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/evolvecmd.py --- a/hgext3rd/evolve/evolvecmd.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/evolvecmd.py Fri May 08 20:36:29 2020 +0800 @@ -16,9 +16,10 @@ cmdutil, commands, context, + encoding, error, - encoding, hg, + logcmdutil, merge, mergeutil, node as nodemod, @@ -68,11 +69,11 @@ assert tr is not None displayer = None if stacktmplt: - displayer = compat.changesetdisplayer(ui, repo, - {b'template': stacktemplate}) + displayer = logcmdutil.changesetdisplayer(ui, repo, + {b'template': stacktemplate}) else: - displayer = compat.changesetdisplayer(ui, repo, - {b'template': shorttemplate}) + displayer = logcmdutil.changesetdisplayer(ui, repo, + {b'template': shorttemplate}) if b'orphan' == category: result = _solveunstable(ui, repo, ctx, evolvestate, displayer, dryrun, confirm, progresscb, @@ -443,6 +444,14 @@ return (True, divergent, other, resolutionparent, relocatereq) +def _relocatedivergent(repo, orig, dest, evolvestate): + """relocates a divergent commit and saves the evolve state""" + configoverride = repo.ui.configoverride( + {(b'ui', b'allowemptycommit'): b'true'}, b'evolve' + ) + with state.saver(evolvestate, {b'current': orig.node()}), configoverride: + return _relocate(repo, orig, dest, evolvestate, keepbranch=True) + def _solvedivergent(ui, repo, divergent, evolvestate, displayer, dryrun=False, confirm=False, progresscb=None): """tries to solve content-divergence of a changeset @@ -520,9 +529,8 @@ evolvestate[b'relocating-div'] = True ui.status(_(b'rebasing "divergent" content-divergent changeset %s on' b' %s\n' % (divergent, repo[succsdivp1]))) - with state.saver(evolvestate, {b'current': divergent.node()}): - newdivergent = _relocate(repo, divergent, repo[succsdivp1], - evolvestate, keepbranch=True) + newdivergent = _relocatedivergent(repo, divergent, repo[succsdivp1], + evolvestate) evolvestate[b'old-divergent'] = divergent.node() divergent = repo[newdivergent] evolvestate[b'relocating-div'] = False @@ -542,9 +550,7 @@ evolvestate[b'relocating-other'] = True ui.status(_(b'rebasing "other" content-divergent changeset %s on' b' %s\n' % (other, divergent.p1()))) - with state.saver(evolvestate, {b'current': other.node()}): - newother = _relocate(repo, other, divergent.p1(), evolvestate, - keepbranch=True) + newother = _relocatedivergent(repo, other, divergent.p1(), evolvestate) evolvestate[b'old-other'] = other.node() other = repo[newother] evolvestate[b'relocating-other'] = False @@ -608,7 +614,7 @@ hg._showstats(repo, stats) # conflicts while merging content-divergent changesets - if compat.hasconflict(stats): + if stats.unresolvedcount: hint = _(b"see 'hg help evolve.interrupted'") raise error.InterventionRequired(_(b"unresolved merge conflicts"), hint=hint) @@ -673,23 +679,26 @@ else: date = max(divergent.date(), other.date()) - # new node if any formed as the replacement - newnode = repo.commit(text=desc, user=user, date=date) - if newnode == divergent.node() or newnode is None: - # no changes - new = divergent - storemarker = True - repo.ui.status(_(b"nothing changed\n")) - hg.updaterepo(repo, divergent.rev(), False) + # We really want a new commit in order to avoid obsmarker cycles (otherwise + # divergence resolutions done in separate repos may create markers in the + # opposite directions). For that reason, we set ui.allowemptycommit and + # also add also add some salt to the commit extras to make sure we don't + # reuse an existing nodeid. + with repo.ui.configoverride( + {(b'ui', b'allowemptycommit'): b'true'}, b'evolve' + ): + extra = { + b'divergence_source_local': divergent.hex(), + b'divergence_source_other': other.hex() + } + newnode = repo.commit(text=desc, user=user, date=date, extra=extra) + new = repo[newnode] + hg.updaterepo(repo, new.rev(), False) + if haspubdiv and publicdiv == divergent: + bypassphase(repo, (divergent, new), operation=b'evolve') else: - new = repo[newnode] - newnode = new.node() - hg.updaterepo(repo, new.rev(), False) - if haspubdiv and publicdiv == divergent: - bypassphase(repo, (divergent, new), operation=b'evolve') - else: - obsolete.createmarkers(repo, [(divergent, (new,))], - operation=b'evolve') + obsolete.createmarkers(repo, [(divergent, (new,))], + operation=b'evolve') # creating markers and moving phases post-resolution if haspubdiv and publicdiv == other: @@ -780,7 +789,7 @@ try: effectflag = obsutil.geteffectflag(prec, (succ,)) except TypeError: - # hg <= 4.7 + # hg <= 4.7 (bae6f1418a95) effectflag = obsutil.geteffectflag((prec, (succ,))) metadata[obsutil.EFFECTFLAGFIELD] = b"%d" % effectflag @@ -989,10 +998,7 @@ sha1s = re.findall(sha1re, commitmsg) unfi = repo.unfiltered() for sha1 in sha1s: - if util.safehasattr(scmutil, 'resolvehexnodeidprefix'): # > hg-4.6 - fullnode = scmutil.resolvehexnodeidprefix(unfi, sha1) - else: - fullnode = unfi.changelog.index.partialmatch(sha1) + fullnode = scmutil.resolvehexnodeidprefix(unfi, sha1) if fullnode is None: continue ctx = unfi[fullnode] @@ -1013,7 +1019,7 @@ tr = repo.currenttransaction() assert tr is not None r = _evolvemerge(repo, orig, dest, pctx, keepbranch) - if compat.hasconflict(r): # some conflict + if r.unresolvedcount: # some conflict with repo.dirstate.parentchange(), compat.parentchange(repo): repo.setparents(dest.node(), orig.node()) repo.dirstate.write(tr) @@ -1200,11 +1206,12 @@ torev = repo.changelog.rev dest = set() tovisit = list(parents(rev)) + cache = {} while tovisit: r = tovisit.pop() if r == -1: continue - succsets = obsutil.successorssets(repo, tonode(r)) + succsets = obsutil.successorssets(repo, tonode(r), cache=cache) if not succsets: tovisit.extend(parents(r)) else: @@ -1814,8 +1821,8 @@ oldid = repo[b'.'].node() startctx = repo[b'.'] dryrunopt = opts.get('dry_run', False) - displayer = compat.changesetdisplayer(ui, repo, - {b'template': shorttemplate}) + displayer = logcmdutil.changesetdisplayer(ui, repo, + {b'template': shorttemplate}) try: ctx = repo[utility._singlesuccessor(repo, repo[b'.'])] except utility.MultipleSuccessorsError as exc: @@ -2060,9 +2067,8 @@ evolvestate[b'relocating-other'] = True ui.status(_(b'rebasing "other" content-divergent changeset %s on' b' %s\n' % (other, divergent.p1()))) - with state.saver(evolvestate, {b'current': other.node()}): - newother = _relocate(repo, other, divergent.p1(), - evolvestate, keepbranch=True) + newother = _relocatedivergent(repo, other, divergent.p1(), + evolvestate) evolvestate[b'old-other'] = other.node() other = repo[newother] evolvestate[b'relocating-other'] = False diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/firstmergecache.py --- a/hgext3rd/evolve/firstmergecache.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/firstmergecache.py Fri May 08 20:36:29 2020 +0800 @@ -16,11 +16,7 @@ node as nodemod, ) -try: - from mercurial.utils.stringutil import forcebytestr -except ImportError: - # hg <= 4.5 (f99d64e8a4e4) - from mercurial.util import forcebytestr +from mercurial.utils.stringutil import forcebytestr from . import ( compat, diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/metadata.py --- a/hgext3rd/evolve/metadata.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/metadata.py Fri May 08 20:36:29 2020 +0800 @@ -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__ = b'9.3.1.dev' -testedwith = b'4.6.2 4.7 4.8 4.9 5.0 5.1 5.2 5.3' +__version__ = b'10.0.0' +testedwith = b'4.6.2 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4' minimumhgversion = b'4.6' buglink = b'https://bz.mercurial-scm.org/' diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/obscache.py --- a/hgext3rd/evolve/obscache.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/obscache.py Fri May 08 20:36:29 2020 +0800 @@ -19,11 +19,7 @@ util, ) -try: - from mercurial.utils.stringutil import forcebytestr -except ImportError: - # hg <= 4.5 (f99d64e8a4e4) - from mercurial.util import forcebytestr +from mercurial.utils.stringutil import forcebytestr from . import ( compat, diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/obsdiscovery.py --- a/hgext3rd/evolve/obsdiscovery.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/obsdiscovery.py Fri May 08 20:36:29 2020 +0800 @@ -17,6 +17,7 @@ import hashlib import heapq +import os import sqlite3 import struct import weakref @@ -30,15 +31,12 @@ node, obsolete, scmutil, + store, util, ) from mercurial.i18n import _ -try: - from mercurial.utils.stringutil import forcebytestr -except ImportError: - # hg <= 4.5 (f99d64e8a4e4) - from mercurial.util import forcebytestr +from mercurial.utils.stringutil import forcebytestr from . import ( compat, @@ -49,14 +47,9 @@ stablerangecache, ) -try: - from mercurial import wireprototypes, wireprotov1server - from mercurial.wireprotov1peer import wirepeer - from mercurial.wireprototypes import encodelist, decodelist -except (ImportError, AttributeError): # <= hg-4.5 - from mercurial import wireproto as wireprototypes - wireprotov1server = wireprototypes - from mercurial.wireproto import wirepeer, encodelist, decodelist +from mercurial import wireprototypes, wireprotov1server +from mercurial.wireprotov1peer import wirepeer +from mercurial.wireprototypes import encodelist, decodelist _pack = struct.pack _unpack = struct.unpack @@ -352,6 +345,7 @@ # cache status self._ondiskcachekey = None self._data = {} + self._createmode = store._calcmode(self._vfs) def clear(self, reset=False): super(_obshashcache, self).clear(reset=reset) @@ -499,12 +493,19 @@ def _db(self): try: - util.makedirs(self._vfs.dirname(self._path)) + util.makedirs(self._vfs.dirname(self._path), self._createmode) except OSError: return None + if self._createmode is not None: + pre_existed = os.access(self._path, os.R_OK) con = sqlite3.connect(encoding.strfromlocal(self._path), timeout=30, isolation_level=r"IMMEDIATE") con.text_factory = bytes + if self._createmode is not None and not pre_existed: + try: + os.chmod(self._path, self._createmode & 0o666) + except OSError: + pass return con @util.propertycache @@ -608,6 +609,7 @@ self._new.clear() self._valid = True self._ondiskcachekey = self._cachekey + @eh.wrapfunction(obsolete.obsstore, '_addmarkers') def _addmarkers(orig, obsstore, *args, **kwargs): obsstore.rangeobshashcache.clear() @@ -702,7 +704,7 @@ except ValueError: self._abort(error.ResponseError(_(b"unexpected response:"), d)) -@compat.wireprotocommand(eh, b'evoext_obshashrange_v1', b'ranges') +@wireprotov1server.wireprotocommand(b'evoext_obshashrange_v1', b'ranges', b'pull') def srv_obshashrange_v1(repo, proto, ranges): ranges = decodelist(ranges) ranges = [_decrange(r) for r in ranges] @@ -726,21 +728,10 @@ caps = orig(repo, proto) enabled = _useobshashrange(repo) if obsolete.isenabled(repo, obsolete.exchangeopt) and enabled: - - # Compat hg 4.6+ (2f7290555c96) - bytesresponse = False - if util.safehasattr(caps, 'data'): - bytesresponse = True - caps = caps.data - - caps = caps.split() + caps = caps.data.split() caps.append(b'_evoext_obshashrange_v1') caps.sort() - caps = b' '.join(caps) - - # Compat hg 4.6+ (2f7290555c96) - if bytesresponse: - caps = wireprototypes.bytesresponse(caps) + caps = wireprototypes.bytesresponse(b' '.join(caps)) return caps @eh.extsetup diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/obsexchange.py --- a/hgext3rd/evolve/obsexchange.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/obsexchange.py Fri May 08 20:36:29 2020 +0800 @@ -16,6 +16,8 @@ obsolete, pushkey, util, + wireprototypes, + wireprotov1server ) from mercurial.hgweb import common as hgwebcommon @@ -44,13 +46,7 @@ @eh.uisetup def addgetbundleargs(self): - try: - from mercurial import wireprototypes - gboptsmap = wireprototypes.GETBUNDLE_ARGUMENTS - except (ImportError, AttributeError): - # <= hg 4.5 - from mercurial import wireproto - gboptsmap = wireproto.gboptsmap + gboptsmap = wireprototypes.GETBUNDLE_ARGUMENTS gboptsmap[b'evo_obscommon'] = b'nodes' gboptsmap[b'evo_missing_nodes'] = b'nodes' @@ -126,34 +122,15 @@ """wrapper to advertise new capability""" caps = orig(repo, proto) if obsolete.isenabled(repo, obsolete.exchangeopt): - - # Compat hg 4.6+ (2f7290555c96) - bytesresponse = False - if util.safehasattr(caps, 'data'): - bytesresponse = True - caps = caps.data - - caps = caps.split() + caps = caps.data.split() caps.append(b'_evoext_getbundle_obscommon') caps.sort() - caps = b' '.join(caps) - - # Compat hg 4.6+ (2f7290555c96) - if bytesresponse: - from mercurial import wireprototypes - caps = wireprototypes.bytesresponse(caps) + caps = wireprototypes.bytesresponse(b' '.join(caps)) return caps @eh.extsetup def extsetup_obscommon(ui): - try: - from mercurial import wireprototypes, wireprotov1server - gboptsmap = wireprototypes.GETBUNDLE_ARGUMENTS - except (ImportError, AttributeError): - # <= hg 4.5 - from mercurial import wireproto - gboptsmap = wireproto.gboptsmap - wireprotov1server = wireproto + gboptsmap = wireprototypes.GETBUNDLE_ARGUMENTS gboptsmap[b'evo_obscommon'] = b'nodes' # wrap module content diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/obshistory.py --- a/hgext3rd/evolve/obshistory.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/obshistory.py Fri May 08 20:36:29 2020 +0800 @@ -13,14 +13,18 @@ commands, error, graphmod, - patch, + logcmdutil, + mdiff, + node as nodemod, obsutil, - node as nodemod, + patch, pycompat, scmutil, util, ) +from mercurial.utils import dateutil + from mercurial.i18n import _ from . import ( @@ -45,6 +49,8 @@ @eh.extsetup def addtouchnoise(ui): obsutil.METABLACKLIST.append(re.compile(br'^__touch-noise__$')) + obsutil.METABLACKLIST.append(re.compile(br'^divergence_source_local$')) + obsutil.METABLACKLIST.append(re.compile(br'^divergence_source_other$')) @eh.command( b'obslog|olog', @@ -53,6 +59,7 @@ (b'a', b'all', False, _(b'show all related changesets, not only precursors')), (b'p', b'patch', False, _(b'show the patch between two obs versions')), (b'f', b'filternonlocal', False, _(b'filter out non local commits')), + (b'o', b'origin', True, _(b'show origin of changesets instead of fate')), ] + commands.formatteropts, _(b'hg olog [OPTION]... [[-r] REV]...'), **compat.helpcategorykwargs('CATEGORY_CHANGE_NAVIGATION')) @@ -90,18 +97,15 @@ revs = [b'.'] revs = scmutil.revrange(repo, revs) - # Use the default template unless the user provided one, but not if - # -f was given, because that doesn't work with templates yet. Note - # that --no-graph doesn't support -f (it ignores it), so we also - # don't use templating with --no-graph. - if not opts['template'] and not (opts['filternonlocal'] and opts['graph']): + # Use the default template unless the user provided one. + if not opts['template']: opts['template'] = DEFAULT_TEMPLATE if opts['graph']: - return _debugobshistorygraph(ui, repo, revs, opts) + return displaygraph(ui, repo, revs, opts) revs.reverse() - _debugobshistoryrevs(ui, repo, revs, opts) + displayrevs(ui, repo, revs, opts) TEMPLATE_MISSING_NODE = b"""{label("evolve.node evolve.missing_change_ctx", node|short)}""" TEMPLATE_PRESENT_NODE = b"""{label("evolve.node", node|short)} {label("evolve.rev", "({rev})")} {label("evolve.short_description", desc|firstline)}""" @@ -109,30 +113,138 @@ b"presentnode": TEMPLATE_PRESENT_NODE, b"missingnode": TEMPLATE_MISSING_NODE } -TEMPLATE_VERB = b"""{label("evolve.verb", verb)}""" +TEMPLATE_PREDNODES = b"""{label("evolve.node", join(prednodes % "{prednode|short}", ", "))}""" TEMPLATE_SUCCNODES = b"""{label("evolve.node", join(succnodes % "{succnode|short}", ", "))}""" -TEMPLATE_REWRITE = b"""{if(succnodes, "%(verb)s{if(effects, "({join(effects, ", ")})")} as %(succnodes)s", "pruned")}""" % { - b"verb": TEMPLATE_VERB, +TEMPLATE_NODES = b"""{if(prednodes, "from %(prednodes)s")}{if(succnodes, "as %(succnodes)s")}""" % { + b"prednodes": TEMPLATE_PREDNODES, b"succnodes": TEMPLATE_SUCCNODES } -TEMPLATE_OPERATION = b"""{if(operation, "using {label("evolve.operation", operation)}")}""" -TEMPLATE_USER = b"""by {label("evolve.user", user)}""" -TEMPLATE_DATE = b"""{label("evolve.date", "({date(date, "%a %b %d %H:%M:%S %Y %1%2")})")}""" -TEMPLATE_NOTE = b"""{if(note, "\n note: {label("evolve.note", note)}")}""" +TEMPLATE_REWRITE = b"""{label("evolve.verb", verb)}{if(effects, "({join(effects, ", ")})")}""" +TEMPLATE_OPERATIONS = b"""{if(operations, "using {label("evolve.operation", join(operations, ", "))}")}""" +TEMPLATE_USERS = b"""by {label("evolve.user", join(users, ", "))}""" +TEMPLATE_ONE_DATE = b"""({date(max(dates), "%a %b %d %H:%M:%S %Y %1%2")})""" +TEMPLATE_MANY_DATES = b"""(between {date(min(dates), "%a %b %d %H:%M:%S %Y %1%2")} and {date(max(dates), "%a %b %d %H:%M:%S %Y %1%2")})""" +TEMPLATE_DATES = b"""{label("evolve.date", ifeq(min(dates), max(dates), "%(onedate)s", "%(manydates)s"))}""" % { + b"onedate": TEMPLATE_ONE_DATE, + b"manydates": TEMPLATE_MANY_DATES +} +TEMPLATE_NOTES = b"""{if(notes, notes % "\n note: {label("evolve.note", note)}")}""" TEMPLATE_PATCH = b"""{if(patch, "{patch}")}{if(nopatchreason, "\n(No patch available, {nopatchreason})")}""" DEFAULT_TEMPLATE = (b"""%(firstline)s -{markers %% " {separate(" ", "%(rewrite)s", "%(operation)s", "%(user)s", "%(date)s")}%(note)s{indent(descdiff, " ")}{indent("%(patch)s", " ")}\n"} +{markers %% " {separate(" ", "%(rewrite)s", "%(nodes)s", "%(operations)s", "%(users)s", "%(dates)s")}%(notes)s{indent(descdiff, " ")}{indent("%(patch)s", " ")}\n"} """) % { b"firstline": TEMPLATE_FIRST_LINE, b"rewrite": TEMPLATE_REWRITE, - b"operation": TEMPLATE_OPERATION, - b"user": TEMPLATE_USER, - b"date": TEMPLATE_DATE, - b"note": TEMPLATE_NOTE, + b"nodes": TEMPLATE_NODES, + b"operations": TEMPLATE_OPERATIONS, + b"users": TEMPLATE_USERS, + b"dates": TEMPLATE_DATES, + b"notes": TEMPLATE_NOTES, b"patch": TEMPLATE_PATCH, } -class obsmarker_printer(compat.changesetprinter): +def groupbyfoldid(predsets): + """ Group nodes and related obsmarkers by fold-id metadata. + """ + groups = {} + for (nodes, markers) in predsets: + grouped = False + for marker in markers: + metadata = dict(marker[3]) + foldid = metadata.get(b'fold-id') + if foldid is not None: + groups.setdefault(foldid, []).append((nodes, markers)) + grouped = True + + if not grouped: + yield (nodes, markers) + + for foldid in sorted(groups): + groupnodes = set() + groupmarkers = set() + for (nodes, markers) in groups[foldid]: + groupnodes.update(nodes) + groupmarkers.update(markers) + yield (tuple(sorted(groupnodes)), tuple(sorted(groupmarkers))) + +def predecessorsandmarkers(repo, node): + """ Compute data needed for obsorigin. + + Return a generator of (nodes, markers) tuples, where nodes is a tuple of + predecessor nodes and markers is a tuple of obsolescence markers. + + Using tuples for everything means no problems with sorted(). + """ + predecessors = repo.obsstore.predecessors + stack = [(node, ())] + seen = {node} + + while stack: + node, path = stack.pop() + + for marker in sorted(predecessors.get(node, ())): + prednode = marker[0] + + # Basic cycle protection + if prednode in seen: + continue + seen.add(prednode) + + if prednode in repo: + yield ((prednode,), path + (marker,)) + else: + stack.append((prednode, path + (marker,))) + +def _originmarkers(repo, ctx, filternonlocal): + predecessors = repo.obsstore.predecessors + successors = repo.obsstore.successors + if filternonlocal: + r = predecessorsandmarkers(repo, ctx.node()) + for (nodes, markers) in sorted(groupbyfoldid(r)): + yield (nodes, markers) + else: + markers = predecessors.get(ctx.node(), ()) + data = (((marker[0],), (marker,)) for marker in markers) + for (nodes, markers) in sorted(groupbyfoldid(data)): + yield (nodes, markers) + + # finding prune markers + for marker in successors.get(ctx.node(), ()): + if not marker[1]: + yield ((), (marker,)) + +def _fatemarkers(repo, ctx, filternonlocal): + successors = repo.obsstore.successors + if filternonlocal: + r = obsutil.successorsandmarkers(repo, ctx) + if r is None: + r = [] + for succset in sorted(r): + if succset[b'markers']: + yield (succset[b'successors'], succset[b'markers']) + else: + markers = successors.get(ctx.node(), ()) + for marker in sorted(markers): + yield (marker[1], [marker]) + +def _nodesandmarkers(repo, ctx, filternonlocal, origin): + """ Return data for obslog and obsolescence-related template keywords. + + If `filternonlocal` is True, skip filtered nodes (but still gather + obsolescence markers), otherwise the result will contain nodes unknown + locally if they are found in the obsolescence markers. + + If `origin` is True, look at predecessors of ctx. Otherwise return + successors and appropriate obsmarkers. + """ + if origin: + for (nodes, markers) in _originmarkers(repo, ctx, filternonlocal): + yield (nodes, markers) + else: + for (nodes, markers) in _fatemarkers(repo, ctx, filternonlocal): + yield (nodes, markers) + +class obsmarker_printer(logcmdutil.changesetprinter): """show (available) information about a node We display the node, description (if available) and various information @@ -141,7 +253,7 @@ def __init__(self, ui, repo, *args, **kwargs): if kwargs.pop('obspatch', False): - if compat.changesetdiffer is None: + if logcmdutil.changesetdiffer is None: kwargs['matchfn'] = scmutil.matchall(repo) else: kwargs['differ'] = scmutil.matchall(repo) @@ -149,12 +261,13 @@ super(obsmarker_printer, self).__init__(ui, repo, *args, **kwargs) diffopts = kwargs.get('diffopts', {}) - # Compat 4.6 + # hg <= 4.6 (3fe1c9263024) if not util.safehasattr(self, "_includediff"): self._includediff = diffopts and diffopts.get(b'patch') self.template = diffopts and diffopts.get(b'template') self.filter = diffopts and diffopts.get(b'filternonlocal') + self.origin = diffopts and diffopts.get(b'origin') def show(self, ctx, copies=None, matchfn=None, **props): if self.buffered: @@ -165,31 +278,15 @@ _props = {b"template": self.template} fm = self.ui.formatter(b'debugobshistory', _props) - _debugobshistorydisplaynode(fm, self.repo, changenode) + displaynode(fm, self.repo, changenode) markerfm = fm.nested(b"markers") - # Succs markers - if self.filter is False: - succs = self.repo.obsstore.successors.get(changenode, ()) - succs = sorted(succs) - - for successor in succs: - _debugobshistorydisplaymarker(self.ui, markerfm, successor, - ctx.node(), self.repo, - self._includediff) - - else: - r = obsutil.successorsandmarkers(self.repo, ctx) - if r is None: - r = [] - - for succset in sorted(r): - markers = succset[b"markers"] - if not markers: - continue - successors = succset[b"successors"] - _debugobshistorydisplaysuccsandmarkers(self.ui, markerfm, successors, markers, ctx.node(), self.repo, self._includediff) + data = _nodesandmarkers(self.repo, ctx, self.filter, self.origin) + for nodes, markers in data: + displaymarkers(self.ui, markerfm, nodes, markers, ctx.node(), + self.repo, self._includediff, + successive=not self.origin) markerfm.end() @@ -208,28 +305,45 @@ ''' pass -def patchavailable(node, repo, successors): +def patchavailable(node, repo, candidates, successive=True): + """ Check if it's possible to get a diff between node and candidates. + + `candidates` contains nodes, which can be either successors (`successive` + is True) or predecessors (`successive` is False) of `node`. + """ if node not in repo: return False, b"context is not local" - if len(successors) == 0: - return False, b"no successors" - elif len(successors) > 1: - return False, b"too many successors (%d)" % len(successors) - - succ = successors[0] + if len(candidates) == 0: + if successive: + msg = b"no successors" + else: + msg = b"no predecessors" + return False, msg + elif len(candidates) > 1: + if successive: + msg = b"too many successors (%d)" + else: + msg = b"too many predecessors (%d)" + return False, msg % len(candidates) - if succ not in repo: - return False, b"successor is unknown locally" + cand = candidates[0] - # Check that both node and succ have the same parents + if cand not in repo: + if successive: + msg = b"successor is unknown locally" + else: + msg = b"predecessor is unknown locally" + return False, msg + + # Check that both node and cand have the same parents nodep1, nodep2 = repo[node].p1(), repo[node].p2() - succp1, succp2 = repo[succ].p1(), repo[succ].p2() + candp1, candp2 = repo[cand].p1(), repo[cand].p2() - if nodep1 != succp1 or nodep2 != succp2: + if nodep1 != candp1 or nodep2 != candp2: return False, b"changesets rebased" - return True, succ + return True, cand def getmarkerdescriptionpatch(repo, basedesc, succdesc): # description are stored without final new line, @@ -241,8 +355,8 @@ basename = b"changeset-description" succname = b"changeset-description" - d = compat.strdiff(basedesc, succdesc, basename, succname) - uheaders, hunks = d + uheaders, hunks = mdiff.unidiff(basedesc, b'', succdesc, b'', + basename, succname, False) # Copied from patch.diff text = b''.join(sum((list(hlines) for hrange, hlines in hunks), [])) @@ -361,10 +475,8 @@ relations = nodeprec.get(cand, ()) else: relations = obsutil.closestpredecessors(repo, cand) - # print("RELATIONS", relations, list(closestpred)) - childrens = [(graphmod.PARENT, x) for x in relations] - # print("YIELD", changectx, childrens) - yield (cand, graphmod.CHANGESET, changectx, childrens) + parents = [(graphmod.PARENT, x) for x in relations] + yield (cand, graphmod.CHANGESET, changectx, parents) def _obshistorywalker_links(repo, revs, walksuccessors=False): """ Iterate the obs history tree starting from revs, traversing @@ -421,7 +533,7 @@ return sorted(seen), nodesucc, nodeprec -def _debugobshistorygraph(ui, repo, revs, opts): +def displaygraph(ui, repo, revs, opts): displayer = obsmarker_printer(ui, repo.unfiltered(), obspatch=True, diffopts=pycompat.byteskwargs(opts), @@ -429,49 +541,71 @@ edges = graphmod.asciiedges walker = _obshistorywalker(repo.unfiltered(), revs, opts.get('all', False), opts.get('filternonlocal', False)) - compat.displaygraph(ui, repo, walker, displayer, edges) + logcmdutil.displaygraph(ui, repo, walker, displayer, edges) -def _debugobshistoryrevs(ui, repo, revs, opts): +def displayrevs(ui, repo, revs, opts): """ Display the obsolescence history for revset """ fm = ui.formatter(b'debugobshistory', pycompat.byteskwargs(opts)) - precursors = repo.obsstore.predecessors + predecessors = repo.obsstore.predecessors successors = repo.obsstore.successors nodec = repo.changelog.node unfi = repo.unfiltered() nodes = [nodec(r) for r in revs] + seen = set(nodes) + toshow = [] - seen = set(nodes) + origin = opts and opts.get('origin') + walksuccessors = opts and opts.get('all') + filternonlocal = opts and opts.get('filternonlocal') + includediff = opts and opts.get('patch') while nodes: ctxnode = nodes.pop() - _debugobshistorydisplaynode(fm, unfi, ctxnode) - - succs = successors.get(ctxnode, ()) + if ctxnode in unfi: + toshow.append(unfi[ctxnode]) + else: + if filternonlocal is False: + toshow.append(missingchangectx(unfi, ctxnode)) - markerfm = fm.nested(b"markers") - for successor in sorted(succs): - includediff = opts and opts.get("patch") - _debugobshistorydisplaymarker(ui, markerfm, successor, ctxnode, unfi, includediff) - markerfm.end() - fm.plain(b'\n') - - precs = precursors.get(ctxnode, ()) - for p in sorted(precs): + preds = predecessors.get(ctxnode, ()) + for p in sorted(preds): # Only show nodes once if p[0] not in seen: seen.add(p[0]) nodes.append(p[0]) + + if walksuccessors: + for successor in successors.get(ctxnode, ()): + for s in successor[1]: + if s not in seen: + seen.add(s) + nodes.append(s) + + for ctx in toshow: + displaynode(fm, unfi, ctx.node()) + + markerfm = fm.nested(b"markers") + + data = _nodesandmarkers(unfi, ctx, filternonlocal, origin) + for nodes_, markers in data: + displaymarkers(ui, markerfm, nodes_, markers, ctx.node(), unfi, + includediff, successive=not origin) + + markerfm.end() + + fm.plain(b'\n') + fm.end() -def _debugobshistorydisplaynode(fm, repo, node): +def displaynode(fm, repo, node): if node in repo: - _debugobshistorydisplayctx(fm, repo[node]) + displayctx(fm, repo[node]) else: - _debugobshistorydisplaymissingctx(fm, node) + displaymissingctx(fm, node) -def _debugobshistorydisplayctx(fm, ctx): +def displayctx(fm, ctx): shortdescription = ctx.description().strip() if shortdescription: shortdescription = shortdescription.splitlines()[0] @@ -489,64 +623,79 @@ label=b"evolve.short_description") fm.plain(b'\n') -def _debugobshistorydisplaymissingctx(fm, nodewithoutctx): +def displaymissingctx(fm, nodewithoutctx): fm.startitem() fm.data(node=nodemod.hex(nodewithoutctx)) fm.plain(nodemod.short(nodewithoutctx), label=b"evolve.node evolve.missing_change_ctx") fm.plain(b'\n') -def _debugobshistorydisplaymarker(ui, fm, marker, node, repo, includediff=False): - succnodes = marker[1] - date = marker[4] - metadata = dict(marker[3]) - +def displaymarkers(ui, fm, nodes, markers, node, repo, includediff=False, + successive=True): fm.startitem() - verb = _successorsetverb(succnodes, [marker])[b"verb"] + if successive: + verb = _successorsetverb(nodes, markers)[b"verb"] + else: + verb = _predecessorsverb(nodes, markers) fm.data(verb=verb) - effects = _markerseffects([marker]) + effects = _markerseffects(markers) if effects: - fmteffect = fm.formatlist(effects, b'effect', sep=b', ') - fm.write(b'effects', b'(%s)', fmteffect) + fmteffects = fm.formatlist(effects, b'effect', sep=b', ') + fm.data(effects=fmteffects) - if len(succnodes) > 0: - hexnodes = (nodemod.hex(succnode) for succnode in sorted(succnodes)) - nodes = fm.formatlist(hexnodes, b'succnode') - fm.write(b'succnodes', b'%s', nodes) + if len(nodes) > 0: + hexnodes = (nodemod.hex(node) for node in sorted(nodes)) + if successive: + nodelist = fm.formatlist(hexnodes, b'succnode') + fm.data(succnodes=nodelist) + else: + nodelist = fm.formatlist(hexnodes, b'prednode') + fm.data(prednodes=nodelist) - operation = metadata.get(b'operation') - if operation: - fm.data(operation=operation) + # Operations + operations = obsutil.markersoperations(markers) + if operations: + fm.data(operations=fm.formatlist(operations, name=b'operation', sep=b', ')) - fm.data(user=metadata[b'user']) + # Users + users = obsutil.markersusers(markers) + fm.data(users=fm.formatlist(users, name=b'user', sep=b', ')) - fm.data(date=date) + # Dates + dates = obsutil.markersdates(markers) + fm.data(dates=fm.formatlist(dates, name=b'date')) - # initial support for showing note - if metadata.get(b'note'): - fm.data(note=metadata[b'note']) + # Notes + notes = _markersnotes(markers) + if notes: + fm.data(notes=fm.formatlist(notes, name=b'note', sep=b'\n')) # Patch display if includediff is True: - _patchavailable = patchavailable(node, repo, marker[1]) + _patchavailable = patchavailable(node, repo, nodes, + successive=successive) if _patchavailable[0] is True: - succ = _patchavailable[1] + diffnode = _patchavailable[1] - basectx = repo[node] - succctx = repo[succ] + if successive: + actx = repo[node] + bctx = repo[diffnode] + else: + actx = repo[diffnode] + bctx = repo[node] # Description patch descriptionpatch = getmarkerdescriptionpatch(repo, - basectx.description(), - succctx.description()) + actx.description(), + bctx.description()) if descriptionpatch: # add the diffheader diffheader = b"diff -r %s -r %s changeset-description\n" %\ - (basectx, succctx) + (actx, bctx) descriptionpatch = diffheader + descriptionpatch def tolist(text): @@ -566,8 +715,8 @@ matchfn = scmutil.matchall(repo) firstline = True linestart = True - for chunk, label in patch.diffui(repo, node, succ, matchfn, - opts=diffopts): + for chunk, label in patch.diffui(repo, actx.node(), bctx.node(), + matchfn, opts=diffopts): if firstline: ui.write(b'\n') firstline = False @@ -580,120 +729,6 @@ else: fm.data(nopatchreason=_patchavailable[1]) -def _debugobshistorydisplaysuccsandmarkers(ui, fm, succnodes, markers, node, repo, includediff=False): - """ - This function is a duplication of _debugobshistorydisplaymarker modified - to accept multiple markers as input. - """ - fm.startitem() - fm.plain(b' ') - - verb = _successorsetverb(succnodes, markers)[b"verb"] - - fm.write(b'verb', b'%s', verb, - label=b"evolve.verb") - - effects = _markerseffects(markers) - if effects: - fmteffect = fm.formatlist(effects, b'effect', sep=b', ') - fm.write(b'effects', b'(%s)', fmteffect) - - if len(succnodes) > 0: - fm.plain(b' as ') - - shortsnodes = (nodemod.short(succnode) for succnode in sorted(succnodes)) - nodes = fm.formatlist(shortsnodes, b'succnode', sep=b', ') - fm.write(b'succnodes', b'%s', nodes, - label=b"evolve.node") - - # Operations - operations = obsutil.markersoperations(markers) - if operations: - fm.plain(b' using ') - fm.write(b'operation', b'%s', b", ".join(operations), label=b"evolve.operation") - - fm.plain(b' by ') - - # Users - users = obsutil.markersusers(markers) - fm.write(b'user', b'%s', b", ".join(users), - label=b"evolve.user") - fm.plain(b' ') - - # Dates - dates = obsutil.markersdates(markers) - if dates: - min_date = min(dates) - max_date = max(dates) - - if min_date == max_date: - fm.write(b"date", b"(at %s)", fm.formatdate(min_date), label=b"evolve.date") - else: - fm.write(b"date", b"(between %s and %s)", fm.formatdate(min_date), - fm.formatdate(max_date), label=b"evolve.date") - - # initial support for showing note - # if metadata.get('note'): - # fm.plain('\n note: ') - # fm.write('note', "%s", metadata['note'], label="evolve.note") - - # Patch display - if includediff is True: - _patchavailable = patchavailable(node, repo, succnodes) - - if _patchavailable[0] is True: - succ = _patchavailable[1] - - basectx = repo[node] - succctx = repo[succ] - # Description patch - descriptionpatch = getmarkerdescriptionpatch(repo, - basectx.description(), - succctx.description()) - - if descriptionpatch: - # add the diffheader - diffheader = b"diff -r %s -r %s changeset-description\n" %\ - (basectx, succctx) - descriptionpatch = diffheader + descriptionpatch - - def tolist(text): - return [text] - - ui.pushbuffer(labeled=True) - ui.write(b"\n") - - for chunk, label in patch.difflabel(tolist, descriptionpatch): - chunk = chunk.strip(b'\t') - if chunk and chunk != b'\n': - ui.write(b' ') - ui.write(chunk, label=label) - fm.write(b'descdiff', b'%s', ui.popbuffer()) - - # Content patch - ui.pushbuffer(labeled=True) - diffopts = patch.diffallopts(repo.ui, {}) - matchfn = scmutil.matchall(repo) - firstline = True - linestart = True - for chunk, label in patch.diffui(repo, node, succ, matchfn, - opts=diffopts): - if firstline: - ui.write(b'\n') - firstline = False - if linestart: - ui.write(b' ') - linestart = False - if chunk == b'\n': - linestart = True - ui.write(chunk, label=label) - fm.write(b'patch', b'%s', ui.popbuffer()) - else: - fm.write(b'nopatchreason', b"\n (No patch available, %s)", - _patchavailable[1]) - - fm.plain(b"\n") - def _prepare_hunk(hunk): """Drop all information but the username and patch""" cleanunk = [] @@ -731,6 +766,11 @@ return (fate, successors) +def _markersnotes(markers): + markersmeta = [dict(m[3]) for m in markers] + notes = {meta.get(b'note') for meta in markersmeta} + return sorted(note for note in notes if note) + EFFECTMAPPING = util.sortdict([ (obsutil.DESCCHANGED, b'description'), (obsutil.METACHANGED, b'meta'), @@ -809,7 +849,85 @@ verb = b'split' return {b'verb': verb} +def _predecessorsverb(predecessors, markers): + """ Return the verb summarizing a set of predecessors and related markers. + """ + verb = None + if not predecessors: + # we got successors instead of predecessors, and they are empty + # (this is a special case for showing prunes) + verb = b'pruned' + elif len(markers) == 1 and len(markers[0][1]) > 1: + # peeked at the successors to see if this is a split + verb = b'split' + elif len(predecessors) == 1: + verb = _markerspreciseverb(markers) + + if verb is None: + verb = b'rewritten' + else: + verb = b'folded' + return verb + # Use a more advanced version of obsfateverb that uses effect-flag @eh.wrapfunction(obsutil, 'obsfateverb') def obsfateverb(orig, *args, **kwargs): return _successorsetverb(*args, **kwargs)[b'verb'] + +def obsoriginprinter(ui, repo, predecessors, markers): + """ Build an obsorigin string for a single set of predecessors. + """ + quiet = ui.quiet + verbose = ui.verbose + normal = not verbose and not quiet + + line = [] + + # Verb + line.append(_predecessorsverb(predecessors, markers)) + + # Operations + operations = obsutil.markersoperations(markers) + if operations: + line.append(b" using %s" % b", ".join(operations)) + + # Predecessors + if predecessors: + unfi = repo.unfiltered() + + def formatnode(node): + if node in unfi: + return scmutil.formatchangeid(unfi[node]) + return nodemod.short(node) + + fmtpredecessors = [formatnode(pred) for pred in predecessors] + line.append(b" from %s" % b", ".join(sorted(fmtpredecessors))) + + # Users + users = obsutil.markersusers(markers) + # Filter out current user in not verbose mode to reduce amount of + # information + if not verbose: + currentuser = ui.username(acceptempty=True) + if len(users) == 1 and currentuser in users: + users = None + + if (verbose or normal) and users: + line.append(b" by %s" % b", ".join(users)) + + # Dates + dates = obsutil.markersdates(markers) + + if dates and verbose: + min_date = min(dates) + max_date = max(dates) + + if min_date == max_date: + fmtmin_date = dateutil.datestr(min_date, b'%Y-%m-%d %H:%M %1%2') + line.append(b" (at %s)" % fmtmin_date) + else: + fmtmin_date = dateutil.datestr(min_date, b'%Y-%m-%d %H:%M %1%2') + fmtmax_date = dateutil.datestr(max_date, b'%Y-%m-%d %H:%M %1%2') + line.append(b" (between %s and %s)" % (fmtmin_date, fmtmax_date)) + + return b"".join(line) diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/rewind.py --- a/hgext3rd/evolve/rewind.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/rewind.py Fri May 08 20:36:29 2020 +0800 @@ -12,6 +12,8 @@ scmutil, ) +from mercurial.utils import dateutil + from mercurial.i18n import _ from . import ( @@ -194,7 +196,7 @@ user = unfi.ui.username() date = unfi.ui.configdate(b'devel', b'default-date') if date is None: - date = compat.makedate() + date = dateutil.makedate() noise = b"%s\0%s\0%d\0%d" % (ctx.node(), user, date[0], date[1]) extra[b'__rewind-hash__'] = hashlib.sha256(noise).hexdigest().encode('ascii') diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/safeguard.py diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/stablerangecache.py --- a/hgext3rd/evolve/stablerangecache.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/stablerangecache.py Fri May 08 20:36:29 2020 +0800 @@ -9,6 +9,7 @@ import abc import heapq +import os import random import sqlite3 import time @@ -19,14 +20,11 @@ error, localrepo, node as nodemod, + store, util, ) -try: - from mercurial.utils.stringutil import forcebytestr -except ImportError: - # hg <= 4.5 (f99d64e8a4e4) - from mercurial.util import forcebytestr +from mercurial.utils.stringutil import forcebytestr from . import ( compat, @@ -189,6 +187,7 @@ self._ondisktiprev = None self._ondisktipnode = None self._unsavedsubranges = {} + self._createmode = store._calcmode(self._vfs) def contains(self, repo, revs): con = self._con @@ -238,17 +237,25 @@ def _setsub(self, rangeid, value): assert rangeid not in self._unsavedsubranges + assert 0 <= rangeid[1] <= rangeid[0], rangeid self._unsavedsubranges[rangeid] = value super(stablerangesqlbase, self)._setsub(rangeid, value) def _db(self): try: - util.makedirs(self._vfs.dirname(self._path)) + util.makedirs(self._vfs.dirname(self._path), self._createmode) except OSError: return None + if self._createmode is not None: + pre_existed = os.access(self._path, os.R_OK) con = sqlite3.connect(encoding.strfromlocal(self._path), timeout=30, isolation_level=r"IMMEDIATE") con.text_factory = bytes + if self._createmode is not None and not pre_existed: + try: + os.chmod(self._path, self._createmode & 0o666) + except OSError: + pass return con @util.propertycache @@ -440,18 +447,18 @@ unfi = repo.unfiltered() revs = unfi.revs('all()') nbrevs = len(revs) - ui.write('number of revisions: %12d\n' % nbrevs) + ui.write(b'number of revisions: %12d\n' % nbrevs) heads = unfi.revs('heads(all())') nbheads = len(heads) - ui.write('number of heads: %12d\n' % nbheads) + ui.write(b'number of heads: %12d\n' % nbheads) merge = unfi.revs('merge()') nbmerge = len(merge) - ui.write('number of merge: %12d (%3d%%)\n' + ui.write(b'number of merge: %12d (%3d%%)\n' % (nbmerge, 100 * nbmerge / nbrevs)) cache = unfi.stablerange allsubranges = stablerange.subrangesclosure(unfi, cache, heads) nbsubranges = len(allsubranges) - nbrevs # we remove leafs - ui.write('number of range: %12d\n' % nbsubranges) + ui.write(b'number of range: %12d\n' % nbsubranges) import collections subsizedistrib = collections.defaultdict(lambda: 0) @@ -480,7 +487,7 @@ for ss in sorted(subsizedistrib): ssc = subsizedistrib[ss] ssp = ssc * 100 // nbsubranges - ui.write(' with %3d subranges: %12d (%3d%%)\n' % (ss, ssc, ssp)) + ui.write(b' with %3d subranges: %12d (%3d%%)\n' % (ss, ssc, ssp)) depth = repo.depthcache.get stdslice = 0 @@ -495,11 +502,11 @@ else: oddslice += 1 - ui.write('standard slice point cut: %12d (%3d%%)\n' + ui.write(b'standard slice point cut: %12d (%3d%%)\n' % (stdslice, stdslice * 100 // nbsubranges)) - ui.write('other slice point cut: %12d (%3d%%)\n' + ui.write(b'other slice point cut: %12d (%3d%%)\n' % (oddslice, oddslice * 100 // nbsubranges)) - ui.write('est. naive compact store: %12d bytes\n' % totalsize) + ui.write(b'est. naive compact store: %12d bytes\n' % totalsize) @eh.reposetup def setupcache(ui, repo): diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/stablesort.py --- a/hgext3rd/evolve/stablesort.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/stablesort.py Fri May 08 20:36:29 2020 +0800 @@ -252,18 +252,15 @@ from mercurial import ( commands, + error, localrepo, - error, + logcmdutil, node as nodemod, pycompat, scmutil, ) -try: - from mercurial.utils.stringutil import forcebytestr -except ImportError: - # hg <= 4.5 (f99d64e8a4e4) - from mercurial.util import forcebytestr +from mercurial.utils.stringutil import forcebytestr from mercurial.i18n import _ @@ -318,8 +315,9 @@ raise error.Abort(b'unknown sorting method: "%s"' % method, hint=b'pick one of: %s' % valid_method) - displayer = compat.changesetdisplayer(ui, repo, pycompat.byteskwargs(opts), - buffered=True) + displayer = logcmdutil.changesetdisplayer(ui, repo, + pycompat.byteskwargs(opts), + buffered=True) kwargs = {} if opts['limit']: kwargs['limit'] = int(opts['limit']) diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/templatekw.py --- a/hgext3rd/evolve/templatekw.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/templatekw.py Fri May 08 20:36:29 2020 +0800 @@ -11,6 +11,7 @@ from . import ( error, exthelper, + obshistory, ) from mercurial import ( @@ -22,36 +23,32 @@ ### template keywords -if util.safehasattr(templatekw, 'compatlist'): - @eh.templatekeyword(b'instabilities', requires={b'ctx', b'templ'}) - def showinstabilities(context, mapping): - """List of strings. Evolution instabilities affecting the changeset - (zero or more of "orphan", "content-divergent" or "phase-divergent").""" - ctx = context.resource(mapping, b'ctx') - return templatekw.compatlist(context, mapping, b'instability', - ctx.instabilities(), - plural=b'instabilities') +@eh.templatekeyword(b'instabilities', requires={b'ctx', b'templ'}) +def showinstabilities(context, mapping): + """List of strings. Evolution instabilities affecting the changeset + (zero or more of "orphan", "content-divergent" or "phase-divergent").""" + ctx = context.resource(mapping, b'ctx') + return templatekw.compatlist(context, mapping, b'instability', + ctx.instabilities(), + plural=b'instabilities') - @eh.templatekeyword(b'troubles', requires={b'ctx', b'templ'}) - def showtroubles(context, mapping): # legacy name for instabilities - ctx = context.resource(mapping, b'ctx') - return templatekw.compatlist(context, mapping, b'trouble', - ctx.instabilities(), plural=b'troubles') -else: - # older template API in hg < 4.6 - @eh.templatekeyword(b'instabilities') - def showinstabilities(**args): - """List of strings. Evolution instabilities affecting the changeset - (zero or more of "orphan", "content-divergent" or "phase-divergent").""" - ctx = args[b'ctx'] - return templatekw.showlist(b'instability', ctx.instabilities(), args, - plural=b'instabilities') +@eh.templatekeyword(b'troubles', requires={b'ctx', b'templ'}) +def showtroubles(context, mapping): # legacy name for instabilities + ctx = context.resource(mapping, b'ctx') + return templatekw.compatlist(context, mapping, b'trouble', + ctx.instabilities(), plural=b'troubles') - @eh.templatekeyword(b'troubles') - def showtroubles(**args): - ctx = args[b'ctx'] - return templatekw.showlist(b'trouble', ctx.instabilities(), args, - plural=b'troubles') +@eh.templatekeyword(b'obsorigin', requires={b'ui', b'repo', b'ctx'}) +def showobsorigin(context, mapping): + ui = context.resource(mapping, b'ui') + repo = context.resource(mapping, b'repo') + ctx = context.resource(mapping, b'ctx') + values = [] + r = obshistory.predecessorsandmarkers(repo, ctx.node()) + for (nodes, markers) in sorted(obshistory.groupbyfoldid(r)): + v = obshistory.obsoriginprinter(ui, repo, nodes, markers) + values.append(v) + return templatekw.compatlist(context, mapping, b'origin', values) _sp = templatekw.showpredecessors if util.safehasattr(_sp, '_requires'): diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/evolve/utility.py --- a/hgext3rd/evolve/utility.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/evolve/utility.py Fri May 08 20:36:29 2020 +0800 @@ -112,14 +112,15 @@ return p.rev() obs = repo[p] ui = repo.ui - newer = obsutil.successorssets(repo, obs.node()) + cache = {} + newer = obsutil.successorssets(repo, obs.node(), cache=cache) # search of a parent which is not killed while not newer: ui.debug(b"stabilize target %s is plain dead," b" trying to stabilize on its parent\n" % obs) obs = obs.p1() - newer = obsutil.successorssets(repo, obs.node()) + newer = obsutil.successorssets(repo, obs.node(), cache=cache) if len(newer) > 1 or len(newer[0]) > 1: raise MultipleSuccessorsError(newer) diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/pullbundle.py --- a/hgext3rd/pullbundle.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/pullbundle.py Fri May 08 20:36:29 2020 +0800 @@ -640,7 +640,7 @@ ui.progress(topic, pos, item, unit, total) # nodemap.get and index.[has_node|rev|get_rev] -# hg <= 5.3 (02802fa87b74) +# hg <= 5.2 (02802fa87b74) def getgetrev(cl): """Returns index.get_rev or nodemap.get (for pre-5.3 Mercurial).""" if util.safehasattr(cl.index, 'get_rev'): diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/serverminitopic.py --- a/hgext3rd/serverminitopic.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/serverminitopic.py Fri May 08 20:36:29 2020 +0800 @@ -23,12 +23,7 @@ util, ) -# hg <= 4.5 (b4d85bc122bd) -try: - from mercurial import wireproto # pytype: disable=import-error - wireproto.branchmap -except ImportError: - from mercurial import wireprotov1server as wireproto +from mercurial import wireprotov1server if util.safehasattr(registrar, 'configitem'): @@ -163,7 +158,7 @@ if util.safehasattr(self, '_entries'): _entries = self._entries else: - # hg <= 4.9 (624d6683c705, b137a6793c51) + # hg <= 4.9 (624d6683c705+b137a6793c51) _entries = self new = self.__class__(_entries, self.tipnode, self.tiprev, self.filteredhash, self._closednodes) @@ -237,11 +232,11 @@ def uisetup(ui): wrapclass(branchmap, 'branchcache', _topiccache) try: - # Mercurial 4.8 and older + # hg <= 4.9 (3461814417f3) extensions.wrapfunction(branchmap, 'read', wrapread) except AttributeError: - # Mercurial 4.9; branchcache.fromfile now takes care of this + # Mercurial 5.0; branchcache.fromfile now takes care of this # which is alredy defined on _topiccache pass - extensions.wrapfunction(wireproto, '_capabilities', wireprotocaps) + extensions.wrapfunction(wireprotov1server, '_capabilities', wireprotocaps) extensions.wrapfunction(context.changectx, 'branch', topicbranch) diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/topic/__init__.py --- a/hgext3rd/topic/__init__.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/topic/__init__.py Fri May 08 20:36:29 2020 +0800 @@ -156,7 +156,6 @@ registrar, scmutil, templatefilters, - templatekw, util, ) @@ -203,9 +202,9 @@ b'topic.active': b'green', } -__version__ = b'0.18.1.dev' +__version__ = b'0.18.2' -testedwith = b'4.6.2 4.7 4.8 4.9 5.0 5.1 5.2 5.3' +testedwith = b'4.6.2 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4' minimumhgversion = b'4.6' buglink = b'https://bz.mercurial-scm.org/' @@ -259,10 +258,6 @@ default=None, ) -# we need to do old style declaration for <= 4.5 -templatekeyword = registrar.templatekeyword() -post45template = r'requires=' in templatekeyword.__doc__ - def _contexttopic(self, force=False): if not (force or self.mutable()): return b'' @@ -374,9 +369,6 @@ cmdutil.summaryhooks.add(b'topic', summaryhook) - if not post45template: - templatekw.keywords[b'topic'] = topickw - templatekw.keywords[b'topicidx'] = topicidxkw # Wrap workingctx extra to return the topic name extensions.wrapfunction(context.workingctx, '__init__', wrapinit) # Wrap changelog.add to drop empty topic @@ -414,9 +406,14 @@ def _restrictcapabilities(self, caps): caps = super(topicrepo, self)._restrictcapabilities(caps) caps.add(b'topics') - if self.ui.configbool(b'experimental', - b'topic.publish-bare-branch'): - caps.add(b'ext-topics-publish=auto') + if self.ui.configbool(b'phases', b'publish'): + mode = b'all' + elif self.ui.configbool(b'experimental', + b'topic.publish-bare-branch'): + mode = b'auto' + else: + mode = b'none' + caps.add(b'ext-topics-publish=%s' % mode) return caps def commit(self, *args, **kwargs): @@ -505,38 +502,57 @@ reporef = weakref.ref(self) if self.ui.configbool(b'experimental', b'enforce-single-head'): - if util.safehasattr(tr, 'validator'): # hg <= 4.7 + if util.safehasattr(tr, 'validator'): # hg <= 4.7 (ebbba3ba3f66) origvalidator = tr.validator + elif util.safehasattr(tr, '_validator'): + # hg <= 5.3 (36f08ae87ef6) + origvalidator = tr._validator else: - origvalidator = tr._validator + origvalidator = None + + def _validate(tr2): + repo = reporef() + flow.enforcesinglehead(repo, tr2) def validator(tr2): - repo = reporef() - flow.enforcesinglehead(repo, tr2) + _validate(tr2) origvalidator(tr2) - if util.safehasattr(tr, 'validator'): # hg <= 4.7 + if util.safehasattr(tr, 'validator'): # hg <= 4.7 (ebbba3ba3f66) tr.validator = validator + elif util.safehasattr(tr, '_validator'): + # hg <= 5.3 (36f08ae87ef6) + tr._validator = validator else: - tr._validator = validator + tr.addvalidator(b'000-enforce-single-head', _validate) topicmodeserver = self.ui.config(b'experimental', b'topic-mode.server', b'ignore') ispush = (desc.startswith(b'push') or desc.startswith(b'serve')) if (topicmodeserver != b'ignore' and ispush): - if util.safehasattr(tr, 'validator'): # hg <= 4.7 + if util.safehasattr(tr, 'validator'): # hg <= 4.7 (ebbba3ba3f66) origvalidator = tr.validator + elif util.safehasattr(tr, '_validator'): + # hg <= 5.3 (36f08ae87ef6) + origvalidator = tr._validator else: - origvalidator = tr._validator + origvalidator = None + + def _validate(tr2): + repo = reporef() + flow.rejectuntopicedchangeset(repo, tr2) def validator(tr2): - repo = reporef() - flow.rejectuntopicedchangeset(repo, tr2) + _validate(tr2) return origvalidator(tr2) - if util.safehasattr(tr, 'validator'): # hg <= 4.7 + + if util.safehasattr(tr, 'validator'): # hg <= 4.7 (ebbba3ba3f66) tr.validator = validator + elif util.safehasattr(tr, '_validator'): + # hg <= 5.3 (36f08ae87ef6) + tr._validator = validator else: - tr._validator = validator + tr.addvalidator(b'000-reject-untopiced', _validate) elif (self.ui.configbool(b'experimental', b'topic.publish-bare-branch') and (desc.startswith(b'push') @@ -555,19 +571,29 @@ b'topic.allow-publish', True) if not allow_publish: - if util.safehasattr(tr, 'validator'): # hg <= 4.7 + if util.safehasattr(tr, 'validator'): # hg <= 4.7 (ebbba3ba3f66) origvalidator = tr.validator + elif util.safehasattr(tr, '_validator'): + # hg <= 5.3 (36f08ae87ef6) + origvalidator = tr._validator else: - origvalidator = tr._validator + origvalidator = None + + def _validate(tr2): + repo = reporef() + flow.reject_publish(repo, tr2) def validator(tr2): - repo = reporef() - flow.reject_publish(repo, tr2) + _validate(tr2) return origvalidator(tr2) - if util.safehasattr(tr, 'validator'): # hg <= 4.7 + + if util.safehasattr(tr, 'validator'): # hg <= 4.7 (ebbba3ba3f66) tr.validator = validator + elif util.safehasattr(tr, '_validator'): + # hg <= 5.3 (36f08ae87ef6) + tr._validator = validator else: - tr._validator = validator + tr.addvalidator(b'000-reject-publish', _validate) # real transaction start ct = self.currenttopic @@ -608,26 +634,19 @@ b'topics', b'topic', namemap=_namemap, nodemap=_nodemap, listnames=lambda repo: repo.topics)) -if post45template: - @templatekeyword(b'topic', requires={b'ctx'}) - def topickw(context, mapping): - """:topic: String. The topic of the changeset""" - ctx = context.resource(mapping, b'ctx') - return ctx.topic() +templatekeyword = registrar.templatekeyword() - @templatekeyword(b'topicidx', requires={b'ctx'}) - def topicidxkw(context, mapping): - """:topicidx: Integer. Index of the changeset as a stack alias""" - ctx = context.resource(mapping, b'ctx') - return ctx.topicidx() -else: - def topickw(**args): - """:topic: String. The topic of the changeset""" - return args[b'ctx'].topic() +@templatekeyword(b'topic', requires={b'ctx'}) +def topickw(context, mapping): + """:topic: String. The topic of the changeset""" + ctx = context.resource(mapping, b'ctx') + return ctx.topic() - def topicidxkw(**args): - """:topicidx: Integer. Index of the changeset as a stack alias""" - return args[b'ctx'].topicidx() +@templatekeyword(b'topicidx', requires={b'ctx'}) +def topicidxkw(context, mapping): + """:topicidx: Integer. Index of the changeset as a stack alias""" + ctx = context.resource(mapping, b'ctx') + return ctx.topicidx() def wrapinit(orig, self, repo, *args, **kwargs): orig(self, repo, *args, **kwargs) diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/topic/compat.py --- a/hgext3rd/topic/compat.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/topic/compat.py Fri May 08 20:36:29 2020 +0800 @@ -32,7 +32,7 @@ return {'helpcategory': category} # nodemap.get and index.[has_node|rev|get_rev] -# hg <= 5.3 (02802fa87b74) +# hg <= 5.2 (02802fa87b74) def getgetrev(cl): """Returns index.get_rev or nodemap.get (for pre-5.3 Mercurial).""" if util.safehasattr(cl.index, 'get_rev'): diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/topic/discovery.py --- a/hgext3rd/topic/discovery.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/topic/discovery.py Fri May 08 20:36:29 2020 +0800 @@ -17,15 +17,9 @@ compat, ) -# hg <= 4.5 (b4d85bc122bd) -try: - from mercurial import wireproto # pytype: disable=import-error - wireproto.branchmap -except (AttributeError, ImportError): - from mercurial import wireprotov1server as wireproto +from mercurial import wireprotov1server def _headssummary(orig, pushop, *args, **kwargs): - # In mercurial > 4.3, we receive the pushop as arguments repo = pushop.repo.unfiltered() remote = pushop.remote @@ -205,12 +199,13 @@ return tr._prepushheads = _nbheads(op.repo) reporef = weakref.ref(op.repo) - if util.safehasattr(tr, 'validator'): # hg <= 4.7 + if util.safehasattr(tr, 'validator'): # hg <= 4.7 (ebbba3ba3f66) oldvalidator = tr.validator - else: + elif util.safehasattr(tr, '_validator'): + # hg <= 5.3 (36f08ae87ef6) oldvalidator = tr._validator - def validator(tr): + def _validate(tr): repo = reporef() if repo is not None: repo.invalidatecaches() @@ -225,11 +220,19 @@ msg = _(b'push create more than 1 head on new branch "%s"' % branch) raise error.Abort(msg) + + def validator(tr): + _validate(tr) return oldvalidator(tr) - if util.safehasattr(tr, 'validator'): # hg <= 4.7 + + if util.safehasattr(tr, 'validator'): # hg <= 4.7 (ebbba3ba3f66) tr.validator = validator + elif util.safehasattr(tr, '_validator'): + # hg <= 5.3 (36f08ae87ef6) + tr._validator = validator else: - tr._validator = validator + tr.addvalidator(b'000-new-head-check', _validate) + handlecheckheads.params = frozenset() def _pushb2phases(orig, pushop, bundler): @@ -249,8 +252,8 @@ def modsetup(ui): """run at uisetup time to install all destinations wrapping""" extensions.wrapfunction(discovery, '_headssummary', _headssummary) - extensions.wrapfunction(wireproto, 'branchmap', wireprotobranchmap) - extensions.wrapfunction(wireproto, '_capabilities', wireprotocaps) + extensions.wrapfunction(wireprotov1server, 'branchmap', wireprotobranchmap) + extensions.wrapfunction(wireprotov1server, '_capabilities', wireprotocaps) # we need a proper wrap b2 part stuff extensions.wrapfunction(bundle2, 'handlecheckheads', handlecheckheads) bundle2.handlecheckheads.params = frozenset() diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/topic/evolvebits.py --- a/hgext3rd/topic/evolvebits.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/topic/evolvebits.py Fri May 08 20:36:29 2020 +0800 @@ -75,14 +75,15 @@ return p.rev() obs = repo[p] ui = repo.ui - newer = obsutil.successorssets(repo, obs.node()) + cache = {} + newer = obsutil.successorssets(repo, obs.node(), cache=cache) # search of a parent which is not killed while not newer: ui.debug(b"stabilize target %s is plain dead," b" trying to stabilize on its parent\n" % obs) obs = obs.p1() - newer = obsutil.successorssets(repo, obs.node()) + newer = obsutil.successorssets(repo, obs.node(), cache=cache) if 1 < len(newer): # divergence case # we should pick as arbitrary one diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/topic/flow.py --- a/hgext3rd/topic/flow.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/topic/flow.py Fri May 08 20:36:29 2020 +0800 @@ -7,6 +7,7 @@ extensions, node, phases, + util, ) from mercurial.i18n import _ @@ -62,10 +63,18 @@ def reject_publish(repo, tr): """prevent a transaction to be publish anything""" - published = set() - for r, (o, n) in tr.changes[b'phases'].items(): - if n == phases.public: - published.add(r) + if util.safehasattr(tr.changes[b'phases'], 'items'): + # hg <= 5.3 (fdc802f29b2c) + published = { + r for r, (o, n) in tr.changes[b'phases'].items() + if n == phases.public + } + else: + revranges = [ + r for r, (o, n) in tr.changes[b'phases'] + if n == phases.public + ] + published = {r for revrange in revranges for r in revrange} if published: r = min(published) msg = b"rejecting publishing of changeset %s" % repo[r] @@ -101,7 +110,8 @@ def installpushflag(ui): entry = extensions.wrapcommand(commands.table, b'push', wrappush) - if not any(opt for opt in entry[1] if opt[1] == b'publish'): # hg <= 4.9 + if not any(opt for opt in entry[1] if opt[1] == b'publish'): + # hg <= 4.8 (9b8d1ad851f8) entry[1].append((b'', b'publish', False, _(b'push the changeset as public'))) extensions.wrapfunction(exchange.pushoperation, '__init__', diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/topic/revset.py --- a/hgext3rd/topic/revset.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/topic/revset.py Fri May 08 20:36:29 2020 +0800 @@ -124,6 +124,7 @@ b'relation subscript bounds must be integers', None, None) else: + # hg <= 4.9 (431cf2c8c839+13f7a6a4f0db) a = b = z s = revset.getset(repo, revset.fullreposet(repo), x) @@ -164,7 +165,10 @@ def topicrel(repo, subset, x, *args): subset &= topicset(repo, subset, x) - return revset.generationsrel(repo, subset, x, *args) + # not using revset.generationssubrel directly because it was renamed + # hg <= 5.3 (8859de3e83dc) + generationssubrel = revset.subscriptrelations[b'generations'] + return generationssubrel(repo, subset, x, *args) revset.subscriptrelations[b'topic'] = topicrel revset.subscriptrelations[b't'] = topicrel diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/topic/server.py --- a/hgext3rd/topic/server.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/topic/server.py Fri May 08 20:36:29 2020 +0800 @@ -10,14 +10,13 @@ wireprotov1server, ) - try: from mercurial.utils import ( repoviewutil, ) repoviewutil.subsettable except (AttributeError, ImportError): - # hg <= 4.8 + # hg <= 4.9 (caebe5e7f4bd) from mercurial import branchmap as repoviewutil from . import ( @@ -54,14 +53,6 @@ filteredrevs = frozenset(filteredrevs | extrafiltered) return filteredrevs -def wireprotocommand(name, args=b'', permission=b'pull'): - try: - from mercurial.wireprotov1server import wireprotocommand - except (ImportError, AttributeError): - # hg <= 4.6 (b4d85bc122bd) - from mercurial.wireproto import wireprotocommand - return wireprotocommand(name, args, permission=permission) - def wrapheads(orig, repo, proto): """wrap head to hide topic^W draft changeset to old client""" hidetopics = repo.ui.configbool(b'experimental', b'topic.server-gate-topic-changesets') @@ -85,8 +76,8 @@ def setupserver(ui): extensions.wrapfunction(wireprotov1server, 'heads', wrapheads) wireprotov1server.commands.pop(b'heads') - wireprotocommand(b'heads', permission=b'pull')(wireprotov1server.heads) - wireprotocommand(b'_exttopics_heads', permission=b'pull')(topicheads) + wireprotov1server.wireprotocommand(b'heads', permission=b'pull')(wireprotov1server.heads) + wireprotov1server.wireprotocommand(b'_exttopics_heads', permission=b'pull')(topicheads) extensions.wrapfunction(wireprotov1server, '_capabilities', wireprotocaps) class topicpeerexecutor(wireprotov1peer.peerexecutor): diff -r 90fbbc29b93a -r be5aa681c122 hgext3rd/topic/topicmap.py --- a/hgext3rd/topic/topicmap.py Wed Apr 08 01:16:54 2020 +0800 +++ b/hgext3rd/topic/topicmap.py Fri May 08 20:36:29 2020 +0800 @@ -125,7 +125,7 @@ branchmap.branchcache = topiccache try: - # Mercurial 4.9 + # Mercurial 5.0 class remotetopiccache(_topiccache, branchmap.remotebranchcache): pass branchmap.remotebranchcache = remotetopiccache @@ -135,7 +135,7 @@ return _wrapupdatebmcache(orig.__get__(self), repo) extensions.wrapfunction(branchmap.BranchMapCache, 'updatecache', _wrapupdatebmcachemethod) except AttributeError: - # Mercurial 4.8 and before + # hg <= 4.9 (3461814417f3) extensions.wrapfunction(branchmap, 'updatecache', _wrapupdatebmcache) @@ -173,7 +173,7 @@ if util.safehasattr(self, '_entries'): _entries = self._entries else: - # hg <= 4.9 (624d6683c705, b137a6793c51) + # hg <= 4.9 (624d6683c705+b137a6793c51) _entries = self new = self.__class__(_entries, self.tipnode, self.tiprev, self.filteredhash, self._closednodes) diff -r 90fbbc29b93a -r be5aa681c122 tests/test-amend-patch.t --- a/tests/test-amend-patch.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-amend-patch.t Fri May 08 20:36:29 2020 +0800 @@ -84,18 +84,20 @@ Obsolsence history is fine + $ hg debugobsolete + f7ad4196431346de3c33c52e75374fba45e04313 af624b221c0c0bec5d74e2650180dd3eddcb7c42 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} $ hg obslog -p -r . @ af624b221c0c (1) added a + | amended(content) from f7ad41964313 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff --git a/a b/a + | --- a/a + | +++ b/a + | @@ -1,1 +1,1 @@ + | -foo + | +Gello + | | x f7ad41964313 (0) added a - amended(content) as af624b221c0c using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff --git a/a b/a - --- a/a - +++ b/a - @@ -1,1 +1,1 @@ - -foo - +Gello - Diff and status are good too $ hg diff @@ -257,7 +259,8 @@ $ hg status ? editor.sh - $ ls + $ ls -A + .hg changedfile editor.sh diff -r 90fbbc29b93a -r be5aa681c122 tests/test-amend.t --- a/tests/test-amend.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-amend.t Fri May 08 20:36:29 2020 +0800 @@ -21,13 +21,20 @@ $ hg amend -d '0 0' -n "this a note on the obsmarker and supported for hg>=4.4" $ hg debugobsolete 07f4944404050f47db2e5c5071e0e84e7a27bba9 6a022cbb61d5ba0f03f98ff2d36319dfea1034ae 0 (*) {'ef1': '*', 'user': 'test'} (glob) - $ hg obslog + $ hg obslog --no-origin @ 6a022cbb61d5 (1) adda | x 07f494440405 (0) adda branch-changed(branch) as 6a022cbb61d5 using amend by test (Thu Jan 01 00:00:00 1970 +0000) note: this a note on the obsmarker and supported for hg>=4.4 + $ hg obslog + @ 6a022cbb61d5 (1) adda + | branch-changed(branch) from 07f494440405 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | note: this a note on the obsmarker and supported for hg>=4.4 + | + x 07f494440405 (0) adda + $ hg branch foo $ hg branches diff -r 90fbbc29b93a -r be5aa681c122 tests/test-check-compat-strings.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-check-compat-strings.t Fri May 08 20:36:29 2020 +0800 @@ -0,0 +1,8 @@ +Enable obsolescence to avoid the warning issue when obsmarkers are found + + $ cat << EOF >> $HGRCPATH + > [experimental] + > evolution = all + > EOF + + $ $TESTDIR/../contrib/check-compat-strings.sh "$TESTDIR/../hgext3rd/" "$RUNTESTDIR/.." diff -r 90fbbc29b93a -r be5aa681c122 tests/test-discovery-obshashrange.t diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-content-divergent-basic.t --- a/tests/test-evolve-content-divergent-basic.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-content-divergent-basic.t Fri May 08 20:36:29 2020 +0800 @@ -142,9 +142,9 @@ with: [3] divergent base: [1] added b 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 45bf1312f454 + working directory is now at 98ab969ac8fb $ hg log -G - @ 4:45bf1312f454@default(draft) divergent [] + @ 4:98ab969ac8fb@default(draft) divergent [] | o 0:9092f1db7931@default(draft) added a [] @@ -153,7 +153,7 @@ # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 45bf1312f45468b76158b33f8426e6530c8b35b1 + # Node ID 98ab969ac8fbe315e6d2c24a8eb5eab5b81e4242 # Parent 9092f1db7931481f93b37d5c9fbcfc341bcd7318 divergent @@ -240,10 +240,10 @@ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved content divergent changesets on different branches. choose branch for the resolution changeset. (a) default or (b) watwat or (c) foobar? c - working directory is now at 0ac42f1bc15c + working directory is now at 15ee7f765bf7 $ hg glog - @ 7:0ac42f1bc15c added d + @ 7:15ee7f765bf7 added d | () [foobar] draft o 3:ca1b80f7960a added c | () [default] draft @@ -269,14 +269,14 @@ $ echo bar > d $ hg ci -Aqm "added a d with bar in it, expect some beers" - $ hg prune -r 0ac42f1bc15c -s . --hidden + $ hg prune -r 'predecessors(desc("added d") - obsolete())' -s . --hidden 1 changesets pruned 2 new content-divergent changesets $ hg glog @ 9:59081c9c425a added a d with bar in it, expect some beers | () [default] draft - | * 8:f621d00f5f0e added d + | * 8:e6f07f2f33a9 added d |/ () [foobar] draft o 3:ca1b80f7960a added c | () [default] draft @@ -292,10 +292,10 @@ with: [8] added d base: [7] added d 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at a9d6fd6b5e40 + working directory is now at 34e78e1673c1 $ hg glog - @ 10:a9d6fd6b5e40 added a d with bar in it, expect some beers + @ 10:34e78e1673c1 added a d with bar in it, expect some beers | () [default] draft o 3:ca1b80f7960a added c | () [default] draft @@ -311,20 +311,20 @@ $ echo foo > d $ hg amend -m "foo to d" - $ hg up a9d6fd6b5e40 --hidden + $ hg up 'predecessors(.)' --hidden 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - updated to hidden changeset a9d6fd6b5e40 - (hidden revision 'a9d6fd6b5e40' was rewritten as: b10b07a394f1) - working directory parent is obsolete! (a9d6fd6b5e40) - (use 'hg evolve' to update to its successor: b10b07a394f1) + updated to hidden changeset 34e78e1673c1 + (hidden revision '34e78e1673c1' was rewritten as: c9d0d72972b0) + working directory parent is obsolete! (34e78e1673c1) + (use 'hg evolve' to update to its successor: c9d0d72972b0) $ echo babar > d $ hg amend -m "foo to d" 2 new content-divergent changesets $ hg glog - @ 12:0bb497fed24a foo to d + @ 12:b4dadb3b47a7 foo to d | () [default] draft - | * 11:b10b07a394f1 foo to d + | * 11:c9d0d72972b0 foo to d |/ () [default] draft o 3:ca1b80f7960a added c | () [default] draft @@ -351,10 +351,10 @@ (no more unresolved files) continue: hg evolve --continue $ hg evolve --continue - working directory is now at 11175423b5dc + working directory is now at cfd599de811a $ hg glog - @ 13:11175423b5dc foo to d + @ 13:cfd599de811a foo to d | () [default] draft o 3:ca1b80f7960a added c | () [default] draft @@ -371,20 +371,20 @@ $ echo bar > d $ hg amend -m "bar to d, expect beers" - $ hg up 11175423b5dc --hidden + $ hg up 'predecessors(.)' --hidden 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - updated to hidden changeset 11175423b5dc - (hidden revision '11175423b5dc' was rewritten as: 27f0463f169a) - working directory parent is obsolete! (11175423b5dc) - (use 'hg evolve' to update to its successor: 27f0463f169a) + updated to hidden changeset cfd599de811a + (hidden revision 'cfd599de811a' was rewritten as: ba0941ffb747) + working directory parent is obsolete! (cfd599de811a) + (use 'hg evolve' to update to its successor: ba0941ffb747) $ echo wat > d $ hg amend -m "wat to d, wat?" 2 new content-divergent changesets $ hg glog - @ 15:f542037ddf31 wat to d, wat? + @ 15:4127dd63df67 wat to d, wat? | () [default] draft - | * 14:27f0463f169a bar to d, expect beers + | * 14:ba0941ffb747 bar to d, expect beers |/ () [default] draft o 3:ca1b80f7960a added c | () [default] draft @@ -434,10 +434,10 @@ **done showing editors text** - working directory is now at 89ea3eee2d69 + working directory is now at b4c8664fa327 $ hg glog - @ 16:89ea3eee2d69 watbar to d + @ 16:b4c8664fa327 watbar to d | () [default] draft o 3:ca1b80f7960a added c | () [default] draft @@ -533,15 +533,15 @@ a committing manifest committing changelog - working directory is now at 5bf84d1d71d1 + working directory is now at 6aa6f90a9f68 $ hg st $ glog - @ 4:5bf84d1d71d1@default(draft) bk:[] More addition + @ 4:6aa6f90a9f68@default(draft) bk:[] More addition | o 0:6569b5a81c7e@default(public) bk:[] root $ hg summary - parent: 4:5bf84d1d71d1 tip + parent: 4:6aa6f90a9f68 tip More addition branch: default commit: (clean) @@ -552,7 +552,7 @@ # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 5bf84d1d71d12f451bfe1e09b93045eb6338cd6c + # Node ID 6aa6f90a9f684b8a4b698234e25c5dad7328b199 # Parent 6569b5a81c7e307ddc076550e8c0f6d75b6effcd More addition @@ -577,9 +577,9 @@ $ hg up --hidden 'min(desc("More addition"))' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved updated to hidden changeset 867e43582046 - (hidden revision '867e43582046' was rewritten as: 5bf84d1d71d1) + (hidden revision '867e43582046' was rewritten as: 6aa6f90a9f68) working directory parent is obsolete! (867e43582046) - (use 'hg evolve' to update to its successor: 5bf84d1d71d1) + (use 'hg evolve' to update to its successor: 6aa6f90a9f68) $ echo 'gotta break' >> a $ hg amend 2 new content-divergent changesets @@ -594,15 +594,15 @@ $ glog @ 6:13c1b75640a1@default(draft) bk:[] More addition (2) | - | * 4:5bf84d1d71d1@default(draft) bk:[] More addition + | * 4:6aa6f90a9f68@default(draft) bk:[] More addition |/ o 0:6569b5a81c7e@default(public) bk:[] root $ hg evolve -qn --content-divergent --no-all hg update -c 13c1b75640a1 && - hg merge 5bf84d1d71d1 && - hg commit -m "auto merge resolving conflict between 13c1b75640a1 and 5bf84d1d71d1"&& + hg merge 6aa6f90a9f68 && + hg commit -m "auto merge resolving conflict between 13c1b75640a1 and 6aa6f90a9f68"&& hg up -C 867e43582046 && hg revert --all --rev tip && hg commit -m "`hg log -r 13c1b75640a1 --template={desc}`"; @@ -633,9 +633,9 @@ (no more unresolved files) continue: hg evolve --continue $ hg evolve --continue - working directory is now at 2346e1147fed + working directory is now at 22dc0f618f0d $ glog - @ 7:2346e1147fed@default(draft) bk:[] More addition (2) + @ 7:22dc0f618f0d@default(draft) bk:[] More addition (2) | o 0:6569b5a81c7e@default(public) bk:[] root @@ -644,7 +644,7 @@ # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 2346e1147fedc8c9aa17f9ba7870dcd8be52f567 + # Node ID 22dc0f618f0d8714c611e7a683ad229a575f167c # Parent 6569b5a81c7e307ddc076550e8c0f6d75b6effcd More addition (2) @@ -895,63 +895,66 @@ 19ed1bf64a2c: E3 content-divergent: 084ae625fa51 (draft) (precursor 4a250e5bd992) + $ hg debugobsolete + 4a250e5bd992a897655e3b6f238e12452cf063e9 084ae625fa51ca8c441ba1d2bf0f974b21671017 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 4a250e5bd992a897655e3b6f238e12452cf063e9 19ed1bf64a2cc2a824df5ac33a436eca1ae0475d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} $ hg obslog --all --patch * 084ae625fa51 (2) E2 + | rewritten(description, content) from 4a250e5bd992 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 4a250e5bd992 -r 084ae625fa51 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -E1 + | +E2 + | + | diff --git a/numbers b/numbers + | --- a/numbers + | +++ b/numbers + | @@ -4,1 +4,1 @@ + | -four + | +4 + | @@ -7,1 +7,1 @@ + | -7 + | +seven + | diff --git a/romans b/romans + | --- a/romans + | +++ b/romans + | @@ -6,1 +6,1 @@ + | -VI + | +vi + | | | @ 19ed1bf64a2c (3) E3 - |/ + |/ rewritten(description, content) from 4a250e5bd992 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 4a250e5bd992 -r 19ed1bf64a2c changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -E1 + | +E3 + | + | diff --git a/letters b/letters + | --- a/letters + | +++ b/letters + | @@ -4,1 +4,1 @@ + | -D + | +d + | diff --git a/numbers b/numbers + | --- a/numbers + | +++ b/numbers + | @@ -1,1 +1,1 @@ + | -1 + | +one + | diff --git a/romans b/romans + | --- a/romans + | +++ b/romans + | @@ -2,1 +2,1 @@ + | -II + | +ii + | + | x 4a250e5bd992 (1) E1 - rewritten(description, content) as 084ae625fa51 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 4a250e5bd992 -r 084ae625fa51 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -E1 - +E2 - - diff --git a/numbers b/numbers - --- a/numbers - +++ b/numbers - @@ -4,1 +4,1 @@ - -four - +4 - @@ -7,1 +7,1 @@ - -7 - +seven - diff --git a/romans b/romans - --- a/romans - +++ b/romans - @@ -6,1 +6,1 @@ - -VI - +vi - - rewritten(description, content) as 19ed1bf64a2c using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 4a250e5bd992 -r 19ed1bf64a2c changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -E1 - +E3 - - diff --git a/letters b/letters - --- a/letters - +++ b/letters - @@ -4,1 +4,1 @@ - -D - +d - diff --git a/numbers b/numbers - --- a/numbers - +++ b/numbers - @@ -1,1 +1,1 @@ - -1 - +one - diff --git a/romans b/romans - --- a/romans - +++ b/romans - @@ -2,1 +2,1 @@ - -II - +ii - $ hg evolve --content-divergent --rev 'desc("E3")' @@ -961,7 +964,7 @@ merging numbers merging romans 1 files updated, 2 files merged, 0 files removed, 0 files unresolved - working directory is now at aae293050980 + working directory is now at e7cb08a7241a $ hg status $ hg amend -m 'E4' $ hg export @@ -969,7 +972,7 @@ # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 8c2a6aae4bc5c1cc00c68276017dcef3d468e895 + # Node ID 50bb00cad3206c79d231a621e319772302a88d8d # Parent 6d1fdf6de7e2d9fc9b098aa286b60785bbeaab7a E4 @@ -992,29 +995,33 @@ -VI +vi $ hg log -G - @ 5:8c2a6aae4bc5@default(draft) E4 [] + @ 5:50bb00cad320@default(draft) E4 [] | o 0:6d1fdf6de7e2@default(draft) root [] + $ hg debugobsolete + 4a250e5bd992a897655e3b6f238e12452cf063e9 084ae625fa51ca8c441ba1d2bf0f974b21671017 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 4a250e5bd992a897655e3b6f238e12452cf063e9 19ed1bf64a2cc2a824df5ac33a436eca1ae0475d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 084ae625fa51ca8c441ba1d2bf0f974b21671017 e7cb08a7241a98c908db298b61fc033b27f648c7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'evolve', 'user': 'test'} + 19ed1bf64a2cc2a824df5ac33a436eca1ae0475d e7cb08a7241a98c908db298b61fc033b27f648c7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'evolve', 'user': 'test'} + e7cb08a7241a98c908db298b61fc033b27f648c7 50bb00cad3206c79d231a621e319772302a88d8d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} $ hg obslog --patch - @ 8c2a6aae4bc5 (5) E4 + @ 50bb00cad320 (5) E4 + | reworded(description) from e7cb08a7241a using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r e7cb08a7241a -r 50bb00cad320 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,4 +1,1 @@ + | -<<<<<<< divergent + | -E2||||||| base + | -E1======= + | -E3>>>>>>> other + | +E4 | - x aae293050980 (4) <<<<<<< divergent - |\ reworded(description) as 8c2a6aae4bc5 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - | | diff -r aae293050980 -r 8c2a6aae4bc5 changeset-description - | | --- a/changeset-description - | | +++ b/changeset-description - | | @@ -1,4 +1,1 @@ - | | -<<<<<<< divergent - | | -E2||||||| base - | | -E1======= - | | -E3>>>>>>> other - | | +E4 - | | - | | - x | 084ae625fa51 (2) E2 - | | rewritten(description, content) as aae293050980 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) - | | diff -r 084ae625fa51 -r aae293050980 changeset-description + | + x e7cb08a7241a (4) <<<<<<< divergent + |\ rewritten(description, content) from 084ae625fa51 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | diff -r 084ae625fa51 -r e7cb08a7241a changeset-description | | --- a/changeset-description | | +++ b/changeset-description | | @@ -1,1 +1,4 @@ @@ -1043,86 +1050,89 @@ | | -II | | +ii | | + | | rewritten(description, content) from 19ed1bf64a2c using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | diff -r 19ed1bf64a2c -r e7cb08a7241a changeset-description + | | --- a/changeset-description + | | +++ b/changeset-description + | | @@ -1,1 +1,4 @@ + | | -E3 + | | +<<<<<<< divergent + | | +E2||||||| base + | | +E1======= + | | +E3>>>>>>> other + | | + | | diff --git a/numbers b/numbers + | | --- a/numbers + | | +++ b/numbers + | | @@ -4,1 +4,1 @@ + | | -four + | | +4 + | | @@ -7,1 +7,1 @@ + | | -7 + | | +seven + | | diff --git a/romans b/romans + | | --- a/romans + | | +++ b/romans + | | @@ -6,1 +6,1 @@ + | | -VI + | | +vi + | | + | | + x | 084ae625fa51 (2) E2 + | | rewritten(description, content) from 4a250e5bd992 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | | diff -r 4a250e5bd992 -r 084ae625fa51 changeset-description + | | --- a/changeset-description + | | +++ b/changeset-description + | | @@ -1,1 +1,1 @@ + | | -E1 + | | +E2 + | | + | | diff --git a/numbers b/numbers + | | --- a/numbers + | | +++ b/numbers + | | @@ -4,1 +4,1 @@ + | | -four + | | +4 + | | @@ -7,1 +7,1 @@ + | | -7 + | | +seven + | | diff --git a/romans b/romans + | | --- a/romans + | | +++ b/romans + | | @@ -6,1 +6,1 @@ + | | -VI + | | +vi + | | | | | x 19ed1bf64a2c (3) E3 - |/ rewritten(description, content) as aae293050980 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) - | diff -r 19ed1bf64a2c -r aae293050980 changeset-description + |/ rewritten(description, content) from 4a250e5bd992 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 4a250e5bd992 -r 19ed1bf64a2c changeset-description | --- a/changeset-description | +++ b/changeset-description - | @@ -1,1 +1,4 @@ - | -E3 - | +<<<<<<< divergent - | +E2||||||| base - | +E1======= - | +E3>>>>>>> other + | @@ -1,1 +1,1 @@ + | -E1 + | +E3 | + | diff --git a/letters b/letters + | --- a/letters + | +++ b/letters + | @@ -4,1 +4,1 @@ + | -D + | +d | diff --git a/numbers b/numbers | --- a/numbers | +++ b/numbers - | @@ -4,1 +4,1 @@ - | -four - | +4 - | @@ -7,1 +7,1 @@ - | -7 - | +seven + | @@ -1,1 +1,1 @@ + | -1 + | +one | diff --git a/romans b/romans | --- a/romans | +++ b/romans - | @@ -6,1 +6,1 @@ - | -VI - | +vi + | @@ -2,1 +2,1 @@ + | -II + | +ii | | x 4a250e5bd992 (1) E1 - rewritten(description, content) as 084ae625fa51 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 4a250e5bd992 -r 084ae625fa51 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -E1 - +E2 - diff --git a/numbers b/numbers - --- a/numbers - +++ b/numbers - @@ -4,1 +4,1 @@ - -four - +4 - @@ -7,1 +7,1 @@ - -7 - +seven - diff --git a/romans b/romans - --- a/romans - +++ b/romans - @@ -6,1 +6,1 @@ - -VI - +vi - - rewritten(description, content) as 19ed1bf64a2c using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 4a250e5bd992 -r 19ed1bf64a2c changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -E1 - +E3 - - diff --git a/letters b/letters - --- a/letters - +++ b/letters - @@ -4,1 +4,1 @@ - -D - +d - diff --git a/numbers b/numbers - --- a/numbers - +++ b/numbers - @@ -1,1 +1,1 @@ - -1 - +one - diff --git a/romans b/romans - --- a/romans - +++ b/romans - @@ -2,1 +2,1 @@ - -II - +ii - - + diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-content-divergent-corner-cases.t --- a/tests/test-evolve-content-divergent-corner-cases.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-content-divergent-corner-cases.t Fri May 08 20:36:29 2020 +0800 @@ -79,12 +79,31 @@ with: [3] divergent base: [1] added b 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 45bf1312f454 + working directory is now at 98ab969ac8fb $ hg log -G - @ 4:45bf1312f454@default(draft) divergent [] + @ 4:98ab969ac8fb@default(draft) divergent [] | o 0:9092f1db7931@default(draft) added a [] + $ hg debugobsolete + 5f6d8a4bf34ab274ccc9f631c2536964b8a3666d 8374d2ddc3a4d48428c3d2f80e4fc86f13736f96 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'prune', 'user': 'test'} + 5f6d8a4bf34ab274ccc9f631c2536964b8a3666d 593c57f2117e33dd0884382f02789d948f548557 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'prune', 'user': 'test'} + 593c57f2117e33dd0884382f02789d948f548557 98ab969ac8fbe315e6d2c24a8eb5eab5b81e4242 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + 8374d2ddc3a4d48428c3d2f80e4fc86f13736f96 98ab969ac8fbe315e6d2c24a8eb5eab5b81e4242 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + $ hg obslog --all + @ 98ab969ac8fb (4) divergent + |\ amended(content) from 593c57f2117e using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | amended(content) from 8374d2ddc3a4 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | 593c57f2117e (2) divergent + | | rewritten(description, content) from 5f6d8a4bf34a using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x 8374d2ddc3a4 (3) divergent + |/ rewritten(description, content) from 5f6d8a4bf34a using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + x 5f6d8a4bf34a (1) added b + + Test divergence resolution when it yields to an empty commit (issue4950) cdivergent2 contains the same content than cdivergent1 and they are divergent versions of the revision _c @@ -113,7 +132,7 @@ |/ | o 5:48819a835615@default(draft) add _c [] |/ - | o 4:45bf1312f454@default(draft) divergent [] + | o 4:98ab969ac8fb@default(draft) divergent [] |/ o 0:9092f1db7931@default(draft) added a [] @@ -129,7 +148,7 @@ | | * 6:e3ff64ce8d4c@default(draft) add cdivergent1 [content-divergent] |/ - | o 4:45bf1312f454@default(draft) divergent [] + | o 4:98ab969ac8fb@default(draft) divergent [] |/ o 0:9092f1db7931@default(draft) added a [] @@ -138,8 +157,37 @@ with: [7] add _c base: [5] add _c 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - nothing changed - working directory is now at e3ff64ce8d4c + working directory is now at 6b3776664a25 + + $ hg log -G + @ 8:6b3776664a25@default(draft) add cdivergent1 [] + | + | o 4:98ab969ac8fb@default(draft) divergent [] + |/ + o 0:9092f1db7931@default(draft) added a [] + + $ hg debugobsolete + 5f6d8a4bf34ab274ccc9f631c2536964b8a3666d 8374d2ddc3a4d48428c3d2f80e4fc86f13736f96 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'prune', 'user': 'test'} + 5f6d8a4bf34ab274ccc9f631c2536964b8a3666d 593c57f2117e33dd0884382f02789d948f548557 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'prune', 'user': 'test'} + 593c57f2117e33dd0884382f02789d948f548557 98ab969ac8fbe315e6d2c24a8eb5eab5b81e4242 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + 8374d2ddc3a4d48428c3d2f80e4fc86f13736f96 98ab969ac8fbe315e6d2c24a8eb5eab5b81e4242 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + 48819a83561596ef0aeac4082eaaa8afe4320f3a b2ae71172042972a8e8d2bc11e2b2fe4e0c3aa49 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'prune', 'user': 'test'} + 48819a83561596ef0aeac4082eaaa8afe4320f3a e3ff64ce8d4ce33b40d9f367a8ec472fec588ca3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'prune', 'user': 'test'} + e3ff64ce8d4ce33b40d9f367a8ec472fec588ca3 6b3776664a258aa4c7e13f90df20ae9170995217 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + b2ae71172042972a8e8d2bc11e2b2fe4e0c3aa49 6b3776664a258aa4c7e13f90df20ae9170995217 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'evolve', 'user': 'test'} + $ hg obslog --all + @ 6b3776664a25 (8) add cdivergent1 + |\ reworded(description) from b2ae71172042 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten from e3ff64ce8d4c using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | b2ae71172042 (7) add _c + | | amended(content) from 48819a835615 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x e3ff64ce8d4c (6) add cdivergent1 + |/ rewritten(description, content) from 48819a835615 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + x 48819a835615 (5) add _c + $ cd .. @@ -206,7 +254,31 @@ with: [3] bdivergent base: [1] add _b 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 73ff357d3975 + working directory is now at b87e0354d5cb + + $ hg log -G + @ 4:b87e0354d5cb@default(draft) bdivergent [] + | + o 0:135f39f4bd78@default(draft) add _a [] + + $ hg debugobsolete + 37445b16603b50165d5eb80735fb986c72a2dac1 6b096fb450709a194b21fb9b192fe9b1572c4af0 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'prune', 'user': 'test'} + 37445b16603b50165d5eb80735fb986c72a2dac1 05a6b6a9e633802d2bdd06e6d292982a767d930e 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'prune', 'user': 'test'} + 05a6b6a9e633802d2bdd06e6d292982a767d930e b87e0354d5cb081210298429d8b51de9871155a2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + 6b096fb450709a194b21fb9b192fe9b1572c4af0 b87e0354d5cb081210298429d8b51de9871155a2 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + $ hg obslog --all + @ b87e0354d5cb (4) bdivergent + |\ amended(content) from 05a6b6a9e633 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | amended(content) from 6b096fb45070 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | 05a6b6a9e633 (2) bdivergent + | | rewritten(description, content) from 37445b16603b using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x 6b096fb45070 (3) bdivergent + |/ rewritten(description, content) from 37445b16603b using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + x 37445b16603b (1) add _b + $ cd .. @@ -284,13 +356,41 @@ What do you want to do? use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c 0 files updated, 1 files merged, 0 files removed, 0 files unresolved - working directory is now at eb6357cd41b6 + working directory is now at 51ee71efed61 $ hg glog -l1 - @ 9:eb6357cd41b6 updated e + @ 9:51ee71efed61 updated e | () [default] draft ~ + $ hg debugobsolete + 8d71eadcc9dfb21a924e75a5796c2f011bdc55a4 ff6f7cd76a7c97d938e8fe87f0fc816b66929435 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 8d71eadcc9dfb21a924e75a5796c2f011bdc55a4 de4ea3103326293994c634101e780724346ee89f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'prune', 'user': 'test'} + 9150fe93bec603cd88d05cda9f6ff13420cb53e9 0 {155349b645beebee15325a9a22dd0c9ef8fbbbd3} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'} + ff6f7cd76a7c97d938e8fe87f0fc816b66929435 0ceb21ca2557a61433f097e4d64024e37cae2c10 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + de4ea3103326293994c634101e780724346ee89f a2465d1d56d1aee8ed90d2292978456d2be6f7b9 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 0ceb21ca2557a61433f097e4d64024e37cae2c10 51ee71efed6170064a7155a9a35e56af0292a203 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + a2465d1d56d1aee8ed90d2292978456d2be6f7b9 51ee71efed6170064a7155a9a35e56af0292a203 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + $ hg obslog --all + @ 51ee71efed61 (9) updated e + |\ amended(content) from 0ceb21ca2557 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten from a2465d1d56d1 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | 0ceb21ca2557 (7) updated e + | | rebased(parent) from ff6f7cd76a7c using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x a2465d1d56d1 (8) updated e + | | rebased(parent) from de4ea3103326 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x de4ea3103326 (6) updated e + | | rewritten(description, parent, content) from 8d71eadcc9df using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | ff6f7cd76a7c (5) updated e + |/ rewritten(description, content) from 8d71eadcc9df using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | + x 8d71eadcc9df (4) added e + + $ cd .. Check that canceling of file deletion are merge correctly @@ -341,9 +441,9 @@ with: [3] delete a base: [1] delete a 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 7ca6a9fafcf6 + working directory is now at b1badc7ab394 $ hg glog - @ 4:7ca6a9fafcf6 delete a + @ 4:b1badc7ab394 delete a | () [default] draft o 0:75d2b02c4a5c initial () [default] draft @@ -355,3 +455,22 @@ +++ /dev/null @@ -1,1 +0,0 @@ -a + + $ hg debugobsolete + dff6e52f5e419381c070159c8038ac948f59283f 0825dcee2670349e749f1df45857fca34f61e350 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + dff6e52f5e419381c070159c8038ac948f59283f 92ecd58f9b05d6c0a1c3833a79359eea4b0268ff 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + 0825dcee2670349e749f1df45857fca34f61e350 b1badc7ab394c2b9ed21e2961de43c71c2e2288f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + 92ecd58f9b05d6c0a1c3833a79359eea4b0268ff b1badc7ab394c2b9ed21e2961de43c71c2e2288f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + $ hg obslog --all + @ b1badc7ab394 (4) delete a + |\ amended(content) from 0825dcee2670 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | amended(content) from 92ecd58f9b05 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | 0825dcee2670 (2) delete a + | | amended(content) from dff6e52f5e41 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x 92ecd58f9b05 (3) delete a + |/ amended(content) from dff6e52f5e41 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | + x dff6e52f5e41 (1) delete a + diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-content-divergent-first-changeset.t --- a/tests/test-evolve-content-divergent-first-changeset.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-content-divergent-first-changeset.t Fri May 08 20:36:29 2020 +0800 @@ -6,6 +6,7 @@ > evolution.allowdivergence = True > EOF + This test file tests the case of content-divergence resolution of changesets that have the null revision as the parent. @@ -40,6 +41,6 @@ with: [2] div2 base: [0] test 0 files updated, 1 files merged, 0 files removed, 0 files unresolved - working directory is now at 12772224141b + working directory is now at 62fcb3488421 $ hg evolve --list diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-content-divergent-interrupted.t --- a/tests/test-evolve-content-divergent-interrupted.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-content-divergent-interrupted.t Fri May 08 20:36:29 2020 +0800 @@ -197,7 +197,7 @@ merge:[5] added d with: [7] added d base: [4] added d - rebasing "divergent" content-divergent changeset e49523854bc8 on ddcf04e1458c + rebasing "divergent" content-divergent changeset e49523854bc8 on 4566502c0483 merging d warning: conflicts while merging d! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -237,15 +237,15 @@ $ hg obslog -r . --all * 2ba73e31f264 (8) added c + | amended(content) from ca1b80f7960a using amend by test (Thu Jan 01 00:00:00 1970 +0000) | | @ 491e10505bae (10) added c + | | amended(content) from 7398f702a162 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | | | x 7398f702a162 (9) added c - |/ amended(content) as 491e10505bae using amend by test (Thu Jan 01 00:00:00 1970 +0000) + |/ amended(content) from ca1b80f7960a using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x ca1b80f7960a (3) added c - amended(content) as 2ba73e31f264 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - amended(content) as 7398f702a162 using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ cd .. diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-content-divergent-meta.t --- a/tests/test-evolve-content-divergent-meta.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-content-divergent-meta.t Fri May 08 20:36:29 2020 +0800 @@ -93,7 +93,7 @@ Make sure resultant cset don't replace the initial user with user running the command: $ hg log -r tip - changeset: 5:443bd2972210 + changeset: 5:8cabe7248d20 tag: tip parent: 1:1740ad2a1eda user: foo @@ -133,7 +133,7 @@ with: [4] added c base: [2] added c 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 932d6ceb7672 + working directory is now at 2300a271820b $ hg log -r tip | grep "^user" user: foouser @@ -154,7 +154,7 @@ with: [5] updated c base: [2] added c 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 202a770d8c1f + working directory is now at 3d7ae55fbfe4 $ hg log -r tip | grep "^user" user: baruser, foouser @@ -219,15 +219,15 @@ with: [4] add foo.txt base: [1] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 6c144bb30333 + working directory is now at bbcfcd9b9e21 $ hg log -r 'desc("add foo.txt")' -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 5 6c144bb30333 1969-12-31 23:59 -0000: + 5 bbcfcd9b9e21 1969-12-31 23:59 -0000: date: updated one one side to an older value $ hg strip . 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - saved backup bundle to $TESTTMP/divergingdate/.hg/strip-backup/6c144bb30333-72e26b88-backup.hg + saved backup bundle to $TESTTMP/divergingdate/.hg/strip-backup/bbcfcd9b9e21-567273f3-backup.hg 2 new content-divergent changesets $ hg up tip 1 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -266,15 +266,15 @@ with: [5] add foo.txt base: [1] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 806d0024c04d + working directory is now at 4708538fed7d $ hg log -r . --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 6 806d0024c04d 1969-12-31 23:59 -0000: + 6 4708538fed7d 1969-12-31 23:59 -0000: date: updated one side to an newer value $ hg strip . 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - saved backup bundle to $TESTTMP/divergingdate/.hg/strip-backup/806d0024c04d-24cb28ad-backup.hg + saved backup bundle to $TESTTMP/divergingdate/.hg/strip-backup/4708538fed7d-ca550351-backup.hg 2 new content-divergent changesets $ hg update a25dd7af6cf6 --hidden 2 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -315,15 +315,15 @@ with: [6] add foo.txt base: [1] add foo.txt 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 51e08ac59670 + working directory is now at dbea1c7e245d $ hg log -r . --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 7 51e08ac59670 1970-01-01 00:02 +0000: + 7 dbea1c7e245d 1970-01-01 00:02 +0000: date: updated each side to a different value, newer should win $ hg strip . 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - saved backup bundle to $TESTTMP/divergingdate/.hg/strip-backup/51e08ac59670-d8a3c2ca-backup.hg + saved backup bundle to $TESTTMP/divergingdate/.hg/strip-backup/dbea1c7e245d-47ae3d98-backup.hg 2 new content-divergent changesets $ hg up tip 2 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -365,8 +365,8 @@ with: [8] add foo.txt base: [1] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at ab7c0a425dc9 + working directory is now at 10c950c7c11f $ hg log -r . --hidden -T '{rev} {node|short} {date|isodate}: {join(obsfate, "; ")}\n' - 9 ab7c0a425dc9 1970-01-01 00:13 +0000: + 9 10c950c7c11f 1970-01-01 00:13 +0000: $ cd .. diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-content-divergent-relocation.t --- a/tests/test-evolve-content-divergent-relocation.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-content-divergent-relocation.t Fri May 08 20:36:29 2020 +0800 @@ -70,10 +70,10 @@ base: [2] added b rebasing "other" content-divergent changeset da4b96f4a8d6 on c7586e2a9264 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 171614c9a791 + working directory is now at e7fdc662d630 $ hg glog - @ 8:171614c9a791 added b + @ 8:e7fdc662d630 added b | () [default] draft | * 4:c41c793e0ef1 added d | | () [default] draft @@ -91,16 +91,39 @@ # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 171614c9a7914c53f531373b95632323fdbbac8d + # Node ID e7fdc662d6305fee2908c3f1630e0b20d6f4689a # Parent c7586e2a92645e473645847a7b69a6dc52be4276 added b - diff -r c7586e2a9264 -r 171614c9a791 b + diff -r c7586e2a9264 -r e7fdc662d630 b --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/b Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ +bar + $ hg debugobsolete + b1661037fa25511d0b7ccddf405e336f9d7d3424 7ed0642d644bb9ad93d252dd9ffe7b4729febe48 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + b1661037fa25511d0b7ccddf405e336f9d7d3424 da4b96f4a8d610a85b225583138f681d67e275dd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + da4b96f4a8d610a85b225583138f681d67e275dd 11f849d7159fa30a63dbbc1a6d251a8d996baeb5 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 7ed0642d644bb9ad93d252dd9ffe7b4729febe48 e7fdc662d6305fee2908c3f1630e0b20d6f4689a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + 11f849d7159fa30a63dbbc1a6d251a8d996baeb5 e7fdc662d6305fee2908c3f1630e0b20d6f4689a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + $ hg obslog --all + @ e7fdc662d630 (8) added b + |\ amended(content) from 11f849d7159f using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten from 7ed0642d644b using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | 11f849d7159f (7) added b + | | rebased(parent) from da4b96f4a8d6 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x 7ed0642d644b (5) added b + | | amended(content) from b1661037fa25 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | da4b96f4a8d6 (6) added b + |/ rebased(parent) from b1661037fa25 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | + x b1661037fa25 (2) added b + + Resolving orphans to get back to a normal graph $ hg evolve --all @@ -108,11 +131,11 @@ atop:[8] added b move:[4] added d $ hg glog - o 10:4ae4427ee9f8 added d + o 10:be5a8b9faa8a added d | () [default] draft - o 9:917281f93fcb added c + o 9:e2ce33033e42 added c | () [default] draft - @ 8:171614c9a791 added b + @ 8:e7fdc662d630 added b | () [default] draft o 1:c7586e2a9264 added a | () [default] draft @@ -124,7 +147,7 @@ $ echo x > x $ hg ci -Aqm "added x" $ hg glog -r . - @ 11:71a392c714b5 added x + @ 11:801b5920c7ea added x | () [default] draft ~ @@ -134,26 +157,26 @@ (branches are permanent and global, did you want a bookmark?) $ hg amend -m "added foo to x" - $ hg up 71a392c714b5 --hidden + $ hg up 'predecessors(.)' --hidden 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - updated to hidden changeset 71a392c714b5 - (hidden revision '71a392c714b5' was rewritten as: 1e1a50385a7d) - working directory parent is obsolete! (71a392c714b5) - (use 'hg evolve' to update to its successor: 1e1a50385a7d) - $ hg rebase -r . -d 4ae4427ee9f8 --config experimental.evolution.allowdivergence=True - rebasing 11:71a392c714b5 "added x" + updated to hidden changeset 801b5920c7ea + (hidden revision '801b5920c7ea' was rewritten as: 5cf74a13db18) + working directory parent is obsolete! (801b5920c7ea) + (use 'hg evolve' to update to its successor: 5cf74a13db18) + $ hg rebase -r . -d 'desc("added d")' --config experimental.evolution.allowdivergence=True + rebasing 11:801b5920c7ea "added x" 2 new content-divergent changesets $ hg glog - @ 13:1e4f6b3bb39b added x + @ 13:45e15d6e88f5 added x | () [default] draft - | * 12:1e1a50385a7d added foo to x + | * 12:5cf74a13db18 added foo to x | | () [bar] draft - o | 10:4ae4427ee9f8 added d + o | 10:be5a8b9faa8a added d | | () [default] draft - o | 9:917281f93fcb added c + o | 9:e2ce33033e42 added c |/ () [default] draft - o 8:171614c9a791 added b + o 8:e7fdc662d630 added b | () [default] draft o 1:c7586e2a9264 added a | () [default] draft @@ -164,9 +187,9 @@ merge:[13] added x with: [12] added foo to x base: [11] added x - rebasing "other" content-divergent changeset 1e1a50385a7d on 4ae4427ee9f8 + rebasing "other" content-divergent changeset 5cf74a13db18 on be5a8b9faa8a 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at b006cf317e0e + working directory is now at 4e844ab5e814 $ hg exp # HG changeset patch @@ -174,11 +197,11 @@ # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Branch bar - # Node ID b006cf317e0ed16dbe786c439577475580f645f1 - # Parent 4ae4427ee9f8f0935211fd66360948b77ab5aee9 + # Node ID 4e844ab5e8142d26fb1f0990486379f2410b0358 + # Parent be5a8b9faa8af54f115aa168a2c8564acb40c37d added foo to x - diff -r 4ae4427ee9f8 -r b006cf317e0e x + diff -r be5a8b9faa8a -r 4e844ab5e814 x --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/x Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ @@ -187,19 +210,49 @@ The above `hg exp` and the following log call demonstrates that message, content and branch change is preserved in case of relocation $ hg glog - @ 15:b006cf317e0e added foo to x + @ 15:4e844ab5e814 added foo to x | () [bar] draft - o 10:4ae4427ee9f8 added d + o 10:be5a8b9faa8a added d | () [default] draft - o 9:917281f93fcb added c + o 9:e2ce33033e42 added c | () [default] draft - o 8:171614c9a791 added b + o 8:e7fdc662d630 added b | () [default] draft o 1:c7586e2a9264 added a | () [default] draft o 0:8fa14d15e168 added hgignore () [default] draft + $ hg debugobsolete + b1661037fa25511d0b7ccddf405e336f9d7d3424 7ed0642d644bb9ad93d252dd9ffe7b4729febe48 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + b1661037fa25511d0b7ccddf405e336f9d7d3424 da4b96f4a8d610a85b225583138f681d67e275dd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + da4b96f4a8d610a85b225583138f681d67e275dd 11f849d7159fa30a63dbbc1a6d251a8d996baeb5 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 7ed0642d644bb9ad93d252dd9ffe7b4729febe48 e7fdc662d6305fee2908c3f1630e0b20d6f4689a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + 11f849d7159fa30a63dbbc1a6d251a8d996baeb5 e7fdc662d6305fee2908c3f1630e0b20d6f4689a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + ca1b80f7960aae2306287bab52b4090c59af8c29 e2ce33033e42db2e61a5f71c6dfb52a33efeaf6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + c41c793e0ef1ddb463e85ea9491e377d01127ba2 be5a8b9faa8af54f115aa168a2c8564acb40c37d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 801b5920c7ea8d4ebdbc9cfc1e79e665dea2f211 5cf74a13db180e33dc2df8cd2aa70b21252a2a64 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '73', 'operation': 'amend', 'user': 'test'} + 801b5920c7ea8d4ebdbc9cfc1e79e665dea2f211 45e15d6e88f5bd23ba360dff0c7591eca2d99f43 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 5cf74a13db180e33dc2df8cd2aa70b21252a2a64 911c21adca136894a2b35f0a58fae7ee94fa5e61 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 45e15d6e88f5bd23ba360dff0c7591eca2d99f43 4e844ab5e8142d26fb1f0990486379f2410b0358 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '73', 'operation': 'evolve', 'user': 'test'} + 911c21adca136894a2b35f0a58fae7ee94fa5e61 4e844ab5e8142d26fb1f0990486379f2410b0358 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + $ hg obslog --all + @ 4e844ab5e814 (15) added foo to x + |\ rewritten(description, branch, content) from 45e15d6e88f5 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten from 911c21adca13 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | 45e15d6e88f5 (13) added x + | | rebased(parent) from 801b5920c7ea using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x 911c21adca13 (14) added foo to x + | | rebased(parent) from 5cf74a13db18 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x 5cf74a13db18 (12) added foo to x + |/ rewritten(description, branch, content) from 801b5920c7ea using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | + x 801b5920c7ea (11) added x + + Testing when both the content-divergence are on different parents and resolution will lead to conflicts --------------------------------------------------------------------------------- @@ -210,37 +263,37 @@ $ echo y > y $ hg ci -Aqm "added y" $ hg glog -r . - @ 16:fc6ad2bac162 added y + @ 16:ecf1d3992eb4 added y | () [default] draft ~ $ echo bar > y $ hg amend - $ hg up fc6ad2bac162 --hidden + $ hg up 'predecessors(.)' --hidden 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - updated to hidden changeset fc6ad2bac162 - (hidden revision 'fc6ad2bac162' was rewritten as: 2a9f6ccbdeba) - working directory parent is obsolete! (fc6ad2bac162) - (use 'hg evolve' to update to its successor: 2a9f6ccbdeba) - $ hg rebase -r . -d b006cf317e0e --config experimental.evolution.allowdivergence=True - rebasing 16:fc6ad2bac162 "added y" + updated to hidden changeset ecf1d3992eb4 + (hidden revision 'ecf1d3992eb4' was rewritten as: 9c32d35206fb) + working directory parent is obsolete! (ecf1d3992eb4) + (use 'hg evolve' to update to its successor: 9c32d35206fb) + $ hg rebase -r . -d 'desc("added foo to x")' --config experimental.evolution.allowdivergence=True + rebasing 16:ecf1d3992eb4 "added y" 2 new content-divergent changesets $ echo wat > y $ hg amend $ hg glog - @ 19:b4575ed6fcfc added y + @ 19:0faa43228ee7 added y | () [bar] draft - | * 17:2a9f6ccbdeba added y + | * 17:9c32d35206fb added y | | () [default] draft - o | 15:b006cf317e0e added foo to x + o | 15:4e844ab5e814 added foo to x | | () [bar] draft - o | 10:4ae4427ee9f8 added d + o | 10:be5a8b9faa8a added d | | () [default] draft - o | 9:917281f93fcb added c + o | 9:e2ce33033e42 added c |/ () [default] draft - o 8:171614c9a791 added b + o 8:e7fdc662d630 added b | () [default] draft o 1:c7586e2a9264 added a | () [default] draft @@ -251,7 +304,7 @@ merge:[19] added y with: [17] added y base: [16] added y - rebasing "other" content-divergent changeset 2a9f6ccbdeba on b006cf317e0e + rebasing "other" content-divergent changeset 9c32d35206fb on 4e844ab5e814 merging y warning: conflicts while merging y! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -264,55 +317,74 @@ (no more unresolved files) continue: hg evolve --continue $ hg evolve --continue - working directory is now at 7bbcf24ddecf + working directory is now at ba11a9f47a2e $ hg glog - @ 21:7bbcf24ddecf added y + @ 21:ba11a9f47a2e added y | () [bar] draft - o 15:b006cf317e0e added foo to x + o 15:4e844ab5e814 added foo to x | () [bar] draft - o 10:4ae4427ee9f8 added d + o 10:be5a8b9faa8a added d | () [default] draft - o 9:917281f93fcb added c + o 9:e2ce33033e42 added c | () [default] draft - o 8:171614c9a791 added b + o 8:e7fdc662d630 added b | () [default] draft o 1:c7586e2a9264 added a | () [default] draft o 0:8fa14d15e168 added hgignore () [default] draft + $ hg debugobsolete + b1661037fa25511d0b7ccddf405e336f9d7d3424 7ed0642d644bb9ad93d252dd9ffe7b4729febe48 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + b1661037fa25511d0b7ccddf405e336f9d7d3424 da4b96f4a8d610a85b225583138f681d67e275dd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + da4b96f4a8d610a85b225583138f681d67e275dd 11f849d7159fa30a63dbbc1a6d251a8d996baeb5 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 7ed0642d644bb9ad93d252dd9ffe7b4729febe48 e7fdc662d6305fee2908c3f1630e0b20d6f4689a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + 11f849d7159fa30a63dbbc1a6d251a8d996baeb5 e7fdc662d6305fee2908c3f1630e0b20d6f4689a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + ca1b80f7960aae2306287bab52b4090c59af8c29 e2ce33033e42db2e61a5f71c6dfb52a33efeaf6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + c41c793e0ef1ddb463e85ea9491e377d01127ba2 be5a8b9faa8af54f115aa168a2c8564acb40c37d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 801b5920c7ea8d4ebdbc9cfc1e79e665dea2f211 5cf74a13db180e33dc2df8cd2aa70b21252a2a64 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '73', 'operation': 'amend', 'user': 'test'} + 801b5920c7ea8d4ebdbc9cfc1e79e665dea2f211 45e15d6e88f5bd23ba360dff0c7591eca2d99f43 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 5cf74a13db180e33dc2df8cd2aa70b21252a2a64 911c21adca136894a2b35f0a58fae7ee94fa5e61 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 45e15d6e88f5bd23ba360dff0c7591eca2d99f43 4e844ab5e8142d26fb1f0990486379f2410b0358 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '73', 'operation': 'evolve', 'user': 'test'} + 911c21adca136894a2b35f0a58fae7ee94fa5e61 4e844ab5e8142d26fb1f0990486379f2410b0358 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + ecf1d3992eb4d9700d441013fc4e89014692b461 9c32d35206fb5c3bf0ac814d410914d54a959a87 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + ecf1d3992eb4d9700d441013fc4e89014692b461 1bb9315961377c18863281be7634ec8ff9b73ea9 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '68', 'operation': 'rebase', 'user': 'test'} + 1bb9315961377c18863281be7634ec8ff9b73ea9 0faa43228ee7fb9c993f076cef7e2ac14c85954b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + 9c32d35206fb5c3bf0ac814d410914d54a959a87 0fc12918c8daa12ca83ce1e2a38e252b063b6276 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 0faa43228ee7fb9c993f076cef7e2ac14c85954b ba11a9f47a2e4a3380c4d5f80f64de41645a6681 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + 0fc12918c8daa12ca83ce1e2a38e252b063b6276 ba11a9f47a2e4a3380c4d5f80f64de41645a6681 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '72', 'operation': 'evolve', 'user': 'test'} $ hg obslog -r . --all - @ 7bbcf24ddecf (21) added y - |\ - x | 48f745db3f53 (20) added y - | | rewritten(branch, content) as 7bbcf24ddecf using evolve by test (Thu Jan 01 00:00:00 1970 +0000) - | | - | x b4575ed6fcfc (19) added y - | | amended(content) as 7bbcf24ddecf using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + @ ba11a9f47a2e (21) added y + |\ amended(content) from 0faa43228ee7 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten(branch, content) from 0fc12918c8da using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | - x | 2a9f6ccbdeba (17) added y - | | rebased(parent) as 48f745db3f53 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + x | 0faa43228ee7 (19) added y + | | amended(content) from 1bb931596137 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x 0fc12918c8da (20) added y + | | rebased(parent) from 9c32d35206fb using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | - | x 96b677f01b81 (18) added y - |/ amended(content) as b4575ed6fcfc using amend by test (Thu Jan 01 00:00:00 1970 +0000) + x | 1bb931596137 (18) added y + | | rewritten(branch, parent) from ecf1d3992eb4 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x 9c32d35206fb (17) added y + |/ amended(content) from ecf1d3992eb4 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | - x fc6ad2bac162 (16) added y - amended(content) as 2a9f6ccbdeba using amend by test (Thu Jan 01 00:00:00 1970 +0000) - rewritten(branch, parent) as 96b677f01b81 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + x ecf1d3992eb4 (16) added y checking that relocated commit is there - $ hg exp 48f745db3f53 --hidden + $ hg exp 20 --hidden # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 48f745db3f5300363ca248b9aeab20ff2a55fbb3 - # Parent b006cf317e0ed16dbe786c439577475580f645f1 + # Node ID 0fc12918c8daa12ca83ce1e2a38e252b063b6276 + # Parent 4e844ab5e8142d26fb1f0990486379f2410b0358 added y - diff -r b006cf317e0e -r 48f745db3f53 y + diff -r 4e844ab5e814 -r 0fc12918c8da y --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/y Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ @@ -322,15 +394,15 @@ ---------------------------------------------------------------------- $ hg glog - @ 21:7bbcf24ddecf added y + @ 21:ba11a9f47a2e added y | () [bar] draft - o 15:b006cf317e0e added foo to x + o 15:4e844ab5e814 added foo to x | () [bar] draft - o 10:4ae4427ee9f8 added d + o 10:be5a8b9faa8a added d | () [default] draft - o 9:917281f93fcb added c + o 9:e2ce33033e42 added c | () [default] draft - o 8:171614c9a791 added b + o 8:e7fdc662d630 added b | () [default] draft o 1:c7586e2a9264 added a | () [default] draft @@ -343,7 +415,7 @@ $ echo z > z $ hg ci -Aqm "added z" $ hg glog -r . - @ 22:daf1de08f3b0 added z + @ 22:2048a66e8834 added z | () [default] draft ~ @@ -351,32 +423,32 @@ $ hg add y $ hg amend - $ hg up daf1de08f3b0 --hidden + $ hg up 'predecessors(.)' --hidden 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - updated to hidden changeset daf1de08f3b0 - (hidden revision 'daf1de08f3b0' was rewritten as: 3f7a1f693080) - working directory parent is obsolete! (daf1de08f3b0) - (use 'hg evolve' to update to its successor: 3f7a1f693080) - $ hg rebase -r . -d 7bbcf24ddecf --config experimental.evolution.allowdivergence=True - rebasing 22:daf1de08f3b0 "added z" + updated to hidden changeset 2048a66e8834 + (hidden revision '2048a66e8834' was rewritten as: 9bc2ace42175) + working directory parent is obsolete! (2048a66e8834) + (use 'hg evolve' to update to its successor: 9bc2ace42175) + $ hg rebase -r . -d 'desc("added y")' --config experimental.evolution.allowdivergence=True + rebasing 22:2048a66e8834 "added z" 2 new content-divergent changesets $ echo bar > z $ hg amend $ hg glog - @ 25:53242575ffa9 added z + @ 25:ad2ec16eca1e added z | () [bar] draft - | * 23:3f7a1f693080 added z + | * 23:9bc2ace42175 added z | | () [default] draft - o | 21:7bbcf24ddecf added y + o | 21:ba11a9f47a2e added y | | () [bar] draft - o | 15:b006cf317e0e added foo to x + o | 15:4e844ab5e814 added foo to x | | () [bar] draft - o | 10:4ae4427ee9f8 added d + o | 10:be5a8b9faa8a added d | | () [default] draft - o | 9:917281f93fcb added c + o | 9:e2ce33033e42 added c |/ () [default] draft - o 8:171614c9a791 added b + o 8:e7fdc662d630 added b | () [default] draft o 1:c7586e2a9264 added a | () [default] draft @@ -387,7 +459,7 @@ merge:[25] added z with: [23] added z base: [22] added z - rebasing "other" content-divergent changeset 3f7a1f693080 on 7bbcf24ddecf + rebasing "other" content-divergent changeset 9bc2ace42175 on ba11a9f47a2e merging y warning: conflicts while merging y! (edit, then use 'hg resolve --mark') unresolved merge conflicts @@ -395,16 +467,16 @@ [1] $ hg diff - diff -r 7bbcf24ddecf y + diff -r ba11a9f47a2e y --- a/y Thu Jan 01 00:00:00 1970 +0000 +++ b/y Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +1,5 @@ - +<<<<<<< destination: 7bbcf24ddecf bar - test: added y + +<<<<<<< destination: ba11a9f47a2e bar - test: added y watbar +======= +foo - +>>>>>>> evolving: 3f7a1f693080 - test: added z - diff -r 7bbcf24ddecf z + +>>>>>>> evolving: 9bc2ace42175 - test: added z + diff -r ba11a9f47a2e z --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/z Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ @@ -416,7 +488,7 @@ continue: hg evolve --continue $ hg evolve --continue - evolving 23:3f7a1f693080 "added z" + evolving 23:9bc2ace42175 "added z" merging y warning: conflicts while merging y! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -425,35 +497,35 @@ [1] $ hg diff - diff -r 53242575ffa9 y + diff -r ad2ec16eca1e y --- a/y Thu Jan 01 00:00:00 1970 +0000 +++ b/y Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +1,5 @@ - +<<<<<<< local: 53242575ffa9 bar - test: added z + +<<<<<<< local: ad2ec16eca1e bar - test: added z watbar +======= +foo - +>>>>>>> other: cdb0643c69fc - test: added z + +>>>>>>> other: a7326a078527 - test: added z $ echo foo > y $ hg resolve -m (no more unresolved files) continue: hg evolve --continue $ hg evolve --continue - working directory is now at 6fc7d9682de6 + working directory is now at 45e55c9ab3d0 $ hg glog - @ 27:6fc7d9682de6 added z + @ 27:45e55c9ab3d0 added z | () [bar] draft - o 21:7bbcf24ddecf added y + o 21:ba11a9f47a2e added y | () [bar] draft - o 15:b006cf317e0e added foo to x + o 15:4e844ab5e814 added foo to x | () [bar] draft - o 10:4ae4427ee9f8 added d + o 10:be5a8b9faa8a added d | () [default] draft - o 9:917281f93fcb added c + o 9:e2ce33033e42 added c | () [default] draft - o 8:171614c9a791 added b + o 8:e7fdc662d630 added b | () [default] draft o 1:c7586e2a9264 added a | () [default] draft @@ -466,20 +538,172 @@ # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 # Branch bar - # Node ID 6fc7d9682de6e3bee6c8b1266b756ed7d522b7e4 - # Parent 7bbcf24ddecfe97d7c2ac6fa8c07c155c8fda47b + # Node ID 45e55c9ab3d0b4746161fcbe5b6c062eb4647fdb + # Parent ba11a9f47a2e4a3380c4d5f80f64de41645a6681 added z - diff -r 7bbcf24ddecf -r 6fc7d9682de6 y + diff -r ba11a9f47a2e -r 45e55c9ab3d0 y --- a/y Thu Jan 01 00:00:00 1970 +0000 +++ b/y Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +1,1 @@ -watbar +foo - diff -r 7bbcf24ddecf -r 6fc7d9682de6 z + diff -r ba11a9f47a2e -r 45e55c9ab3d0 z --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/z Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ +bar + $ hg debugobsolete + b1661037fa25511d0b7ccddf405e336f9d7d3424 7ed0642d644bb9ad93d252dd9ffe7b4729febe48 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + b1661037fa25511d0b7ccddf405e336f9d7d3424 da4b96f4a8d610a85b225583138f681d67e275dd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + da4b96f4a8d610a85b225583138f681d67e275dd 11f849d7159fa30a63dbbc1a6d251a8d996baeb5 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 7ed0642d644bb9ad93d252dd9ffe7b4729febe48 e7fdc662d6305fee2908c3f1630e0b20d6f4689a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + 11f849d7159fa30a63dbbc1a6d251a8d996baeb5 e7fdc662d6305fee2908c3f1630e0b20d6f4689a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + ca1b80f7960aae2306287bab52b4090c59af8c29 e2ce33033e42db2e61a5f71c6dfb52a33efeaf6a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + c41c793e0ef1ddb463e85ea9491e377d01127ba2 be5a8b9faa8af54f115aa168a2c8564acb40c37d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 801b5920c7ea8d4ebdbc9cfc1e79e665dea2f211 5cf74a13db180e33dc2df8cd2aa70b21252a2a64 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '73', 'operation': 'amend', 'user': 'test'} + 801b5920c7ea8d4ebdbc9cfc1e79e665dea2f211 45e15d6e88f5bd23ba360dff0c7591eca2d99f43 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 5cf74a13db180e33dc2df8cd2aa70b21252a2a64 911c21adca136894a2b35f0a58fae7ee94fa5e61 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 45e15d6e88f5bd23ba360dff0c7591eca2d99f43 4e844ab5e8142d26fb1f0990486379f2410b0358 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '73', 'operation': 'evolve', 'user': 'test'} + 911c21adca136894a2b35f0a58fae7ee94fa5e61 4e844ab5e8142d26fb1f0990486379f2410b0358 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + ecf1d3992eb4d9700d441013fc4e89014692b461 9c32d35206fb5c3bf0ac814d410914d54a959a87 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + ecf1d3992eb4d9700d441013fc4e89014692b461 1bb9315961377c18863281be7634ec8ff9b73ea9 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '68', 'operation': 'rebase', 'user': 'test'} + 1bb9315961377c18863281be7634ec8ff9b73ea9 0faa43228ee7fb9c993f076cef7e2ac14c85954b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + 9c32d35206fb5c3bf0ac814d410914d54a959a87 0fc12918c8daa12ca83ce1e2a38e252b063b6276 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 0faa43228ee7fb9c993f076cef7e2ac14c85954b ba11a9f47a2e4a3380c4d5f80f64de41645a6681 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + 0fc12918c8daa12ca83ce1e2a38e252b063b6276 ba11a9f47a2e4a3380c4d5f80f64de41645a6681 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '72', 'operation': 'evolve', 'user': 'test'} + 2048a66e8834bda866dcc8c479f091897816833e 9bc2ace42175da7380251fca97730f62ff5b9185 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + 2048a66e8834bda866dcc8c479f091897816833e ee19d6cc67048a1a7469268068a1413611720975 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '68', 'operation': 'rebase', 'user': 'test'} + ee19d6cc67048a1a7469268068a1413611720975 ad2ec16eca1eac4cf5045b496efa6205652e9a02 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + 9bc2ace42175da7380251fca97730f62ff5b9185 a7326a0785271a7bef2e812a9a742fb4256b4a3c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '12', 'operation': 'evolve', 'user': 'test'} + ad2ec16eca1eac4cf5045b496efa6205652e9a02 45e55c9ab3d0b4746161fcbe5b6c062eb4647fdb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + a7326a0785271a7bef2e812a9a742fb4256b4a3c 45e55c9ab3d0b4746161fcbe5b6c062eb4647fdb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '72', 'operation': 'evolve', 'user': 'test'} + $ hg obslog --all + @ 45e55c9ab3d0 (27) added z + |\ rewritten(branch, content) from a7326a078527 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | amended(content) from ad2ec16eca1e using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | a7326a078527 (26) added z + | | rewritten(parent, content) from 9bc2ace42175 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x ad2ec16eca1e (25) added z + | | amended(content) from ee19d6cc6704 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | 9bc2ace42175 (23) added z + | | amended(content) from 2048a66e8834 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x ee19d6cc6704 (24) added z + |/ rewritten(branch, parent) from 2048a66e8834 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | + x 2048a66e8834 (22) added z + + $ cd .. + +Testing when relocation results in nothing to commit +---------------------------------------------------- + +Set up a repo where relocation results in no changes to commit because the +changes from the relocated node are already in the destination. + + $ hg init nothing-to-commit + $ cd nothing-to-commit + $ echo 0 > a + $ hg ci -Aqm initial + $ echo 1 > a + $ hg ci -Aqm upstream + $ hg prev -q + +Create the source of divergence. + $ echo 0 > b + $ hg ci -Aqm divergent + +The first side of the divergence get rebased on top of upstream. + $ hg rebase -r . -d 'desc("upstream")' + rebasing 2:898ddd4443b3 "divergent" (tip) + $ hg --hidden co 2 -q + updated to hidden changeset 898ddd4443b3 + (hidden revision '898ddd4443b3' was rewritten as: befae6138569) + working directory parent is obsolete! (898ddd4443b3) + +The other side of the divergence gets amended so it matches upstream. +Relocation (onto upstream) will therefore result in no changes to commit. + $ hg revert -r 'desc("upstream")' --all + removing b + reverting a + $ hg amend --config experimental.evolution.allowdivergence=True + 2 new content-divergent changesets + +Add a commit on top. This one should become an orphan. Evolving it later +should put it on top of the other divergent side (the one that's on top of +upstream) + $ echo 0 > c + $ hg ci -Aqm child + $ hg co -q null + $ hg glog + o 5:88473f9137d1 child + | () [default] draft + * 4:4cc21313ecee divergent + | () [default] draft + | * 3:befae6138569 divergent + | | () [default] draft + | o 1:33c576d20069 upstream + |/ () [default] draft + o 0:98a3f8f02ba7 initial + () [default] draft + $ hg evolve --content-divergent + merge:[3] divergent + with: [4] divergent + base: [2] divergent + rebasing "other" content-divergent changeset 4cc21313ecee on 33c576d20069 + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + 1 new orphan changesets + $ hg glog + o 7:cc3d0c6117c7 divergent + | () [default] draft + | * 5:88473f9137d1 child + | | () [default] draft + | x 4:4cc21313ecee divergent + | | () [default] draft + o | 1:33c576d20069 upstream + |/ () [default] draft + o 0:98a3f8f02ba7 initial + () [default] draft + + $ hg evolve --any + move:[5] child + atop:[7] divergent + $ hg glog + o 8:916b4ec3b91f child + | () [default] draft + o 7:cc3d0c6117c7 divergent + | () [default] draft + o 1:33c576d20069 upstream + | () [default] draft + o 0:98a3f8f02ba7 initial + () [default] draft + $ hg debugobsolete + 898ddd4443b3d5520bf48f22f9411d5a0751cf2e befae61385695f1ae4b78b030ad91075b2b523ef 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 898ddd4443b3d5520bf48f22f9411d5a0751cf2e 4cc21313ecee97ce33265514a0596a192bfa6b3f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + 4cc21313ecee97ce33265514a0596a192bfa6b3f bf4fe3a3afeb14c338094f41a35863921856592f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '12', 'operation': 'evolve', 'user': 'test'} + befae61385695f1ae4b78b030ad91075b2b523ef cc3d0c6117c7400995107497370fa4c2138399cd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'evolve', 'user': 'test'} + bf4fe3a3afeb14c338094f41a35863921856592f cc3d0c6117c7400995107497370fa4c2138399cd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + 88473f9137d12e90055d30bbb9b78dd786520870 916b4ec3b91fd03826bd4b179051ae3cee633b56 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + $ hg obslog -r 'desc("divergent")' --all + o cc3d0c6117c7 (7) divergent + |\ amended(content) from befae6138569 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten from bf4fe3a3afeb using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | befae6138569 (3) divergent + | | rebased(parent) from 898ddd4443b3 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x bf4fe3a3afeb (6) divergent + | | rewritten(parent, content) from 4cc21313ecee using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x 4cc21313ecee (4) divergent + |/ amended(content) from 898ddd4443b3 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | + x 898ddd4443b3 (2) divergent + + $ cd .. diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-content-divergent-stack.t --- a/tests/test-evolve-content-divergent-stack.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-content-divergent-stack.t Fri May 08 20:36:29 2020 +0800 @@ -148,28 +148,28 @@ merge:[6] added b with: [10] added b base: [2] added b - rebasing "divergent" content-divergent changeset d5f148423c16 on f66f262fff6c + rebasing "divergent" content-divergent changeset d5f148423c16 on df93a529fa42 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[7] added c with: [11] added c base: [3] added c - rebasing "divergent" content-divergent changeset 3ce4be6d8e5e on eadfd9d70680 + rebasing "divergent" content-divergent changeset 3ce4be6d8e5e on 365f419742a3 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[8] added d with: [12] added d base: [4] added d - rebasing "divergent" content-divergent changeset c72d2885eb51 on b2cac10f3836 + rebasing "divergent" content-divergent changeset c72d2885eb51 on a18171c7d9e7 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at f66f262fff6c + working directory is now at df93a529fa42 $ hg glog - o 19:038fe7db3d88 added d + o 19:59d49942cf47 added d | () [default] draft - o 17:b2cac10f3836 added c + o 17:a18171c7d9e7 added c | () [default] draft - o 15:eadfd9d70680 added b + o 15:365f419742a3 added b | () [default] draft - @ 13:f66f262fff6c watbar to a + @ 13:df93a529fa42 watbar to a | () [default] draft o 0:8fa14d15e168 added hgignore () [default] draft @@ -319,31 +319,31 @@ merge:[11] added b with: [6] added b base: [2] added b - rebasing "divergent" content-divergent changeset 6eb54b5af3fb on 74fbf3e6a0b6 - rebasing "other" content-divergent changeset d5f148423c16 on 74fbf3e6a0b6 + rebasing "divergent" content-divergent changeset 6eb54b5af3fb on ebb749d2ace8 + rebasing "other" content-divergent changeset d5f148423c16 on ebb749d2ace8 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[12] added c with: [7] added c base: [3] added c - rebasing "divergent" content-divergent changeset 8ed612937375 on 4e29776e83a5 - rebasing "other" content-divergent changeset 3ce4be6d8e5e on 4e29776e83a5 + rebasing "divergent" content-divergent changeset 8ed612937375 on 9437917ebe8d + rebasing "other" content-divergent changeset 3ce4be6d8e5e on 9437917ebe8d 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[13] added d with: [8] added d base: [4] added d - rebasing "divergent" content-divergent changeset d45f050514c2 on 77126af93a25 - rebasing "other" content-divergent changeset c72d2885eb51 on 77126af93a25 + rebasing "divergent" content-divergent changeset d45f050514c2 on 8e574c12775a + rebasing "other" content-divergent changeset c72d2885eb51 on 8e574c12775a 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 74fbf3e6a0b6 + working directory is now at ebb749d2ace8 $ hg glog - o 24:c8f73c376a6e added d + o 24:5ab9b88fbead added d | () [default] draft - o 21:77126af93a25 added c + o 21:8e574c12775a added c | () [default] draft - o 18:4e29776e83a5 added b + o 18:9437917ebe8d added b | () [default] draft - @ 15:74fbf3e6a0b6 watbar to a + @ 15:ebb749d2ace8 watbar to a | () [default] draft o 9:2228e3b74514 add newfile | () [default] draft @@ -355,7 +355,7 @@ $ hg strip 14: --hidden 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - saved backup bundle to $TESTTMP/stackrepo1/.hg/strip-backup/74fbf3e6a0b6-f3612603-backup.hg + saved backup bundle to $TESTTMP/stackrepo1/.hg/strip-backup/ebb749d2ace8-0585ef5a-backup.hg 8 new content-divergent changesets Prepare repo to have merge conflicts @@ -368,7 +368,7 @@ rebasing "other" content-divergent changeset 8e222f257bbf on 2228e3b74514 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 6 new orphan changesets - working directory is now at 74fbf3e6a0b6 + working directory is now at ebb749d2ace8 $ echo b_conflict > b $ hg amend -A adding b @@ -378,7 +378,7 @@ merge:[11] added b with: [6] added b base: [2] added b - rebasing "divergent" content-divergent changeset 6eb54b5af3fb on 119989a4317e + rebasing "divergent" content-divergent changeset 6eb54b5af3fb on 73a960350ce9 merging b warning: conflicts while merging b! (edit, then use 'hg resolve --mark') unresolved merge conflicts @@ -391,7 +391,7 @@ continue: hg evolve --continue $ hg evolve --continue evolving 11:6eb54b5af3fb "added b" - rebasing "other" content-divergent changeset d5f148423c16 on 119989a4317e + rebasing "other" content-divergent changeset d5f148423c16 on 73a960350ce9 merging b warning: conflicts while merging b! (edit, then use 'hg resolve --mark') unresolved merge conflicts @@ -408,24 +408,24 @@ merge:[12] added c with: [7] added c base: [3] added c - rebasing "divergent" content-divergent changeset 8ed612937375 on 646bd3372ee7 - rebasing "other" content-divergent changeset 3ce4be6d8e5e on 646bd3372ee7 + rebasing "divergent" content-divergent changeset 8ed612937375 on 1b637ec00f24 + rebasing "other" content-divergent changeset 3ce4be6d8e5e on 1b637ec00f24 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[13] added d with: [8] added d base: [4] added d - rebasing "divergent" content-divergent changeset d45f050514c2 on 67abc597e636 - rebasing "other" content-divergent changeset c72d2885eb51 on 67abc597e636 + rebasing "divergent" content-divergent changeset d45f050514c2 on fbfadbe143d8 + rebasing "other" content-divergent changeset c72d2885eb51 on fbfadbe143d8 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 119989a4317e + working directory is now at 73a960350ce9 $ hg glog - o 25:5e2572194f59 added d + o 25:bf2836f524a3 added d | () [default] draft - o 22:67abc597e636 added c + o 22:fbfadbe143d8 added c | () [default] draft - o 19:646bd3372ee7 added b + o 19:1b637ec00f24 added b | () [default] draft - @ 16:119989a4317e watbar to a + @ 16:73a960350ce9 watbar to a | () [default] draft o 9:2228e3b74514 add newfile | () [default] draft @@ -436,7 +436,7 @@ -------------------------------------------------------------- $ hg strip 14: --hidden 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - saved backup bundle to $TESTTMP/stackrepo1/.hg/strip-backup/74fbf3e6a0b6-15474722-backup.hg + saved backup bundle to $TESTTMP/stackrepo1/.hg/strip-backup/ebb749d2ace8-c2c1e937-backup.hg 8 new content-divergent changesets Insert conflicting changes in between the stack of content-div csets @@ -477,8 +477,8 @@ merge:[14] added b with: [17] added b base: [2] added b - rebasing "divergent" content-divergent changeset 2a955e808c53 on 74fbf3e6a0b6 - rebasing "other" content-divergent changeset 509103439e5e on 74fbf3e6a0b6 + rebasing "divergent" content-divergent changeset 2a955e808c53 on ebb749d2ace8 + rebasing "other" content-divergent changeset 509103439e5e on ebb749d2ace8 merging b warning: conflicts while merging b! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -578,8 +578,8 @@ merge:[14] added b with: [17] added b base: [2] added b - rebasing "divergent" content-divergent changeset 2a955e808c53 on 74fbf3e6a0b6 - rebasing "other" content-divergent changeset 509103439e5e on 74fbf3e6a0b6 + rebasing "divergent" content-divergent changeset 2a955e808c53 on ebb749d2ace8 + rebasing "other" content-divergent changeset 509103439e5e on ebb749d2ace8 merging b warning: conflicts while merging b! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -593,7 +593,7 @@ stopped the interrupted evolve working directory is now at 2a955e808c53 $ hg log -G - o changeset: 21:74fbf3e6a0b6 + o changeset: 21:ebb749d2ace8 | tag: tip | parent: 9:2228e3b74514 | user: test @@ -641,7 +641,7 @@ +---x changeset: 10:c04ff147ef79 | | user: test | | date: Thu Jan 01 00:00:00 1970 +0000 - | | obsolete: rewritten using evolve as 21:74fbf3e6a0b6 + | | obsolete: rewritten using evolve as 21:ebb749d2ace8 | | summary: added a | | o | changeset: 9:2228e3b74514 @@ -654,7 +654,7 @@ |/ parent: 0:8fa14d15e168 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 - | obsolete: rebased using evolve as 21:74fbf3e6a0b6 + | obsolete: rebased using evolve as 21:ebb749d2ace8 | summary: watbar to a | o changeset: 0:8fa14d15e168 @@ -663,35 +663,35 @@ summary: added hgignore $ hg obslog -r 'desc("watbar to a")' --all - o 74fbf3e6a0b6 (21) watbar to a - |\ + o ebb749d2ace8 (21) watbar to a + |\ rewritten from 186bdc2cdfa2 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten(description, content) from c04ff147ef79 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | x | 186bdc2cdfa2 (20) watbar to a - | | rewritten as 74fbf3e6a0b6 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rebased(parent) from 8e222f257bbf using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | | x c04ff147ef79 (10) added a - | | rewritten(description, content) as 74fbf3e6a0b6 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rebased(parent) from c7586e2a9264 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | | x | 8e222f257bbf (5) watbar to a - |/ rebased(parent) as 186bdc2cdfa2 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + |/ rewritten(description, content) from c7586e2a9264 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x c7586e2a9264 (1) added a - rewritten(description, content) as 8e222f257bbf using amend by test (Thu Jan 01 00:00:00 1970 +0000) - rebased(parent) as c04ff147ef79 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) $ hg obslog -r 'desc("added b")' --all @ 2a955e808c53 (14) added b + | amended(content) from 6eb54b5af3fb using amend by test (Thu Jan 01 00:00:00 1970 +0000) | | * 509103439e5e (17) added b + | | amended(content) from d5f148423c16 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | | x | 6eb54b5af3fb (11) added b - | | amended(content) as 2a955e808c53 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | | rebased(parent) from b1661037fa25 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | | | x d5f148423c16 (6) added b - |/ amended(content) as 509103439e5e using amend by test (Thu Jan 01 00:00:00 1970 +0000) + |/ rebased(parent) from b1661037fa25 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | x b1661037fa25 (2) added b - rebased(parent) as 6eb54b5af3fb using rebase by test (Thu Jan 01 00:00:00 1970 +0000) - rebased(parent) as d5f148423c16 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) Again, let's evolve the stack @@ -699,8 +699,8 @@ merge:[14] added b with: [17] added b base: [2] added b - rebasing "divergent" content-divergent changeset 2a955e808c53 on 74fbf3e6a0b6 - rebasing "other" content-divergent changeset 509103439e5e on 74fbf3e6a0b6 + rebasing "divergent" content-divergent changeset 2a955e808c53 on ebb749d2ace8 + rebasing "other" content-divergent changeset 509103439e5e on ebb749d2ace8 merging b warning: conflicts while merging b! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved @@ -716,16 +716,16 @@ merge:[15] added c with: [18] added c base: [3] added c - rebasing "divergent" content-divergent changeset 48b0f803817a on 4e29776e83a5 - rebasing "other" content-divergent changeset eaf34afe4df3 on 4e29776e83a5 + rebasing "divergent" content-divergent changeset 48b0f803817a on 32bceb5bc91e + rebasing "other" content-divergent changeset eaf34afe4df3 on 32bceb5bc91e 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merge:[16] added d with: [19] added d base: [4] added d - rebasing "divergent" content-divergent changeset 91c8ccb9c241 on 77126af93a25 - rebasing "other" content-divergent changeset c351be27f199 on 77126af93a25 + rebasing "divergent" content-divergent changeset 91c8ccb9c241 on a87eb9f90df6 + rebasing "other" content-divergent changeset c351be27f199 on a87eb9f90df6 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 4e29776e83a5 + working directory is now at 32bceb5bc91e $ hg evolve -l @@ -860,8 +860,8 @@ merge:[7] c with: [4] c base: [2] c - rebasing "divergent" content-divergent changeset ef4885dea3da on 0999c349998d - rebasing "other" content-divergent changeset fef59171875e on 0999c349998d + rebasing "divergent" content-divergent changeset ef4885dea3da on 6813d99f0a9d + rebasing "other" content-divergent changeset fef59171875e on 6813d99f0a9d 0 files updated, 0 files merged, 0 files removed, 0 files unresolved Expected result: @@ -869,15 +869,15 @@ Changeset with description "c" only adds file "c" with content "c". $ hg glog -l2 -p - o 12:4ca627f76da9 c - | () [default] draftdiff -r 0999c349998d -r 4ca627f76da9 c + o 12:d5a8159e883f c + | () [default] draftdiff -r 6813d99f0a9d -r d5a8159e883f c | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 | +++ b/c Thu Jan 01 00:00:00 1970 +0000 | @@ -0,0 +1,1 @@ | +c | - o 9:0999c349998d b - | () [default] draftdiff -r 980f7dc84c29 -r 0999c349998d b + o 9:6813d99f0a9d b + | () [default] draftdiff -r 980f7dc84c29 -r 6813d99f0a9d b ~ --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/b Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ @@ -963,16 +963,16 @@ merge:[9] added bar and car with: [5] added bar and car base: [2] added bar and car - rebasing "divergent" content-divergent changeset 7dd5b9d42ef3 on 8ef6ad88580d - rebasing "other" content-divergent changeset f4ed107810a7 on 8ef6ad88580d + rebasing "divergent" content-divergent changeset 7dd5b9d42ef3 on 586526ab82c5 + rebasing "other" content-divergent changeset f4ed107810a7 on 586526ab82c5 0 files updated, 0 files merged, 0 files removed, 0 files unresolved 2 new orphan changesets - working directory is now at 8ef6ad88580d + working directory is now at 586526ab82c5 $ hg glog - o 15:09ba686a465e added bar and car + o 15:e905bb19fd7e added bar and car | () [default] draft - @ 12:8ef6ad88580d added foo + @ 12:586526ab82c5 added foo | () [default] draft | * 10:9a1f460df8b5 added dar | | () [default] draft diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-cycles.t --- a/tests/test-evolve-cycles.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-cycles.t Fri May 08 20:36:29 2020 +0800 @@ -85,10 +85,43 @@ Actual test ----------- -Check that debugobshistory never crash on a cycle +Check that obslog never crashes on a cycle $ hg obslog "desc(A)" --hidden @ 2a34000d3544 (1) A + | rewritten(description, parent, content) from a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + x a8df460dbbfe (3) C + | rewritten(description, parent, content) from c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + x c473644ee0e9 (2) B + | rewritten(description, parent, content) from 2a34000d3544 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + + $ hg obslog "desc(B)" --hidden + @ 2a34000d3544 (1) A + | rewritten(description, parent, content) from a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + x a8df460dbbfe (3) C + | rewritten(description, parent, content) from c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + x c473644ee0e9 (2) B + | rewritten(description, parent, content) from 2a34000d3544 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + + $ hg obslog "desc(C)" --hidden + @ 2a34000d3544 (1) A + | rewritten(description, parent, content) from a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + x a8df460dbbfe (3) C + | rewritten(description, parent, content) from c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + x c473644ee0e9 (2) B + | rewritten(description, parent, content) from 2a34000d3544 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + + $ hg obslog "desc(C)" --hidden --no-origin + @ 2a34000d3544 (1) A | rewritten(description, parent, content) as c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | x a8df460dbbfe (3) C @@ -98,31 +131,20 @@ | rewritten(description, parent, content) as a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) | - $ hg obslog "desc(B)" --hidden +Check that all option doesn't crash on a cycle either + + $ hg obslog "desc(C)" --hidden --all @ 2a34000d3544 (1) A - | rewritten(description, parent, content) as c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | rewritten(description, parent, content) from a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) | x a8df460dbbfe (3) C - | rewritten(description, parent, content) as 2a34000d3544 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | rewritten(description, parent, content) from c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | x c473644ee0e9 (2) B - | rewritten(description, parent, content) as a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | rewritten(description, parent, content) from 2a34000d3544 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | - $ hg obslog "desc(C)" --hidden - @ 2a34000d3544 (1) A - | rewritten(description, parent, content) as c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) - | - x a8df460dbbfe (3) C - | rewritten(description, parent, content) as 2a34000d3544 using prune by test (Thu Jan 01 00:00:00 1970 +0000) - | - x c473644ee0e9 (2) B - | rewritten(description, parent, content) as a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) - | - -Check that all option don't crash on a cycle either - - $ hg obslog "desc(C)" --hidden --all + $ hg obslog "desc(C)" --hidden --all --no-origin @ 2a34000d3544 (1) A | rewritten(description, parent, content) as c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | @@ -248,10 +270,31 @@ Actual test ----------- -Check that debugobshistory never crash on a cycle +Check that obslog never crashes on a cycle $ hg obslog "desc(D)" --hidden x 0da815c333f6 (5) E + | rewritten(description, parent, content) from 868d2e0eb19c using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + @ 868d2e0eb19c (4) D + |\ split(description, parent, content) from a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten(description, parent, content) from d9f908fde1a1 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x d9f908fde1a1 (6) F + | | rewritten(description, parent, content) from 0da815c333f6 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + +---x 2a34000d3544 (1) A + | | split(description, parent, content) from a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | a8df460dbbfe (3) C + | | rewritten(description, parent, content) from c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | c473644ee0e9 (2) B + | | rewritten(description, parent, content) from 2a34000d3544 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + + $ hg obslog "desc(D)" --hidden --no-origin + x 0da815c333f6 (5) E | rewritten(description, parent, content) as d9f908fde1a1 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | @ 868d2e0eb19c (4) D @@ -269,9 +312,32 @@ x | c473644ee0e9 (2) B | | rewritten(description, parent, content) as a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) | | -Check that all option don't crash either on a cycle + +Check that all option doesn't crash on a cycle either + $ hg obslog --all --hidden "desc(F)" x 0da815c333f6 (5) E + | rewritten(description, parent, content) from 868d2e0eb19c using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | + @ 868d2e0eb19c (4) D + |\ split(description, parent, content) from a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten(description, parent, content) from d9f908fde1a1 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x d9f908fde1a1 (6) F + | | rewritten(description, parent, content) from 0da815c333f6 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + +---x 2a34000d3544 (1) A + | | split(description, parent, content) from a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | a8df460dbbfe (3) C + | | rewritten(description, parent, content) from c473644ee0e9 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | c473644ee0e9 (2) B + | | rewritten(description, parent, content) from 2a34000d3544 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + + $ hg obslog --all --hidden --no-origin "desc(F)" + x 0da815c333f6 (5) E | rewritten(description, parent, content) as d9f908fde1a1 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | @ 868d2e0eb19c (4) D @@ -289,6 +355,7 @@ x | c473644ee0e9 (2) B | | rewritten(description, parent, content) as a8df460dbbfe using prune by test (Thu Jan 01 00:00:00 1970 +0000) | | + Check the json output is valid in this case $ hg obslog "desc(D)" --hidden --no-graph -Tjson | python -m json.tool @@ -296,20 +363,49 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "parent", "content" ], - "operation": "prune", - "succnodes": [ - "0da815c333f6364b46c86b0a897c00eb617397b6" + "operations": [ + "prune" + ], + "prednodes": [ + "a8df460dbbfe9ef0c1e5ab4fff02e9514672e379" + ], + "users": [ + "test" ], - "user": "test", + "verb": "split" + }, + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description", + "parent", + "content" + ], + "operations": [ + "prune" + ], + "prednodes": [ + "d9f908fde1a10ad198a462a3ec8b440bb397fc9c" + ], + "users": [ + "test" + ], "verb": "rewritten" } ], @@ -319,20 +415,26 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "parent", "content" ], - "operation": "prune", - "succnodes": [ - "868d2e0eb19c2b55a2894d37e1c435c221384d48" + "operations": [ + "prune" ], - "user": "test", + "prednodes": [ + "0da815c333f6364b46c86b0a897c00eb617397b6" + ], + "users": [ + "test" + ], "verb": "rewritten" } ], @@ -342,20 +444,26 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "parent", "content" ], - "operation": "prune", - "succnodes": [ - "d9f908fde1a10ad198a462a3ec8b440bb397fc9c" + "operations": [ + "prune" ], - "user": "test", + "prednodes": [ + "868d2e0eb19c2b55a2894d37e1c435c221384d48" + ], + "users": [ + "test" + ], "verb": "rewritten" } ], @@ -365,21 +473,205 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description", + "parent", + "content" + ], + "operations": [ + "prune" + ], + "prednodes": [ + "c473644ee0e988d7f537e31423831bbc409f12f7" + ], + "users": [ + "test" + ], + "verb": "rewritten" + } + ], + "node": "a8df460dbbfe9ef0c1e5ab4fff02e9514672e379", + "shortdescription": "C" + }, + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description", + "parent", + "content" + ], + "operations": [ + "prune" + ], + "prednodes": [ + "2a34000d35446022104f7a091c06fe21ff2b5912" + ], + "users": [ + "test" + ], + "verb": "rewritten" + } + ], + "node": "c473644ee0e988d7f537e31423831bbc409f12f7", + "shortdescription": "B" + }, + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "parent", "content" ], - "operation": "prune", + "operations": [ + "prune" + ], + "prednodes": [ + "a8df460dbbfe9ef0c1e5ab4fff02e9514672e379" + ], + "users": [ + "test" + ], + "verb": "split" + } + ], + "node": "2a34000d35446022104f7a091c06fe21ff2b5912", + "shortdescription": "A" + } + ] + + $ hg obslog "desc(D)" --hidden --no-graph --no-origin -Tjson | python -m json.tool + [ + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description", + "parent", + "content" + ], + "operations": [ + "prune" + ], + "succnodes": [ + "0da815c333f6364b46c86b0a897c00eb617397b6" + ], + "users": [ + "test" + ], + "verb": "rewritten" + } + ], + "node": "868d2e0eb19c2b55a2894d37e1c435c221384d48", + "shortdescription": "D" + }, + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description", + "parent", + "content" + ], + "operations": [ + "prune" + ], + "succnodes": [ + "868d2e0eb19c2b55a2894d37e1c435c221384d48" + ], + "users": [ + "test" + ], + "verb": "rewritten" + } + ], + "node": "d9f908fde1a10ad198a462a3ec8b440bb397fc9c", + "shortdescription": "F" + }, + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description", + "parent", + "content" + ], + "operations": [ + "prune" + ], + "succnodes": [ + "d9f908fde1a10ad198a462a3ec8b440bb397fc9c" + ], + "users": [ + "test" + ], + "verb": "rewritten" + } + ], + "node": "0da815c333f6364b46c86b0a897c00eb617397b6", + "shortdescription": "E" + }, + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description", + "parent", + "content" + ], + "operations": [ + "prune" + ], "succnodes": [ "2a34000d35446022104f7a091c06fe21ff2b5912", "868d2e0eb19c2b55a2894d37e1c435c221384d48" ], - "user": "test", + "users": [ + "test" + ], "verb": "split" } ], @@ -389,20 +681,26 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "parent", "content" ], - "operation": "prune", + "operations": [ + "prune" + ], "succnodes": [ "a8df460dbbfe9ef0c1e5ab4fff02e9514672e379" ], - "user": "test", + "users": [ + "test" + ], "verb": "rewritten" } ], @@ -412,20 +710,26 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "parent", "content" ], - "operation": "prune", + "operations": [ + "prune" + ], "succnodes": [ "c473644ee0e988d7f537e31423831bbc409f12f7" ], - "user": "test", + "users": [ + "test" + ], "verb": "rewritten" } ], @@ -433,4 +737,3 @@ "shortdescription": "A" } ] - diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-effectflags.t --- a/tests/test-evolve-effectflags.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-effectflags.t Fri May 08 20:36:29 2020 +0800 @@ -32,9 +32,9 @@ 471f378eab4c5e25f6c77f785b27c936efb22874 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} $ hg obslog . @ fdf9bde5129a (2) A1 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x 471f378eab4c (1) A0 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg log --hidden -r "desc(A0)" changeset: 1:471f378eab4c @@ -56,9 +56,9 @@ ef4a313b1e0ade55718395d80e6b88c5ccd875eb 5485c92d34330dac9d7a63dc07e1e3373835b964 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} $ hg obslog . @ 5485c92d3433 (4) B0 + | reauthored(user) from ef4a313b1e0a using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x ef4a313b1e0a (3) B0 - reauthored(user) as 5485c92d3433 using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg log --hidden -r "ef4a313b1e0a" changeset: 3:ef4a313b1e0a @@ -80,9 +80,9 @@ 2ef0680ff45038ac28c9f1ff3644341f54487280 4dd84345082e9e5291c2e6b3f335bbf8bf389378 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '32', 'operation': 'amend', 'user': 'test'} $ hg obslog . @ 4dd84345082e (6) B1 + | date-changed(date) from 2ef0680ff450 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x 2ef0680ff450 (5) B1 - date-changed(date) as 4dd84345082e using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg log --hidden -r "2ef0680ff450" changeset: 5:2ef0680ff450 @@ -107,9 +107,9 @@ bd3db8264ceebf1966319f5df3be7aac6acd1a8e 14a01456e0574f0e0a0b15b2345486a6364a8d79 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '64', 'operation': 'amend', 'user': 'test'} $ hg obslog . @ 14a01456e057 (8) B2 + | branch-changed(branch) from bd3db8264cee using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x bd3db8264cee (7) B2 - branch-changed(branch) as 14a01456e057 using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg log --hidden -r "bd3db8264cee" changeset: 7:bd3db8264cee @@ -136,9 +136,9 @@ c85eff83a0340efd9da52b806a94c350222f3371 da86aa2f19a30d6686b15cae15c7b6c908ec9699 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} $ hg obslog . @ da86aa2f19a3 (11) D0 + | rebased(parent) from c85eff83a034 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | x c85eff83a034 (10) D0 - rebased(parent) as da86aa2f19a3 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) $ hg log --hidden -r "c85eff83a034" changeset: 10:c85eff83a034 @@ -161,9 +161,9 @@ ebfe0333e0d96f68a917afd97c0a0af87f1c3b5f 75781fdbdbf58a987516b00c980bccda1e9ae588 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} $ hg obslog . @ 75781fdbdbf5 (13) E0 + | amended(content) from ebfe0333e0d9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x ebfe0333e0d9 (12) E0 - amended(content) as 75781fdbdbf5 using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg log --hidden -r "ebfe0333e0d9" changeset: 12:ebfe0333e0d9 @@ -187,9 +187,9 @@ fad47e5bd78e6aa4db1b5a0a1751bc12563655ff a94e0fd5f1c81d969381a76eb0d37ce499a44fae 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '113', 'operation': 'amend', 'user': 'test'} $ hg obslog . @ a94e0fd5f1c8 (15) F1 + | rewritten(description, user, date, branch) from fad47e5bd78e using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x fad47e5bd78e (14) F0 - rewritten(description, user, date, branch) as a94e0fd5f1c8 using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg log --hidden -r "fad47e5bd78e" changeset: 14:fad47e5bd78e @@ -240,11 +240,20 @@ $ hg rebase -s "desc(H1)" -d "desc(H2)" -t :merge3 rebasing 17:b57fed8d8322 "H1" merging H0 + $ hg debugobsolete + 471f378eab4c5e25f6c77f785b27c936efb22874 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} + ef4a313b1e0ade55718395d80e6b88c5ccd875eb 5485c92d34330dac9d7a63dc07e1e3373835b964 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} + 2ef0680ff45038ac28c9f1ff3644341f54487280 4dd84345082e9e5291c2e6b3f335bbf8bf389378 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '32', 'operation': 'amend', 'user': 'test'} + bd3db8264ceebf1966319f5df3be7aac6acd1a8e 14a01456e0574f0e0a0b15b2345486a6364a8d79 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '64', 'operation': 'amend', 'user': 'test'} + c85eff83a0340efd9da52b806a94c350222f3371 da86aa2f19a30d6686b15cae15c7b6c908ec9699 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + ebfe0333e0d96f68a917afd97c0a0af87f1c3b5f 75781fdbdbf58a987516b00c980bccda1e9ae588 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + fad47e5bd78e6aa4db1b5a0a1751bc12563655ff a94e0fd5f1c81d969381a76eb0d37ce499a44fae 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '113', 'operation': 'amend', 'user': 'test'} + b57fed8d83228a8ae3748d8c3760a77638dd4f8c e509e2eb3df5d131ff7c02350bf2a9edd0c09478 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} $ hg obslog tip o e509e2eb3df5 (19) H1 + | rebased(parent) from b57fed8d8322 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | x b57fed8d8322 (17) H1 - rebased(parent) as e509e2eb3df5 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) $ hg log --hidden -r "b57fed8d8322" changeset: 17:b57fed8d8322 @@ -267,9 +276,9 @@ $ hg obslog . @ 12c6238b5e37 (22) I0 + | meta-changed(meta) from 2f599e54c1c6 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x 2f599e54c1c6 (21) I0 - meta-changed(meta) as 12c6238b5e37 using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg log --hidden -r "2f599e54c1c6" changeset: 21:2f599e54c1c6 diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-interrupted.t --- a/tests/test-evolve-interrupted.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-interrupted.t Fri May 08 20:36:29 2020 +0800 @@ -89,9 +89,8 @@ $ hg evolve --abort evolve aborted working directory is now at e1989e4b1526 - $ ls .hg/evolvestate - ls: cannot access '?.hg/evolvestate'?: No such file or directory (re) - [2] + $ test -f .hg/evolvestate + [1] $ cat b blueberry $ hg l diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-issue5958.t --- a/tests/test-evolve-issue5958.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-issue5958.t Fri May 08 20:36:29 2020 +0800 @@ -61,23 +61,29 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: add r0 + $ hg debugobsolete + cc71ffbc7c002d7b45fb694f9c060bf2e6920672 0065551bd38fe59ea4a069a4db378550c60122d3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '32', 'operation': 'metaedit', 'user': 'test'} + 0065551bd38fe59ea4a069a4db378550c60122d3 a25dd7af6cf6731ff93708abb2b1b889eae848a0 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + cc71ffbc7c002d7b45fb694f9c060bf2e6920672 c17bf400a2782394b1ca5fbbe59e30494f16dfdc 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '32', 'operation': 'metaedit', 'user': 'test'} + a25dd7af6cf6731ff93708abb2b1b889eae848a0 1d1fc409af989f5c0843507e202d69a1ad16c5ef 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + 1d1fc409af989f5c0843507e202d69a1ad16c5ef 08bc7ba82799f1e419190b0dac1b0e1c4b1355f9 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '12', 'operation': 'rebase', 'user': 'test'} $ hg obslog -a -r . @ 08bc7ba82799 (6) add foo.txt + | rewritten(parent, content) from 1d1fc409af98 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | | * c17bf400a278 (4) add foo.txt + | | date-changed(date) from cc71ffbc7c00 using metaedit by test (Thu Jan 01 00:00:00 1970 +0000) | | x | 1d1fc409af98 (5) add foo.txt - | | rewritten(parent, content) as 08bc7ba82799 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | | amended(content) from a25dd7af6cf6 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | | x | a25dd7af6cf6 (3) add foo.txt - | | amended(content) as 1d1fc409af98 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | | amended(content) from 0065551bd38f using amend by test (Thu Jan 01 00:00:00 1970 +0000) | | x | 0065551bd38f (2) add foo.txt - |/ amended(content) as a25dd7af6cf6 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + |/ date-changed(date) from cc71ffbc7c00 using metaedit by test (Thu Jan 01 00:00:00 1970 +0000) | x cc71ffbc7c00 (1) add foo.txt - date-changed(date) as 0065551bd38f using metaedit by test (Thu Jan 01 00:00:00 1970 +0000) - date-changed(date) as c17bf400a278 using metaedit by test (Thu Jan 01 00:00:00 1970 +0000) $ hg evolve --content-divergent merge:[6] add foo.txt @@ -85,4 +91,4 @@ base: [1] add foo.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved 1 new orphan changesets - working directory is now at 459c64f7eaad + working directory is now at 5899f25049de diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-issue5967.t --- a/tests/test-evolve-issue5967.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-issue5967.t Fri May 08 20:36:29 2020 +0800 @@ -62,11 +62,14 @@ This is important: 1 should not have a successor (especially not revision 2) + $ hg debugobsolete + 3ba7db0ce860a189d1fd1fd7675f0e871652ed16 4d6fec23dcc4c3e4ccce8b1d3b79f62ee927c2be 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + dd9b5dd30cd6b703d126d55b34165fd6ec5717c9 0 {3ba7db0ce860a189d1fd1fd7675f0e871652ed16} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} $ hg olog --all @ 4d6fec23dcc4 (2) apricot + | rewritten(description, content) from 3ba7db0ce860 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x 3ba7db0ce860 (0) apple - rewritten(description, content) as 4d6fec23dcc4 using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg olog --hidden --all 1 x dd9b5dd30cd6 (1) banana diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-issue6097.t --- a/tests/test-evolve-issue6097.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-issue6097.t Fri May 08 20:36:29 2020 +0800 @@ -61,14 +61,18 @@ summary: apricot + $ hg debugobsolete + 692cc7b6212c102a9eafcf04ed2e4bfca5023754 32acf8fb1b2325c727135dcd65153745a031a125 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 32acf8fb1b2325c727135dcd65153745a031a125 2868fe6df617a3045cf668e4ab1c486a8692abd1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '12', 'operation': 'rebase', 'user': 'test'} + e0486f65907dac7107e72a247386845e6a9fd83b 0 {692cc7b6212c102a9eafcf04ed2e4bfca5023754} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'} $ hg obslog @ 2868fe6df617 (3) apricot and coconut + | rewritten(parent, content) from 32acf8fb1b23 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | x 32acf8fb1b23 (2) apricot and coconut - | rewritten(parent, content) as 2868fe6df617 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | rewritten(description, content) from 692cc7b6212c using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x 692cc7b6212c (0) apricot - rewritten(description, content) as 32acf8fb1b23 using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg evolve -r . @@ -85,15 +89,20 @@ summary: apricot and coconut + $ hg debugobsolete + 692cc7b6212c102a9eafcf04ed2e4bfca5023754 32acf8fb1b2325c727135dcd65153745a031a125 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 32acf8fb1b2325c727135dcd65153745a031a125 2868fe6df617a3045cf668e4ab1c486a8692abd1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '12', 'operation': 'rebase', 'user': 'test'} + e0486f65907dac7107e72a247386845e6a9fd83b 0 {692cc7b6212c102a9eafcf04ed2e4bfca5023754} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'} + 2868fe6df617a3045cf668e4ab1c486a8692abd1 bb847d1d3a5f3de90f4fd5e845b69d848568401a 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} $ hg obslog @ bb847d1d3a5f (4) apricot and coconut + | rebased(parent) from 2868fe6df617 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | x 2868fe6df617 (3) apricot and coconut - | rebased(parent) as bb847d1d3a5f using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | rewritten(parent, content) from 32acf8fb1b23 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | x 32acf8fb1b23 (2) apricot and coconut - | rewritten(parent, content) as 2868fe6df617 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | rewritten(description, content) from 692cc7b6212c using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x 692cc7b6212c (0) apricot - rewritten(description, content) as 32acf8fb1b23 using amend by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory-amend-then-fold.t --- a/tests/test-evolve-obshistory-amend-then-fold.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory-amend-then-fold.t Fri May 08 20:36:29 2020 +0800 @@ -1,5 +1,4 @@ -This test file test the various messages when accessing obsolete -revisions. +Testing obslog and other commands accessing obsolete revisions. Global setup ============ @@ -80,8 +79,8 @@ Actual test ----------- -Check that debugobshistory on head show a coherent graph - $ hg obslog eb5a0daa2192 --patch +Check that obslog on head shows a coherent graph + $ hg obslog eb5a0daa2192 --patch --no-origin @ eb5a0daa2192 (4) C0 |\ x | 471f378eab4c (1) A0 @@ -114,8 +113,27 @@ +B1 -Check that obslog on ROOT with all option show everything - $ hg obslog 1 --hidden --all --patch + $ hg obslog eb5a0daa2192 --patch + @ eb5a0daa2192 (4) C0 + |\ folded(description, parent, content) from 471f378eab4c, b7ea6d14e664 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | | (No patch available, too many predecessors (2)) + | | + x | 471f378eab4c (1) A0 + / + x b7ea6d14e664 (3) B1 + | reworded(description) from 0dec01379d3b using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 0dec01379d3b -r b7ea6d14e664 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -B0 + | +B1 + | + | + x 0dec01379d3b (2) B0 + +Check that obslog on A0 with all option shows everything + $ hg obslog 1 --hidden --all --patch --no-origin @ eb5a0daa2192 (4) C0 |\ x | 471f378eab4c (1) A0 @@ -148,7 +166,26 @@ +B1 - $ hg obslog eb5a0daa2192 --no-graph -Tjson | python -m json.tool + $ hg obslog 1 --hidden --all --patch + @ eb5a0daa2192 (4) C0 + |\ folded(description, parent, content) from 471f378eab4c, b7ea6d14e664 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | | (No patch available, too many predecessors (2)) + | | + x | 471f378eab4c (1) A0 + / + x b7ea6d14e664 (3) B1 + | reworded(description) from 0dec01379d3b using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 0dec01379d3b -r b7ea6d14e664 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -B0 + | +B1 + | + | + x 0dec01379d3b (2) B0 + + $ hg obslog eb5a0daa2192 --no-graph --no-origin -Tjson | python -m json.tool [ { "markers": [], @@ -158,20 +195,26 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ *, (glob) *, (glob) "content" ], - "operation": "fold", + "operations": [ + "fold" + ], "succnodes": [ "eb5a0daa21923bbf8caeb2c42085b9e463861fd0" ], - "user": "test", + "users": [ + "test" + ], "verb": "folded" } ], @@ -181,18 +224,24 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description" ], - "operation": "amend", + "operations": [ + "amend" + ], "succnodes": [ "b7ea6d14e664bdc8922221f7992631b50da3fb07" ], - "user": "test", + "users": [ + "test" + ], "verb": "reworded" } ], @@ -202,19 +251,25 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "content" ], - "operation": "fold", + "operations": [ + "fold" + ], "succnodes": [ "eb5a0daa21923bbf8caeb2c42085b9e463861fd0" ], - "user": "test", + "users": [ + "test" + ], "verb": "folded" } ], @@ -222,6 +277,80 @@ "shortdescription": "A0" } ] + $ hg obslog eb5a0daa2192 --no-graph -Tjson | python -m json.tool + [ + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ], + [ + *, (glob) + 0 + ] + ], + "effects": [ + *, (glob) + *, (glob) + "content" + ], + "operations": [ + "fold" + ], + "prednodes": [ + "471f378eab4c5e25f6c77f785b27c936efb22874", + "b7ea6d14e664bdc8922221f7992631b50da3fb07" + ], + "users": [ + "test" + ], + "verb": "folded" + } + ], + "node": "eb5a0daa21923bbf8caeb2c42085b9e463861fd0", + "shortdescription": "C0" + }, + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description" + ], + "operations": [ + "amend" + ], + "prednodes": [ + "0dec01379d3be6318c470ead31b1fe7ae7cb53d5" + ], + "users": [ + "test" + ], + "verb": "reworded" + } + ], + "node": "b7ea6d14e664bdc8922221f7992631b50da3fb07", + "shortdescription": "B1" + }, + { + "markers": [], + "node": "0dec01379d3be6318c470ead31b1fe7ae7cb53d5", + "shortdescription": "B0" + }, + { + "markers": [], + "node": "471f378eab4c5e25f6c77f785b27c936efb22874", + "shortdescription": "A0" + } + ] $ hg update 471f378eab4c abort: hidden revision '471f378eab4c' was rewritten as: eb5a0daa2192! (use --hidden to access hidden revisions) diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory-amend.t --- a/tests/test-evolve-obshistory-amend.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory-amend.t Fri May 08 20:36:29 2020 +0800 @@ -1,12 +1,10 @@ -This test file test the various messages when accessing obsolete -revisions. +Testing obslog and other commands accessing obsolete revisions. Global setup ============ $ . $TESTDIR/testlib/obshistory_setup.sh - Test output on amended commit ============================= @@ -47,54 +45,52 @@ ------------------------------- $ hg obslog --patch 4ae3a4151de9 @ 4ae3a4151de9 (2) A1 + | rewritten(description, content) from 471f378eab4c using amend by test (*) (glob) + | diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,3 @@ + | -A0 + | +A1 + | + + | +Better commit message + | + | diff -r 471f378eab4c -r 4ae3a4151de9 A0 + | --- a/A0 Thu Jan 01 00:00:00 1970 +0000 + | +++ b/A0 Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +1,2 @@ + | A0 + | +42 + | | x 471f378eab4c (1) A0 - rewritten(description, content) as 4ae3a4151de9 using amend by test (*) (glob) - diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,3 @@ - -A0 - +A1 - + - +Better commit message - - diff -r 471f378eab4c -r 4ae3a4151de9 A0 - --- a/A0 Thu Jan 01 00:00:00 1970 +0000 - +++ b/A0 Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,2 @@ - A0 - +42 - $ hg obslog --patch --color debug @ [evolve.node|4ae3a4151de9] [evolve.rev|(2)] [evolve.short_description|A1] + | [evolve.verb|rewritten](description, content) from [evolve.node|471f378eab4c] using [evolve.operation|amend] by [evolve.user|test] [evolve.date|(Thu Jan 01 00:00:00 1970 +0000)] + | [diff.diffline|diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description] + | [diff.file_a|--- a/changeset-description] + | [diff.file_b|+++ b/changeset-description] + | [diff.hunk|@@ -1,1 +1,3 @@] + | [diff.deleted|-A0] + | [diff.inserted|+A1] + | [diff.inserted|+] + | [diff.inserted|+Better commit message] + | + | [diff.diffline|diff -r 471f378eab4c -r 4ae3a4151de9 A0] + | [diff.file_a|--- a/A0 Thu Jan 01 00:00:00 1970 +0000] + | [diff.file_b|+++ b/A0 Thu Jan 01 00:00:00 1970 +0000] + | [diff.hunk|@@ -1,1 +1,2 @@] + | A0 + | [diff.inserted|+42] + | | x [evolve.node|471f378eab4c] [evolve.rev|(1)] [evolve.short_description|A0] - [evolve.verb|rewritten](description, content) as [evolve.node|4ae3a4151de9] using [evolve.operation|amend] by [evolve.user|test] [evolve.date|(Thu Jan 01 00:00:00 1970 +0000)] - [diff.diffline|diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description] - [diff.file_a|--- a/changeset-description] - [diff.file_b|+++ b/changeset-description] - [diff.hunk|@@ -1,1 +1,3 @@] - [diff.deleted|-A0] - [diff.inserted|+A1] - [diff.inserted|+] - [diff.inserted|+Better commit message] - - [diff.diffline|diff -r 471f378eab4c -r 4ae3a4151de9 A0] - [diff.file_a|--- a/A0 Thu Jan 01 00:00:00 1970 +0000] - [diff.file_b|+++ b/A0 Thu Jan 01 00:00:00 1970 +0000] - [diff.hunk|@@ -1,1 +1,2 @@] - A0 - [diff.inserted|+42] - $ hg obslog --no-graph --patch 4ae3a4151de9 4ae3a4151de9 (2) A1 - - 471f378eab4c (1) A0 - rewritten(description, content) as 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + rewritten(description, content) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description --- a/changeset-description +++ b/changeset-description @@ -112,106 +108,90 @@ +42 + 471f378eab4c (1) A0 + Test that content diff works with templating $ hg obslog --color=debug --patch 4ae3a4151de9 \ > -T '{node|short} {desc|firstline}\n{markers % "patch:\n```{patch}```\n"}' @ 4ae3a4151de9 A1 - | + | patch: + | ``` + | [diff.diffline|diff -r 471f378eab4c -r 4ae3a4151de9 A0] + | [diff.file_a|--- a/A0 Thu Jan 01 00:00:00 1970 +0000] + | [diff.file_b|+++ b/A0 Thu Jan 01 00:00:00 1970 +0000] + | [diff.hunk|@@ -1,1 +1,2 @@] + | A0 + | [diff.inserted|+42] + | ``` x 471f378eab4c A0 - patch: - ``` - [diff.diffline|diff -r 471f378eab4c -r 4ae3a4151de9 A0] - [diff.file_a|--- a/A0 Thu Jan 01 00:00:00 1970 +0000] - [diff.file_b|+++ b/A0 Thu Jan 01 00:00:00 1970 +0000] - [diff.hunk|@@ -1,1 +1,2 @@] - A0 - [diff.inserted|+42] - ``` + - $ hg obslog 4ae3a4151de9 --graph -T'{label("log.summary", desc|firstline)} {if(markers, join(markers % "at {date|hgdate} by {user|person} ", " also "))}' + $ hg obslog 4ae3a4151de9 --graph --no-origin -T'{label("log.summary", desc|firstline)} {if(markers, join(markers % "at {date|hgdate} by {user|person} ", " also "))}' @ A1 | x A0 at 0 0 by test + $ hg obslog 4ae3a4151de9 --graph -T'{label("log.summary", desc|firstline)} {if(markers, join(markers % "at {date|hgdate} by {user|person} ", " also "))}' + @ A1 at 0 0 by test + | + x A0 + Check that the same thing works with the old {shortdescription} form - $ hg obslog 4ae3a4151de9 --graph -T'{label("log.summary", shortdescription)} {if(markers, join(markers % "at {date|hgdate} by {user|person} ", " also "))}' + $ hg obslog 4ae3a4151de9 --graph --no-origin -T'{label("log.summary", shortdescription)} {if(markers, join(markers % "at {date|hgdate} by {user|person} ", " also "))}' @ A1 | x A0 at 0 0 by test + $ hg obslog 4ae3a4151de9 --graph -T'{label("log.summary", shortdescription)} {if(markers, join(markers % "at {date|hgdate} by {user|person} ", " also "))}' + @ A1 at 0 0 by test + | + x A0 + $ hg obslog 4ae3a4151de9 --no-graph -Tjson | python -m json.tool [ { - "markers": [], - "node": "4ae3a4151de9aa872113f0b196e28323308981e8", - "shortdescription": "A1" - }, - { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "content" ], - "operation": "amend", - "succnodes": [ - "4ae3a4151de9aa872113f0b196e28323308981e8" + "operations": [ + "amend" ], - "user": "test", + "prednodes": [ + "471f378eab4c5e25f6c77f785b27c936efb22874" + ], + "users": [ + "test" + ], "verb": "rewritten" } ], + "node": "4ae3a4151de9aa872113f0b196e28323308981e8", + "shortdescription": "A1" + }, + { + "markers": [], "node": "471f378eab4c5e25f6c77f785b27c936efb22874", "shortdescription": "A0" } ] $ hg obslog --hidden --patch 471f378eab4c x 471f378eab4c (1) A0 - rewritten(description, content) as 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,3 @@ - -A0 - +A1 - + - +Better commit message - - diff -r 471f378eab4c -r 4ae3a4151de9 A0 - --- a/A0 Thu Jan 01 00:00:00 1970 +0000 - +++ b/A0 Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,2 @@ - A0 - +42 - $ hg obslog --hidden 471f378eab4c --no-graph -Tjson | python -m json.tool [ { - "markers": [ - { - "date": [ - *, (glob) - 0 - ], - "effects": [ - *, (glob) - "content" - ], - "operation": "amend", - "succnodes": [ - "4ae3a4151de9aa872113f0b196e28323308981e8" - ], - "user": "test", - "verb": "rewritten" - } - ], + "markers": [], "node": "471f378eab4c5e25f6c77f785b27c936efb22874", "shortdescription": "A0" } @@ -230,30 +210,46 @@ Check output on the server side ------------------------------- - $ hg obslog -R $TESTTMP/server --patch 4ae3a4151de9 + $ hg obslog -R $TESTTMP/server --patch 4ae3a4151de9 --no-origin o 4ae3a4151de9 (1) A1 | x 471f378eab4c rewritten(description, content) as 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) (No patch available, context is not local) - $ hg obslog -R $TESTTMP/server -f --patch 4ae3a4151de9 + $ hg obslog -R $TESTTMP/server --patch 4ae3a4151de9 o 4ae3a4151de9 (1) A1 + | rewritten(description, content) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, predecessor is unknown locally) + | + x 471f378eab4c - $ hg obslog -R $TESTTMP/server --no-graph --patch 4ae3a4151de9 + $ hg obslog -R $TESTTMP/server --no-graph --patch 4ae3a4151de9 --no-origin 4ae3a4151de9 (1) A1 471f378eab4c rewritten(description, content) as 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) (No patch available, context is not local) + $ hg obslog -R $TESTTMP/server --no-graph --patch 4ae3a4151de9 + 4ae3a4151de9 (1) A1 + rewritten(description, content) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + (No patch available, predecessor is unknown locally) + + 471f378eab4c + - $ hg obslog -R $TESTTMP/server --no-graph -f --patch 4ae3a4151de9 + $ hg obslog -R $TESTTMP/server -f --patch 4ae3a4151de9 --no-origin + o 4ae3a4151de9 (1) A1 + + $ hg obslog -R $TESTTMP/server -f --patch 4ae3a4151de9 + o 4ae3a4151de9 (1) A1 + + $ hg obslog -R $TESTTMP/server --no-graph -f --patch 4ae3a4151de9 --no-origin 4ae3a4151de9 (1) A1 - 471f378eab4c - rewritten(description, content) as 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, context is not local) + $ hg obslog -R $TESTTMP/server --no-graph -f --patch 4ae3a4151de9 + 4ae3a4151de9 (1) A1 Amend two more times @@ -285,7 +281,7 @@ $ hg amend -m "A2 > > Better better commit message" - $ hg amend -m "A3 + $ hg amend --config devel.default-date='1 0' -m "A3 > > Better better better commit message" $ sync @@ -327,9 +323,7 @@ $ hg obslog --patch 92210308515b @ 92210308515b (4) A3 - | - x 4f1685185907 (3) A2 - | reworded(description) as 92210308515b using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | reworded(description) from 4f1685185907 using amend by test (Thu Jan 01 00:00:01 1970 +0000) | diff -r 4f1685185907 -r 92210308515b changeset-description | --- a/changeset-description | +++ b/changeset-description @@ -341,8 +335,8 @@ | +Better better better commit message | | - x 4ae3a4151de9 (2) A1 - | reworded(description) as 4f1685185907 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + x 4f1685185907 (3) A2 + | reworded(description) from 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | diff -r 4ae3a4151de9 -r 4f1685185907 changeset-description | --- a/changeset-description | +++ b/changeset-description @@ -354,31 +348,31 @@ | +Better better commit message | | + x 4ae3a4151de9 (2) A1 + | rewritten(description, content) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,3 @@ + | -A0 + | +A1 + | + + | +Better commit message + | + | diff -r 471f378eab4c -r 4ae3a4151de9 A0 + | --- a/A0 Thu Jan 01 00:00:00 1970 +0000 + | +++ b/A0 Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +1,2 @@ + | A0 + | +42 + | + | x 471f378eab4c (1) A0 - rewritten(description, content) as 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,3 @@ - -A0 - +A1 - + - +Better commit message - - diff -r 471f378eab4c -r 4ae3a4151de9 A0 - --- a/A0 Thu Jan 01 00:00:00 1970 +0000 - +++ b/A0 Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,2 @@ - A0 - +42 - Test that description diff works with templating $ hg obslog --color=debug --patch 92210308515b \ > -T '{node|short} {desc|firstline}\n{markers % "description diff:\n```{descdiff}```\n"}' @ 92210308515b A3 - | - x 4f1685185907 A2 | description diff: | ``` | [diff.diffline|diff -r 4f1685185907 -r 92210308515b changeset-description] @@ -391,7 +385,7 @@ | [diff.deleted|-Better better commit message] | [diff.inserted|+Better better better commit message] | ``` - x 4ae3a4151de9 A1 + x 4f1685185907 A2 | description diff: | ``` | [diff.diffline|diff -r 4ae3a4151de9 -r 4f1685185907 changeset-description] @@ -404,81 +398,83 @@ | [diff.deleted|-Better commit message] | [diff.inserted|+Better better commit message] | ``` + x 4ae3a4151de9 A1 + | description diff: + | ``` + | [diff.diffline|diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description] + | [diff.file_a|--- a/changeset-description] + | [diff.file_b|+++ b/changeset-description] + | [diff.hunk|@@ -1,1 +1,3 @@] + | [diff.deleted|-A0] + | [diff.inserted|+A1] + | [diff.inserted|+] + | [diff.inserted|+Better commit message] + | ``` x 471f378eab4c A0 - description diff: - ``` - [diff.diffline|diff -r 471f378eab4c -r 4ae3a4151de9 changeset-description] - [diff.file_a|--- a/changeset-description] - [diff.file_b|+++ b/changeset-description] - [diff.hunk|@@ -1,1 +1,3 @@] - [diff.deleted|-A0] - [diff.inserted|+A1] - [diff.inserted|+] - [diff.inserted|+Better commit message] - ``` + Check the output on the server ------------------------------ $ hg obslog -R $TESTTMP/server --patch 92210308515b o 92210308515b (2) A3 + | reworded(description) from 4f1685185907 using amend by test (Thu Jan 01 00:00:01 1970 +0000) + | (No patch available, predecessor is unknown locally) | x 4f1685185907 - | reworded(description) as 92210308515b using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | reworded(description) from 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | (No patch available, context is not local) | x 4ae3a4151de9 (1) A1 - | reworded(description) as 4f1685185907 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - | (No patch available, successor is unknown locally) + | rewritten(description, content) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, predecessor is unknown locally) | x 471f378eab4c - rewritten(description, content) as 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, context is not local) $ hg obslog -R $TESTTMP/server -f --patch 92210308515b o 92210308515b (2) A3 + | reworded(description) from 4ae3a4151de9 using amend by test (between Thu Jan 01 00:00:00 1970 +0000 and Thu Jan 01 00:00:01 1970 +0000) + | diff -r 4ae3a4151de9 -r 92210308515b changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,3 +1,3 @@ + | -A1 + | +A3 + | + | -Better commit message + | +Better better better commit message + | | x 4ae3a4151de9 (1) A1 - reworded(description) as 92210308515b using amend by test (at Thu Jan 01 00:00:00 1970 +0000) - diff -r 4ae3a4151de9 -r 92210308515b changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,3 +1,3 @@ - -A1 - +A3 - - -Better commit message - +Better better better commit message - $ hg obslog -R $TESTTMP/server --no-graph --patch 92210308515b 92210308515b (2) A3 + reworded(description) from 4f1685185907 using amend by test (Thu Jan 01 00:00:01 1970 +0000) + (No patch available, predecessor is unknown locally) 4f1685185907 - reworded(description) as 92210308515b using amend by test (Thu Jan 01 00:00:00 1970 +0000) + reworded(description) from 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) (No patch available, context is not local) 4ae3a4151de9 (1) A1 - reworded(description) as 4f1685185907 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, successor is unknown locally) + rewritten(description, content) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + (No patch available, predecessor is unknown locally) 471f378eab4c - rewritten(description, content) as 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, context is not local) - $ hg obslog -R $TESTTMP/server --no-graph -f --patch 92210308515b 92210308515b (2) A3 - - 4f1685185907 - reworded(description) as 92210308515b using amend by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, context is not local) + reworded(description) from 4ae3a4151de9 using amend by test (between Thu Jan 01 00:00:00 1970 +0000 and Thu Jan 01 00:00:01 1970 +0000) + diff -r 4ae3a4151de9 -r 92210308515b changeset-description + --- a/changeset-description + +++ b/changeset-description + @@ -1,3 +1,3 @@ + -A1 + +A3 + + -Better commit message + +Better better better commit message + 4ae3a4151de9 (1) A1 - reworded(description) as 4f1685185907 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, successor is unknown locally) - 471f378eab4c - rewritten(description, content) as 4ae3a4151de9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, context is not local) - diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory-complex.t --- a/tests/test-evolve-obshistory-complex.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory-complex.t Fri May 08 20:36:29 2020 +0800 @@ -1,15 +1,9 @@ +Testing obslog and other commands accessing obsolete revisions. + Global setup ============ - $ . $TESTDIR/testlib/common.sh - $ cat >> $HGRCPATH < [ui] - > interactive = true - > [phases] - > publish=False - > [extensions] - > evolve = - > EOF + $ . $TESTDIR/testlib/obshistory_setup.sh Test obslog with split + fold + split ===================================== @@ -76,14 +70,12 @@ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg obslog -r . @ 100cc25b765f (9) fold2 - |\ + |\ folded(description, parent, content) from 0da815c333f6, d9f908fde1a1 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | | note: folding changesets to test + | | x | 0da815c333f6 (5) E - / folded(description, content) as 100cc25b765f using fold by test (Thu Jan 01 00:00:00 1970 +0000) - | note: folding changesets to test - | + / x d9f908fde1a1 (6) F - folded(description, parent, content) as 100cc25b765f using fold by test (Thu Jan 01 00:00:00 1970 +0000) - note: folding changesets to test $ hg log -G @ changeset: 9:100cc25b765f @@ -380,11 +372,34 @@ Actual Test =========== -Obslog should show a subset of the obs history, this test check that the +Obslog should show a subset of the obs history, this test checks that the walking algorithm works no matter the level of successors + precursors $ hg obslog 12 * 7b3290f6e0a0 (12) fold1 + |\ split(parent, content) from d15d0ffc75f6 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | | rewritten(description, parent, content) from e036916b63ea using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | d15d0ffc75f6 (8) fold1 + |\ \ folded(description, parent, content) from 868d2e0eb19c, a8df460dbbfe using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | | | + | | x e036916b63ea (11) fold0 + | | | split(parent, content) from b868bc49b0a4 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | | | + x | | 868d2e0eb19c (4) D + / / + x / a8df460dbbfe (3) C + / + x b868bc49b0a4 (7) fold0 + |\ folded(description, parent, content) from 2a34000d3544, c473644ee0e9 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | 2a34000d3544 (1) A + / + x c473644ee0e9 (2) B + + + $ hg obslog 12 --no-origin + * 7b3290f6e0a0 (12) fold1 |\ x | d15d0ffc75f6 (8) fold1 |\ \ split(parent, content) as 7b3290f6e0a0, d0f33db50670 using split by test (Thu Jan 01 00:00:00 1970 +0000) @@ -411,46 +426,45 @@ $ hg obslog --all 15 o 19e14c8397fc (10) fold0 + | split(parent, content) from b868bc49b0a4 using split by test (Thu Jan 01 00:00:00 1970 +0000) | | * 7b3290f6e0a0 (12) fold1 - | |\ + | |\ split(parent, content) from d15d0ffc75f6 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | | | rewritten(description, parent, content) from e036916b63ea using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | | | | | @ d4a000f63ee9 (15) fold2 + | | | | split(parent, content) from 100cc25b765f using split by test (Thu Jan 01 00:00:00 1970 +0000) | | | | | | | | * ec31316faa9d (14) fold2 - | | | |/| + | | | |/| split(parent, content) from 100cc25b765f using split by test (Thu Jan 01 00:00:00 1970 +0000) + | | | | | rewritten(description, parent, content) from d0f33db50670 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | | | | note: this is a note stored in obsmarker in prune + | | | | | | | | x | 100cc25b765f (9) fold2 - | | | |\ \ split(parent, content) as d4a000f63ee9, ec31316faa9d using split by test (Thu Jan 01 00:00:00 1970 +0000) + | | | |\ \ folded(description, parent, content) from 0da815c333f6, d9f908fde1a1 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | | | | | | note: folding changesets to test | | | | | | | +-------x d0f33db50670 (13) fold1 - | | | | | rewritten(description, parent, content) as ec31316faa9d using prune by test (Thu Jan 01 00:00:00 1970 +0000) - | | | | | note: this is a note stored in obsmarker in prune + | | | | | split(parent, content) from d15d0ffc75f6 using split by test (Thu Jan 01 00:00:00 1970 +0000) | | | | | +---x | | e036916b63ea (11) fold0 - | | / / rewritten(description, parent, content) as 7b3290f6e0a0 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | | / / split(parent, content) from b868bc49b0a4 using split by test (Thu Jan 01 00:00:00 1970 +0000) | | | | - | | x | 0da815c333f6 (5) E - | | / folded(description, content) as 100cc25b765f using fold by test (Thu Jan 01 00:00:00 1970 +0000) - | | | note: folding changesets to test - | | | + | | x / 0da815c333f6 (5) E + | | / x | | b868bc49b0a4 (7) fold0 - |\ \ \ split(parent, content) as 19e14c8397fc, e036916b63ea using split by test (Thu Jan 01 00:00:00 1970 +0000) + |\ \ \ folded(description, parent, content) from 2a34000d3544, c473644ee0e9 using fold by test (Thu Jan 01 00:00:00 1970 +0000) | | | | | | x | d15d0ffc75f6 (8) fold1 - | | |\ \ split(parent, content) as 7b3290f6e0a0, d0f33db50670 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | | |\ \ folded(description, parent, content) from 868d2e0eb19c, a8df460dbbfe using fold by test (Thu Jan 01 00:00:00 1970 +0000) | | | | | | | | | x d9f908fde1a1 (6) F - | | | | folded(description, parent, content) as 100cc25b765f using fold by test (Thu Jan 01 00:00:00 1970 +0000) - | | | | note: folding changesets to test | | | | x | | | 2a34000d3544 (1) A - / / / folded(description, content) as b868bc49b0a4 using fold by test (Thu Jan 01 00:00:00 1970 +0000) - | | | - | x | 868d2e0eb19c (4) D - | / folded(description, parent, content) as d15d0ffc75f6 using fold by test (Thu Jan 01 00:00:00 1970 +0000) - | | + / / / + | x / 868d2e0eb19c (4) D + | / | x a8df460dbbfe (3) C - | folded(description, content) as d15d0ffc75f6 using fold by test (Thu Jan 01 00:00:00 1970 +0000) | x c473644ee0e9 (2) B - folded(description, parent, content) as b868bc49b0a4 using fold by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory-content-divergent.t --- a/tests/test-evolve-obshistory-content-divergent.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory-content-divergent.t Fri May 08 20:36:29 2020 +0800 @@ -1,5 +1,4 @@ -This test file test the various messages when accessing obsolete -revisions. +Testing obslog and other commands accessing obsolete revisions. Global setup ============ @@ -79,8 +78,8 @@ Actual test ----------- -Check that debugobshistory on the divergent revision show both destinations - $ hg obslog --hidden 471f378eab4c --patch +Check that obslog on the divergent revision shows both destinations + $ hg obslog --hidden 471f378eab4c --patch --no-origin x 471f378eab4c (1) A0 reworded(description) as 65b757b745b9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 471f378eab4c -r 65b757b745b9 changeset-description @@ -103,59 +102,71 @@ Check that with all option, every changeset is shown $ hg obslog --hidden --all 471f378eab4c --patch @ 65b757b745b9 (3) A2 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r 65b757b745b9 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A2 + | | | * fdf9bde5129a (2) A1 - |/ + |/ reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r fdf9bde5129a changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A1 + | + | x 471f378eab4c (1) A0 - reworded(description) as 65b757b745b9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r 65b757b745b9 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r fdf9bde5129a changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - - $ hg obslog --hidden 471f378eab4c --no-graph -Tjson | python -m json.tool + $ hg obslog --hidden 471f378eab4c --no-graph --no-origin -Tjson | python -m json.tool [ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description" ], - "operation": "amend", + "operations": [ + "amend" + ], "succnodes": [ "65b757b745b935093c87a2bccd877521cccffcbd" ], - "user": "test", + "users": [ + "test" + ], "verb": "reworded" }, { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description" ], - "operation": "amend", + "operations": [ + "amend" + ], "succnodes": [ "fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e" ], - "user": "test", + "users": [ + "test" + ], "verb": "reworded" } ], @@ -163,9 +174,17 @@ "shortdescription": "A0" } ] -Check that debugobshistory on the first diverged revision show the revision -and the diverent one - $ hg obslog fdf9bde5129a --patch + $ hg obslog --hidden 471f378eab4c --no-graph -Tjson | python -m json.tool + [ + { + "markers": [], + "node": "471f378eab4c5e25f6c77f785b27c936efb22874", + "shortdescription": "A0" + } + ] +Check that obslog on the first diverged revision shows the revision and the +divergent one + $ hg obslog fdf9bde5129a --patch --no-origin * fdf9bde5129a (2) A1 | x 471f378eab4c (1) A0 @@ -187,33 +206,33 @@ -Check that all option show all of them +Check that all option shows all of them $ hg obslog fdf9bde5129a -a --patch @ 65b757b745b9 (3) A2 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r 65b757b745b9 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A2 + | | | * fdf9bde5129a (2) A1 - |/ + |/ reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r fdf9bde5129a changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A1 + | + | x 471f378eab4c (1) A0 - reworded(description) as 65b757b745b9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r 65b757b745b9 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r fdf9bde5129a changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - -Check that debugobshistory on the second diverged revision show the revision -and the diverent one - $ hg obslog 65b757b745b9 --patch +Check that obslog on the second diverged revision shows the revision and the +divergent one + $ hg obslog 65b757b745b9 --patch --no-origin @ 65b757b745b9 (3) A2 | x 471f378eab4c (1) A0 @@ -234,56 +253,55 @@ +A1 -Check that all option show all of them +Check that all option shows all of them $ hg obslog 65b757b745b9 -a --patch @ 65b757b745b9 (3) A2 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r 65b757b745b9 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A2 + | | | * fdf9bde5129a (2) A1 - |/ + |/ reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r fdf9bde5129a changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A1 + | + | x 471f378eab4c (1) A0 - reworded(description) as 65b757b745b9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r 65b757b745b9 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r fdf9bde5129a changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - -Check that debugobshistory on the both diverged revision show a coherent -graph +Check that obslog on the both diverged revision shows a coherent graph $ hg obslog '65b757b745b9+fdf9bde5129a' --patch @ 65b757b745b9 (3) A2 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r 65b757b745b9 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A2 + | | | * fdf9bde5129a (2) A1 - |/ + |/ reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r fdf9bde5129a changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A1 + | + | x 471f378eab4c (1) A0 - reworded(description) as 65b757b745b9 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r 65b757b745b9 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r fdf9bde5129a changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - - $ hg obslog '65b757b745b9+fdf9bde5129a' --no-graph -Tjson | python -m json.tool + $ hg obslog '65b757b745b9+fdf9bde5129a' --no-graph --no-origin -Tjson | python -m json.tool [ { "markers": [], @@ -293,33 +311,45 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description" ], - "operation": "amend", + "operations": [ + "amend" + ], "succnodes": [ "65b757b745b935093c87a2bccd877521cccffcbd" ], - "user": "test", + "users": [ + "test" + ], "verb": "reworded" }, { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description" ], - "operation": "amend", + "operations": [ + "amend" + ], "succnodes": [ "fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e" ], - "user": "test", + "users": [ + "test" + ], "verb": "reworded" } ], @@ -332,6 +362,68 @@ "shortdescription": "A1" } ] + $ hg obslog '65b757b745b9+fdf9bde5129a' --no-graph -Tjson | python -m json.tool + [ + { + "markers": [ + { + "dates": [ + [ + 0.0, + 0 + ] + ], + "effects": [ + "description" + ], + "operations": [ + "amend" + ], + "prednodes": [ + "471f378eab4c5e25f6c77f785b27c936efb22874" + ], + "users": [ + "test" + ], + "verb": "reworded" + } + ], + "node": "65b757b745b935093c87a2bccd877521cccffcbd", + "shortdescription": "A2" + }, + { + "markers": [], + "node": "471f378eab4c5e25f6c77f785b27c936efb22874", + "shortdescription": "A0" + }, + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description" + ], + "operations": [ + "amend" + ], + "prednodes": [ + "471f378eab4c5e25f6c77f785b27c936efb22874" + ], + "users": [ + "test" + ], + "verb": "reworded" + } + ], + "node": "fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e", + "shortdescription": "A1" + } + ] $ hg update 471f378eab4c abort: hidden revision '471f378eab4c' has diverged! (use --hidden to access hidden revisions) diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory-fold.t --- a/tests/test-evolve-obshistory-fold.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory-fold.t Fri May 08 20:36:29 2020 +0800 @@ -1,5 +1,4 @@ -This test file test the various messages when accessing obsolete -revisions. +Testing obslog and other commands accessing obsolete revisions. Global setup ============ @@ -69,9 +68,9 @@ Check output of the client -------------------------- -Check that debugobshistory on the first folded revision show only -the revision with the target - $ hg obslog --hidden 471f378eab4c --patch +Check that obslog on the first folded revision shows only the revision with the +target + $ hg obslog --hidden 471f378eab4c --patch --no-origin x 471f378eab4c (1) A0 folded(description, content) as eb5a0daa2192 using fold by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 471f378eab4c -r eb5a0daa2192 changeset-description @@ -89,7 +88,7 @@ Check that with all option, all changesets are shown - $ hg obslog --hidden --all 471f378eab4c --patch + $ hg obslog --hidden --all 471f378eab4c --patch --no-origin @ eb5a0daa2192 (3) C0 |\ x | 0dec01379d3b (2) B0 @@ -112,15 +111,39 @@ +B0 -Check that debugobshistory on the second folded revision show only -the revision with the target - $ hg obslog --hidden 0dec01379d3b --patch +Check that obslog on the second folded revision shows only the revision with +the target + $ hg obslog --hidden 0dec01379d3b --patch --no-origin x 0dec01379d3b (2) B0 folded(description, parent, content) as eb5a0daa2192 using fold by test (Thu Jan 01 00:00:00 1970 +0000) (No patch available, changesets rebased) Check that with all option, all changesets are shown - $ hg obslog --hidden --all 0dec01379d3b --patch + $ hg obslog --hidden --all 0dec01379d3b --patch --no-origin + @ eb5a0daa2192 (3) C0 + |\ + x | 0dec01379d3b (2) B0 + / folded(description, parent, content) as eb5a0daa2192 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | + x 471f378eab4c (1) A0 + folded(description, content) as eb5a0daa2192 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + diff -r 471f378eab4c -r eb5a0daa2192 changeset-description + --- a/changeset-description + +++ b/changeset-description + @@ -1,1 +1,1 @@ + -A0 + +C0 + + diff -r 471f378eab4c -r eb5a0daa2192 B0 + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/B0 Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +B0 + + +Check that obslog on the successor revision shows a coherent graph + $ hg obslog eb5a0daa2192 --patch --no-origin @ eb5a0daa2192 (3) C0 |\ x | 0dec01379d3b (2) B0 @@ -143,32 +166,7 @@ +B0 -Check that debugobshistory on the successor revision show a coherent -graph - $ hg obslog eb5a0daa2192 --patch - @ eb5a0daa2192 (3) C0 - |\ - x | 0dec01379d3b (2) B0 - / folded(description, parent, content) as eb5a0daa2192 using fold by test (Thu Jan 01 00:00:00 1970 +0000) - | (No patch available, changesets rebased) - | - x 471f378eab4c (1) A0 - folded(description, content) as eb5a0daa2192 using fold by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r eb5a0daa2192 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +C0 - - diff -r 471f378eab4c -r eb5a0daa2192 B0 - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/B0 Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +B0 - - - $ hg obslog eb5a0daa2192 --no-graph -Tjson | python -m json.tool + $ hg obslog eb5a0daa2192 --no-graph --no-origin -Tjson | python -m json.tool [ { "markers": [], @@ -178,19 +176,25 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "content" ], - "operation": "fold", + "operations": [ + "fold" + ], "succnodes": [ "eb5a0daa21923bbf8caeb2c42085b9e463861fd0" ], - "user": "test", + "users": [ + "test" + ], "verb": "folded" } ], @@ -200,20 +204,26 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "description", "parent", "content" ], - "operation": "fold", + "operations": [ + "fold" + ], "succnodes": [ "eb5a0daa21923bbf8caeb2c42085b9e463861fd0" ], - "user": "test", + "users": [ + "test" + ], "verb": "folded" } ], @@ -221,6 +231,63 @@ "shortdescription": "B0" } ] + + $ hg obslog eb5a0daa2192 --patch + @ eb5a0daa2192 (3) C0 + |\ folded(description, parent, content) from 0dec01379d3b, 471f378eab4c using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | | (No patch available, too many predecessors (2)) + | | + x | 0dec01379d3b (2) B0 + / + x 471f378eab4c (1) A0 + + $ hg obslog eb5a0daa2192 --no-graph -Tjson | python -m json.tool + [ + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ], + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description", + "parent", + "content" + ], + "operations": [ + "fold" + ], + "prednodes": [ + "0dec01379d3be6318c470ead31b1fe7ae7cb53d5", + "471f378eab4c5e25f6c77f785b27c936efb22874" + ], + "users": [ + "test" + ], + "verb": "folded" + } + ], + "node": "eb5a0daa21923bbf8caeb2c42085b9e463861fd0", + "shortdescription": "C0" + }, + { + "markers": [], + "node": "471f378eab4c5e25f6c77f785b27c936efb22874", + "shortdescription": "A0" + }, + { + "markers": [], + "node": "0dec01379d3be6318c470ead31b1fe7ae7cb53d5", + "shortdescription": "B0" + } + ] $ hg update 471f378eab4c abort: hidden revision '471f378eab4c' was rewritten as: eb5a0daa2192! (use --hidden to access hidden revisions) @@ -245,7 +312,7 @@ Check output of the server -------------------------- - $ hg obslog -R $TESTTMP/server --patch tip --all + $ hg obslog -R $TESTTMP/server --all --patch tip --no-origin o eb5a0daa2192 (2) C0 |\ x | 0dec01379d3b @@ -268,11 +335,11 @@ +B0 - $ hg obslog -R $TESTTMP/server -f --all --patch tip + $ hg obslog -R $TESTTMP/server -f --all --patch tip --no-origin o eb5a0daa2192 (2) C0 | x 471f378eab4c (1) A0 - folded(description, content) as eb5a0daa2192 using fold by test (at Thu Jan 01 00:00:00 1970 +0000) + folded(description, content) as eb5a0daa2192 using fold by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 471f378eab4c -r eb5a0daa2192 changeset-description --- a/changeset-description +++ b/changeset-description @@ -288,7 +355,7 @@ - $ hg obslog -R $TESTTMP/server --all --patch 471f378eab4c --hidden + $ hg obslog -R $TESTTMP/server --all --patch 471f378eab4c --no-origin --hidden o eb5a0daa2192 (2) C0 |\ x | 0dec01379d3b @@ -311,11 +378,11 @@ +B0 - $ hg obslog -R $TESTTMP/server -f --all --patch 471f378eab4c --hidden + $ hg obslog -R $TESTTMP/server -f --all --patch 471f378eab4c --no-origin --hidden o eb5a0daa2192 (2) C0 | x 471f378eab4c (1) A0 - folded(description, content) as eb5a0daa2192 using fold by test (at Thu Jan 01 00:00:00 1970 +0000) + folded(description, content) as eb5a0daa2192 using fold by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 471f378eab4c -r eb5a0daa2192 changeset-description --- a/changeset-description +++ b/changeset-description diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory-lots-of-splits.t --- a/tests/test-evolve-obshistory-lots-of-splits.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory-lots-of-splits.t Fri May 08 20:36:29 2020 +0800 @@ -1,5 +1,4 @@ -This test file test the various messages when accessing obsolete -revisions. +Testing obslog and other commands accessing obsolete revisions. Global setup ============ @@ -160,12 +159,12 @@ Actual test ----------- - $ hg obslog de7290d8b885 --hidden --patch + $ hg obslog de7290d8b885 --hidden --patch --no-origin x de7290d8b885 (1) A0 split(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) (No patch available, too many successors (4)) - $ hg obslog de7290d8b885 --hidden --all --patch + $ hg obslog de7290d8b885 --hidden --all --patch --no-origin o 1ae8bc733a14 (4) A0 | | o 337fec4d2edc (2) A0 @@ -178,27 +177,67 @@ split(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) (No patch available, too many successors (4)) - $ hg obslog de7290d8b885 --hidden --no-graph -Tjson | python -m json.tool + $ hg obslog de7290d8b885 --hidden --all --patch + o 1ae8bc733a14 (4) A0 + | split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | + | o 337fec4d2edc (2) A0 + |/ split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r de7290d8b885 -r 337fec4d2edc b + | --- a/b Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -43 + | diff -r de7290d8b885 -r 337fec4d2edc c + | --- a/c Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -44 + | diff -r de7290d8b885 -r 337fec4d2edc d + | --- a/d Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -45 + | + | + | @ c7f044602e9b (5) A0 + |/ split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | + | o f257fde29c7a (3) A0 + |/ split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | + x de7290d8b885 (1) A0 + + $ hg obslog de7290d8b885 --hidden --no-graph --no-origin -Tjson | python -m json.tool [ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "parent", "content" ], - "operation": "split", + "operations": [ + "split" + ], "succnodes": [ "1ae8bc733a14e374f11767d2ad128d4c891dc43f", "337fec4d2edcf0e7a467e35f818234bc620068b5", "c7f044602e9bd5dec6528b33114df3d0221e6359", "f257fde29c7a847c9b607f6e958656d0df0fb15c" ], - "user": "test", + "users": [ + "test" + ], "verb": "split" } ], @@ -206,14 +245,21 @@ "shortdescription": "A0" } ] - $ hg obslog c7f044602e9b --patch + $ hg obslog c7f044602e9b --patch --no-origin @ c7f044602e9b (5) A0 | x de7290d8b885 (1) A0 split(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) (No patch available, too many successors (4)) - $ hg obslog c7f044602e9b --no-graph -Tjson | python -m json.tool + $ hg obslog c7f044602e9b --patch + @ c7f044602e9b (5) A0 + | split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | + x de7290d8b885 (1) A0 + + $ hg obslog c7f044602e9b --no-graph --no-origin -Tjson | python -m json.tool [ { "markers": [], @@ -223,22 +269,28 @@ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "parent", "content" ], - "operation": "split", + "operations": [ + "split" + ], "succnodes": [ "1ae8bc733a14e374f11767d2ad128d4c891dc43f", "337fec4d2edcf0e7a467e35f818234bc620068b5", "c7f044602e9bd5dec6528b33114df3d0221e6359", "f257fde29c7a847c9b607f6e958656d0df0fb15c" ], - "user": "test", + "users": [ + "test" + ], "verb": "split" } ], @@ -246,9 +298,92 @@ "shortdescription": "A0" } ] -Check that debugobshistory on all heads show a coherent graph + $ hg obslog c7f044602e9b --no-graph -Tjson | python -m json.tool + [ + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "parent", + "content" + ], + "operations": [ + "split" + ], + "prednodes": [ + "de7290d8b885925115bb9e88887252dfc20ef2a8" + ], + "users": [ + "test" + ], + "verb": "split" + } + ], + "node": "c7f044602e9bd5dec6528b33114df3d0221e6359", + "shortdescription": "A0" + }, + { + "markers": [], + "node": "de7290d8b885925115bb9e88887252dfc20ef2a8", + "shortdescription": "A0" + } + ] +Check that obslog on all heads shows a coherent graph + $ hg obslog 2::5 --patch --no-origin + o 1ae8bc733a14 (4) A0 + | + | o 337fec4d2edc (2) A0 + |/ + | @ c7f044602e9b (5) A0 + |/ + | o f257fde29c7a (3) A0 + |/ + x de7290d8b885 (1) A0 + split(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) + (No patch available, too many successors (4)) + $ hg obslog 2::5 --patch o 1ae8bc733a14 (4) A0 + | split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | + | o 337fec4d2edc (2) A0 + |/ split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r de7290d8b885 -r 337fec4d2edc b + | --- a/b Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -43 + | diff -r de7290d8b885 -r 337fec4d2edc c + | --- a/c Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -44 + | diff -r de7290d8b885 -r 337fec4d2edc d + | --- a/d Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -45 + | + | + | @ c7f044602e9b (5) A0 + |/ split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | + | o f257fde29c7a (3) A0 + |/ split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | + x de7290d8b885 (1) A0 + + $ hg obslog 5 --all --patch --no-origin + o 1ae8bc733a14 (4) A0 | | o 337fec4d2edc (2) A0 |/ @@ -262,16 +397,37 @@ $ hg obslog 5 --all --patch o 1ae8bc733a14 (4) A0 + | split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) | | o 337fec4d2edc (2) A0 - |/ + |/ split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r de7290d8b885 -r 337fec4d2edc b + | --- a/b Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -43 + | diff -r de7290d8b885 -r 337fec4d2edc c + | --- a/c Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -44 + | diff -r de7290d8b885 -r 337fec4d2edc d + | --- a/d Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -45 + | + | | @ c7f044602e9b (5) A0 - |/ + |/ split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | | o f257fde29c7a (3) A0 - |/ + |/ split(parent, content) from de7290d8b885 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | x de7290d8b885 (1) A0 - split(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, too many successors (4)) $ hg update de7290d8b885 abort: hidden revision 'de7290d8b885' was split as: 337fec4d2edc, f257fde29c7a and 2 more! diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory-phase-divergent.t --- a/tests/test-evolve-obshistory-phase-divergent.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory-phase-divergent.t Fri May 08 20:36:29 2020 +0800 @@ -1,5 +1,4 @@ -This test file test the various messages when accessing obsolete -revisions. +Testing obslog and other commands accessing obsolete revisions. Global setup ============ @@ -7,7 +6,7 @@ $ . $TESTDIR/testlib/obshistory_setup.sh Test output with phase-divergence -=================================== +================================= Test setup ---------- @@ -66,8 +65,8 @@ Actual test ----------- -Check that debugobshistory on the divergent revision show both destinations - $ hg obslog --hidden 471f378eab4c --patch +Check that obslog on the public revision shows both public (diverged) and draft (divergent) revisions + $ hg obslog --hidden 471f378eab4c --patch --no-origin @ 471f378eab4c (1) A0 reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 471f378eab4c -r fdf9bde5129a changeset-description @@ -80,46 +79,7 @@ Check that with all option, every changeset is shown - $ hg obslog --hidden --all 471f378eab4c --patch - * fdf9bde5129a (2) A1 - | - @ 471f378eab4c (1) A0 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r fdf9bde5129a changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - - $ hg obslog --hidden 471f378eab4c --no-graph -Tjson | python -m json.tool - [ - { - "markers": [ - { - "date": [ - *, (glob) - 0 - ], - "effects": [ - "description" - ], - "operation": "amend", - "succnodes": [ - "fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e" - ], - "user": "test", - "verb": "reworded" - } - ], - "node": "471f378eab4c5e25f6c77f785b27c936efb22874", - "shortdescription": "A0" - } - ] -Check that debugobshistory on the first diverged revision show the revision -and the diverent one - $ hg obslog fdf9bde5129a --patch + $ hg obslog --hidden --all 471f378eab4c --patch --no-origin * fdf9bde5129a (2) A1 | @ 471f378eab4c (1) A0 @@ -132,66 +92,101 @@ +A1 - -Check that all option show all of them - $ hg obslog fdf9bde5129a -a --patch + $ hg obslog --hidden --all 471f378eab4c --patch * fdf9bde5129a (2) A1 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r fdf9bde5129a changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A1 | - @ 471f378eab4c (1) A0 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r fdf9bde5129a changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - -Check that debugobshistory on the second diverged revision show the revision -and the diverent one - $ hg obslog fdf9bde5129a --patch - * fdf9bde5129a (2) A1 | @ 471f378eab4c (1) A0 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r fdf9bde5129a changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - -Check that all option show all of them - $ hg obslog fdf9bde5129a -a --patch + $ hg obslog --hidden 471f378eab4c --no-graph --no-origin -Tjson | python -m json.tool + [ + { + "markers": [ + { + "dates": [ + [ + *, (glob) + 0 + ] + ], + "effects": [ + "description" + ], + "operations": [ + "amend" + ], + "succnodes": [ + "fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e" + ], + "users": [ + "test" + ], + "verb": "reworded" + } + ], + "node": "471f378eab4c5e25f6c77f785b27c936efb22874", + "shortdescription": "A0" + } + ] + $ hg obslog --hidden 471f378eab4c --no-graph -Tjson | python -m json.tool + [ + { + "markers": [], + "node": "471f378eab4c5e25f6c77f785b27c936efb22874", + "shortdescription": "A0" + } + ] +Check that obslog on the draft (divergent) revision also shows public (diverged) revision + $ hg obslog fdf9bde5129a --patch * fdf9bde5129a (2) A1 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r fdf9bde5129a changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A1 + | | @ 471f378eab4c (1) A0 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r fdf9bde5129a changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - -Check that debugobshistory on the both diverged revision show a coherent -graph - $ hg obslog 'fdf9bde5129a+fdf9bde5129a' --patch + +Check that all option shows all of them + $ hg obslog fdf9bde5129a -a --patch * fdf9bde5129a (2) A1 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r fdf9bde5129a changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A1 + | | @ 471f378eab4c (1) A0 - reworded(description) as fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 471f378eab4c -r fdf9bde5129a changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 +Check that obslog on the both draft (divergent) and public (diverged) revisions shows a coherent graph + $ hg obslog 'fdf9bde5129a+471f378eab4c' --patch + * fdf9bde5129a (2) A1 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r fdf9bde5129a changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A1 + | + | + @ 471f378eab4c (1) A0 - $ hg obslog 'fdf9bde5129a+fdf9bde5129a' --no-graph -Tjson | python -m json.tool + $ hg obslog 'fdf9bde5129a+471f378eab4c' --no-graph --no-origin -Tjson | python -m json.tool [ { "markers": [], @@ -201,18 +196,24 @@ { "markers": [ { - "date": [ - 0.0, - 0 + "dates": [ + [ + 0.0, + 0 + ] ], "effects": [ "description" ], - "operation": "amend", + "operations": [ + "amend" + ], "succnodes": [ "fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e" ], - "user": "test", + "users": [ + "test" + ], "verb": "reworded" } ], @@ -220,6 +221,41 @@ "shortdescription": "A0" } ] + $ hg obslog 'fdf9bde5129a+471f378eab4c' --no-graph -Tjson | python -m json.tool + [ + { + "markers": [ + { + "dates": [ + [ + 0.0, + 0 + ] + ], + "effects": [ + "description" + ], + "operations": [ + "amend" + ], + "prednodes": [ + "471f378eab4c5e25f6c77f785b27c936efb22874" + ], + "users": [ + "test" + ], + "verb": "reworded" + } + ], + "node": "fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e", + "shortdescription": "A1" + }, + { + "markers": [], + "node": "471f378eab4c5e25f6c77f785b27c936efb22874", + "shortdescription": "A0" + } + ] $ hg update 471f378eab4c 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg update --hidden 'desc(A0)' diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory-prune.t --- a/tests/test-evolve-obshistory-prune.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory-prune.t Fri May 08 20:36:29 2020 +0800 @@ -1,5 +1,4 @@ -This test file test the various messages when accessing obsolete -revisions. +Testing obslog and other commands accessing obsolete revisions. Global setup ============ @@ -66,19 +65,25 @@ $ hg obslog 'desc(B0)' --hidden --patch x 0dec01379d3b (2) B0 pruned using prune by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, no successors) + (No patch available, no predecessors) $ hg obslog 'desc(B0)' --hidden --no-graph -Tjson | python -m json.tool [ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], - "operation": "prune", - "user": "test", + "operations": [ + "prune" + ], + "users": [ + "test" + ], "verb": "pruned" } ], @@ -115,7 +120,7 @@ $ hg obslog -f -R $TESTTMP/server --patch 0dec01379d3b --hidden x 0dec01379d3b (2) B0 - pruned using prune by test (at Thu Jan 01 00:00:00 1970 +0000) - (No patch available, no successors) + pruned using prune by test (Thu Jan 01 00:00:00 1970 +0000) + (No patch available, no predecessors) # TODO ADD amend + prune diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory-split.t --- a/tests/test-evolve-obshistory-split.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory-split.t Fri May 08 20:36:29 2020 +0800 @@ -1,5 +1,4 @@ -This test file test the various messages when accessing obsolete -revisions. +Testing obslog and other commands accessing obsolete revisions. Global setup ============ @@ -98,33 +97,41 @@ Check output on the client side ------------------------------- -Check that debugobshistory on split commit show both targets - $ hg obslog 471597cad322 --hidden --patch +Check that obslog on split commit shows both targets + $ hg obslog 471597cad322 --hidden --patch --no-origin x 471597cad322 (1) A0 split(parent, content) as 337fec4d2edc, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) note: testing split (No patch available, too many successors (2)) - $ hg obslog 471597cad322 --hidden --no-graph -Tjson | python -m json.tool + $ hg obslog 471597cad322 --hidden --no-graph --no-origin -Tjson | python -m json.tool [ { "markers": [ { - "date": [ - *, (glob) - 0 + "dates": [ + [ + *, (glob) + 0 + ] ], "effects": [ "parent", "content" ], - "note": "testing split", - "operation": "split", + "notes": [ + "testing split" + ], + "operations": [ + "split" + ], "succnodes": [ "337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c" ], - "user": "test", + "users": [ + "test" + ], "verb": "split" } ], @@ -132,18 +139,79 @@ "shortdescription": "A0" } ] -Check that debugobshistory on the first successor after split show -the revision plus the split one + $ hg obslog 471597cad322 --hidden --no-graph -Tjson | python -m json.tool + [ + { + "markers": [], + "node": "471597cad322d1f659bb169751be9133dad92ef3", + "shortdescription": "A0" + } + ] +Check that obslog on the first successor after split shows the revision plus +the split one $ hg obslog 337fec4d2edc --patch o 337fec4d2edc (2) A0 + | split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | diff -r 471597cad322 -r 337fec4d2edc b + | --- a/b Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -43 + | | x 471597cad322 (1) A0 - split(parent, content) as 337fec4d2edc, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) - note: testing split - (No patch available, too many successors (2)) + +With the all option, it should show all three changesets + $ hg obslog --all 337fec4d2edc --patch + o 337fec4d2edc (2) A0 + | split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | diff -r 471597cad322 -r 337fec4d2edc b + | --- a/b Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -43 + | + | + | @ f257fde29c7a (3) A0 + |/ split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | (No patch available, changesets rebased) + | + x 471597cad322 (1) A0 -With the all option, it should show the three changesets - $ hg obslog --all 337fec4d2edc --patch +Check that obslog on the second successor after split shows the revision plus +the split one + $ hg obslog f257fde29c7a --patch + @ f257fde29c7a (3) A0 + | split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | (No patch available, changesets rebased) + | + x 471597cad322 (1) A0 + +With the all option, it should show all three changesets + $ hg obslog f257fde29c7a --all --patch + o 337fec4d2edc (2) A0 + | split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | diff -r 471597cad322 -r 337fec4d2edc b + | --- a/b Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -43 + | + | + | @ f257fde29c7a (3) A0 + |/ split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | (No patch available, changesets rebased) + | + x 471597cad322 (1) A0 + +Obslog with all option should also works on the split commit + $ hg obslog -a 471597cad322 --hidden --patch --no-origin o 337fec4d2edc (2) A0 | | @ f257fde29c7a (3) A0 @@ -153,18 +221,8 @@ note: testing split (No patch available, too many successors (2)) -Check that debugobshistory on the second successor after split show -the revision plus the split one - $ hg obslog f257fde29c7a --patch - @ f257fde29c7a (3) A0 - | - x 471597cad322 (1) A0 - split(parent, content) as 337fec4d2edc, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) - note: testing split - (No patch available, too many successors (2)) - -With the all option, it should show the three changesets - $ hg obslog f257fde29c7a --all --patch +Check that obslog on both successors after split shows a coherent graph + $ hg obslog 'f257fde29c7a+337fec4d2edc' --patch --no-origin o 337fec4d2edc (2) A0 | | @ f257fde29c7a (3) A0 @@ -174,28 +232,23 @@ note: testing split (No patch available, too many successors (2)) -Obslog with all option all should also works on the split commit - $ hg obslog -a 471597cad322 --hidden --patch + $ hg obslog 'f257fde29c7a+337fec4d2edc' --patch o 337fec4d2edc (2) A0 + | split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | diff -r 471597cad322 -r 337fec4d2edc b + | --- a/b Thu Jan 01 00:00:00 1970 +0000 + | +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +0,0 @@ + | -43 + | | | @ f257fde29c7a (3) A0 - |/ + |/ split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | (No patch available, changesets rebased) + | x 471597cad322 (1) A0 - split(parent, content) as 337fec4d2edc, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) - note: testing split - (No patch available, too many successors (2)) - -Check that debugobshistory on both successors after split show -a coherent graph - $ hg obslog 'f257fde29c7a+337fec4d2edc' --patch - o 337fec4d2edc (2) A0 - | - | @ f257fde29c7a (3) A0 - |/ - x 471597cad322 (1) A0 - split(parent, content) as 337fec4d2edc, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) - note: testing split - (No patch available, too many successors (2)) $ hg update 471597cad322 abort: hidden revision '471597cad322' was split as: 337fec4d2edc, f257fde29c7a! @@ -211,7 +264,7 @@ Check output on the server side ------------------------------- - $ hg obslog -R $TESTTMP/server --patch tip + $ hg obslog -R $TESTTMP/server --patch tip --no-origin o f257fde29c7a (2) A0 | x 471597cad322 @@ -219,10 +272,10 @@ note: testing split (No patch available, context is not local) - $ hg obslog -R $TESTTMP/server -f --patch tip + $ hg obslog -R $TESTTMP/server -f --patch tip --no-origin o f257fde29c7a (2) A0 - $ hg obslog -R $TESTTMP/server --all --patch tip + $ hg obslog -R $TESTTMP/server --all --patch tip --no-origin o 337fec4d2edc (1) A0 | | o f257fde29c7a (2) A0 @@ -232,12 +285,12 @@ note: testing split (No patch available, context is not local) - $ hg obslog -R $TESTTMP/server --all -f --patch tip + $ hg obslog -R $TESTTMP/server --all -f --patch tip --no-origin o 337fec4d2edc (1) A0 o f257fde29c7a (2) A0 - $ hg obslog -R $TESTTMP/server --no-graph -f --all --patch tip + $ hg obslog -R $TESTTMP/server --no-graph --all --patch tip --no-origin f257fde29c7a (2) A0 471597cad322 @@ -245,12 +298,58 @@ note: testing split (No patch available, context is not local) + 337fec4d2edc (1) A0 + + $ hg obslog -R $TESTTMP/server --no-graph -f --all --patch tip --no-origin + f257fde29c7a (2) A0 + + 337fec4d2edc (1) A0 + + $ hg obslog -R $TESTTMP/server --patch tip + o f257fde29c7a (2) A0 + | split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | (No patch available, predecessor is unknown locally) + | + x 471597cad322 + + $ hg obslog -R $TESTTMP/server -f --patch tip + o f257fde29c7a (2) A0 + + $ hg obslog -R $TESTTMP/server --all --patch tip + o 337fec4d2edc (1) A0 + | split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | (No patch available, predecessor is unknown locally) + | + | o f257fde29c7a (2) A0 + |/ split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing split + | (No patch available, predecessor is unknown locally) + | + x 471597cad322 + + $ hg obslog -R $TESTTMP/server --all -f --patch tip + o 337fec4d2edc (1) A0 + + o f257fde29c7a (2) A0 + + $ hg obslog -R $TESTTMP/server --no-graph --all --patch tip + f257fde29c7a (2) A0 + split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + note: testing split + (No patch available, predecessor is unknown locally) + + 471597cad322 + + 337fec4d2edc (1) A0 + split(parent, content) from 471597cad322 using split by test (Thu Jan 01 00:00:00 1970 +0000) + note: testing split + (No patch available, predecessor is unknown locally) + $ hg obslog -R $TESTTMP/server --no-graph -f --all --patch tip f257fde29c7a (2) A0 - 471597cad322 - split(parent, content) as 337fec4d2edc, f257fde29c7a using split by test (Thu Jan 01 00:00:00 1970 +0000) - note: testing split - (No patch available, context is not local) + 337fec4d2edc (1) A0 diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-obshistory.t --- a/tests/test-evolve-obshistory.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-obshistory.t Fri May 08 20:36:29 2020 +0800 @@ -93,7 +93,7 @@ Actual test ----------- - $ hg obslog 7a230b46bf61 --patch + $ hg obslog 7a230b46bf61 --patch --no-origin @ 7a230b46bf61 (3) A2 | x fdf9bde5129a (2) A1 @@ -116,6 +116,31 @@ +A1 + + $ hg obslog 7a230b46bf61 --patch + @ 7a230b46bf61 (3) A2 + | reworded(description) from fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r fdf9bde5129a -r 7a230b46bf61 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A1 + | +A2 + | + | + x fdf9bde5129a (2) A1 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r fdf9bde5129a changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A1 + | + | + x 471f378eab4c (1) A0 + + $ cd $TESTTMP/local-remote-markers-2 $ hg pull pulling from $TESTTMP/local-remote-markers-1 @@ -130,9 +155,8 @@ (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) -Check that debugobshistory works with markers pointing to missing local -changectx - $ hg obslog 7a230b46bf61 --patch +Check that obslog works with markers pointing to missing local changectx + $ hg obslog 7a230b46bf61 --patch --no-origin o 7a230b46bf61 (2) A2 | x fdf9bde5129a @@ -144,11 +168,23 @@ (No patch available, successor is unknown locally) - $ hg obslog 7a230b46bf61 --patch -f + $ hg obslog 7a230b46bf61 --patch + o 7a230b46bf61 (2) A2 + | reworded(description) from fdf9bde5129a using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, predecessor is unknown locally) + | + x fdf9bde5129a + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, context is not local) + | + @ 471f378eab4c (1) A0 + + + $ hg obslog 7a230b46bf61 --patch -f --no-origin o 7a230b46bf61 (2) A2 | @ 471f378eab4c (1) A0 - reworded(description) as 7a230b46bf61 using amend by test (at Thu Jan 01 00:00:00 1970 +0000) + reworded(description) as 7a230b46bf61 using amend by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 471f378eab4c -r 7a230b46bf61 changeset-description --- a/changeset-description +++ b/changeset-description @@ -157,23 +193,111 @@ +A2 + $ hg obslog 7a230b46bf61 --patch -f + o 7a230b46bf61 (2) A2 + | reworded(description) from 471f378eab4c using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 471f378eab4c -r 7a230b46bf61 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -A0 + | +A2 + | + | + @ 471f378eab4c (1) A0 + + $ hg obslog 7a230b46bf61 --color=debug --patch o [evolve.node|7a230b46bf61] [evolve.rev|(2)] [evolve.short_description|A2] + | [evolve.verb|reworded](description) from [evolve.node|fdf9bde5129a] using [evolve.operation|amend] by [evolve.user|test] [evolve.date|(Thu Jan 01 00:00:00 1970 +0000)] + | (No patch available, predecessor is unknown locally) | x [evolve.node evolve.missing_change_ctx|fdf9bde5129a] - | [evolve.verb|reworded](description) as [evolve.node|7a230b46bf61] using [evolve.operation|amend] by [evolve.user|test] [evolve.date|(Thu Jan 01 00:00:00 1970 +0000)] + | [evolve.verb|reworded](description) from [evolve.node|471f378eab4c] using [evolve.operation|amend] by [evolve.user|test] [evolve.date|(Thu Jan 01 00:00:00 1970 +0000)] | (No patch available, context is not local) | @ [evolve.node|471f378eab4c] [evolve.rev|(1)] [evolve.short_description|A0] - [evolve.verb|reworded](description) as [evolve.node|fdf9bde5129a] using [evolve.operation|amend] by [evolve.user|test] [evolve.date|(Thu Jan 01 00:00:00 1970 +0000)] - (No patch available, successor is unknown locally) - $ hg obslog 7a230b46bf61 --graph \ - > -T '{node|short} {rev} {desc|firstline}\n{markers % "rewritten using {operation}"}\n' + $ hg obslog 7a230b46bf61 --graph --no-origin \ + > -T '{node|short} {rev} {desc|firstline}\n{markers % "rewritten using {operations}"}\n' o 7a230b46bf61 2 A2 | x fdf9bde5129a | rewritten using amend @ 471f378eab4c 1 A0 rewritten using amend + + $ hg obslog 7a230b46bf61 --graph \ + > -T '{node|short} {rev} {desc|firstline}\n{markers % "rewritten using {operations}"}\n' + o 7a230b46bf61 2 A2 + | rewritten using amend + x fdf9bde5129a + | rewritten using amend + @ 471f378eab4c 1 A0 + + +Test output with non-local changesets and various templates +=========================================================== + + $ hg init $TESTTMP/obslog-non-local-templates + $ cd $TESTTMP/obslog-non-local-templates + $ cat << EOF >> .hg/hgrc + > [templates] + > fancy = '{desc|firstline}\n{markers % "{verb} using {operations} by {users} ({join(notes, "; ")})"}' + > fancier = '{desc|firstline}\n{markers % "{join(users, ", ")} had {verb} this commit using {join(operations, "/")} and said: {join(notes % "\"{note}\"", ", ")})"}' + > EOF + + $ mkcommit A0 + $ hg metaedit -m 'A1' -n 'note1' -d '42 0' --config devel.default-date='1 0' -q + $ HGUSER=alice hg amend -m 'A2' -n 'note2' + $ HGUSER=bob hg amend -m 'A3' -n 'note3' + + $ hg debugobsolete + 6ffd04c870fe2b73e7c885e508c4f1213a75c4d4 e481355d236800802337be3e637bd820870b04d2 0 (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '33', 'note': 'note1', 'operation': 'metaedit', 'user': 'test'} + e481355d236800802337be3e637bd820870b04d2 65835bf83412a950e6a47f023690d5e6ae09718d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'note': 'note2', 'operation': 'amend', 'user': 'alice'} + 65835bf83412a950e6a47f023690d5e6ae09718d 41985e02b792daac8907f6b30b513bbf6e8e034d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'note': 'note3', 'operation': 'amend', 'user': 'bob'} + + $ hg strip 'desc(A1) + desc(A2)' --hidden --quiet --config extensions.strip= + + $ hg obslog -f --no-origin + @ 41985e02b792 (1) A3 + | + x 6ffd04c870fe (0) A0 + rewritten(description, date) as 41985e02b792 using amend, metaedit by alice, bob, test (between Thu Jan 01 00:00:00 1970 +0000 and Thu Jan 01 00:00:01 1970 +0000) + note: note1 + note: note2 + note: note3 + + $ hg obslog -f + @ 41985e02b792 (1) A3 + | rewritten(description, date) from 6ffd04c870fe using amend, metaedit by alice, bob, test (between Thu Jan 01 00:00:00 1970 +0000 and Thu Jan 01 00:00:01 1970 +0000) + | note: note1 + | note: note2 + | note: note3 + | + x 6ffd04c870fe (0) A0 + + $ hg obslog -f -T fancy --no-origin + @ A3 + | + x A0 + rewritten using amend, metaedit by alice, bob, test (note1; note2; note3) + + $ hg obslog -f -T fancy + @ A3 + | rewritten using amend, metaedit by alice, bob, test (note1; note2; note3) + x A0 + + + $ hg obslog -f -T fancier --no-origin + @ A3 + | + x A0 + alice, bob, test had rewritten this commit using amend/metaedit and said: "note1", "note2", "note3") + + $ hg obslog -f -T fancier + @ A3 + | alice, bob, test had rewritten this commit using amend/metaedit and said: "note1", "note2", "note3") + x A0 + diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-phase-divergence.t --- a/tests/test-evolve-phase-divergence.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-phase-divergence.t Fri May 08 20:36:29 2020 +0800 @@ -160,9 +160,9 @@ XXX: There must be mention of phase-divergence here $ hg obslog -r . --all @ 98bb3a6cfe1a (2) tweak a + | reworded(description) from 4d1169d82e47 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | o 4d1169d82e47 (1) modify a - reworded(description) as 98bb3a6cfe1a using amend by test (Thu Jan 01 00:00:00 1970 +0000) Solving the phase divergence using evolve command -------------------------------------------------- @@ -352,14 +352,19 @@ o 0:d3873e73d99e init () public + $ hg debugobsolete + 4d1169d82e47b11570c7f380790da5f89f7cabc2 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} + 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 {d3873e73d99ef67873dac33fbcc66268d5d2b6f4} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + aa071e5554e36080a36cfd24accd5a71e3320f1e d47f2b37ed8216234c503b3a2657989958754a59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + d47f2b37ed8216234c503b3a2657989958754a59 3d62500c673dd1c88bb09a73e86d0210aed6fcb6 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} $ hg obslog -r . --all @ 3d62500c673d (5) phase-divergent update to aa071e5554e3: + | rewritten(description, parent, content) from d47f2b37ed82 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | x d47f2b37ed82 (4) added bar to foo - | rewritten(description, parent, content) as 3d62500c673d using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | rewritten(description, content) from aa071e5554e3 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | o aa071e5554e3 (3) added foo to foo - rewritten(description, content) as d47f2b37ed82 using amend by test (Thu Jan 01 00:00:00 1970 +0000) Syncing all other repositories @@ -582,11 +587,19 @@ 1 new phase-divergent changesets 1 local changesets published + $ hg debugobsolete + 4d1169d82e47b11570c7f380790da5f89f7cabc2 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} + 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 {d3873e73d99ef67873dac33fbcc66268d5d2b6f4} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + aa071e5554e36080a36cfd24accd5a71e3320f1e d47f2b37ed8216234c503b3a2657989958754a59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + d47f2b37ed8216234c503b3a2657989958754a59 3d62500c673dd1c88bb09a73e86d0210aed6fcb6 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + b756eb10ea73ee4ba69c998e64a5c6e1005d74b5 2c3560aedeadb452d517b6c5a93fd3af91b3b8cd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 2c3560aedeadb452d517b6c5a93fd3af91b3b8cd 502e737366322886cf628276aa0a2796904453b4 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + 2352021b37851be226ebed109b0eb6eada918566 334e300d6db500489d842240cbdc40c203d385c7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} $ hg obslog -r . @ 334e300d6db5 (10) added x to x + | rebased(parent) from 2352021b3785 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | o 2352021b3785 (9) added x to x - rebased(parent) as 334e300d6db5 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) $ hg glog -r .^:: @ 10:334e300d6db5 added x to x @@ -629,15 +642,25 @@ o 0:d3873e73d99e init () public + $ hg debugobsolete + 4d1169d82e47b11570c7f380790da5f89f7cabc2 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} + 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 {d3873e73d99ef67873dac33fbcc66268d5d2b6f4} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + aa071e5554e36080a36cfd24accd5a71e3320f1e d47f2b37ed8216234c503b3a2657989958754a59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + d47f2b37ed8216234c503b3a2657989958754a59 3d62500c673dd1c88bb09a73e86d0210aed6fcb6 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + b756eb10ea73ee4ba69c998e64a5c6e1005d74b5 2c3560aedeadb452d517b6c5a93fd3af91b3b8cd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 2c3560aedeadb452d517b6c5a93fd3af91b3b8cd 502e737366322886cf628276aa0a2796904453b4 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + 2352021b37851be226ebed109b0eb6eada918566 334e300d6db500489d842240cbdc40c203d385c7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 334e300d6db500489d842240cbdc40c203d385c7 b1a0e143e32be800ff6a5c2cd6c77823652c901b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + b1a0e143e32be800ff6a5c2cd6c77823652c901b 0 {502e737366322886cf628276aa0a2796904453b4} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} $ hg obslog -r . b1a0e143e32b --all --hidden x b1a0e143e32b (11) added x to x + | rebased(parent) from 334e300d6db5 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | pruned using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | x 334e300d6db5 (10) added x to x - | rebased(parent) as b1a0e143e32b using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | rebased(parent) from 2352021b3785 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | @ 2352021b3785 (9) added x to x - rebased(parent) as 334e300d6db5 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) $ hg exp @@ -713,14 +736,26 @@ o 0:d3873e73d99e init () public + $ hg debugobsolete + 4d1169d82e47b11570c7f380790da5f89f7cabc2 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} + 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 {d3873e73d99ef67873dac33fbcc66268d5d2b6f4} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + aa071e5554e36080a36cfd24accd5a71e3320f1e d47f2b37ed8216234c503b3a2657989958754a59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + d47f2b37ed8216234c503b3a2657989958754a59 3d62500c673dd1c88bb09a73e86d0210aed6fcb6 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + b756eb10ea73ee4ba69c998e64a5c6e1005d74b5 2c3560aedeadb452d517b6c5a93fd3af91b3b8cd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 2c3560aedeadb452d517b6c5a93fd3af91b3b8cd 502e737366322886cf628276aa0a2796904453b4 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + 2352021b37851be226ebed109b0eb6eada918566 334e300d6db500489d842240cbdc40c203d385c7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 334e300d6db500489d842240cbdc40c203d385c7 b1a0e143e32be800ff6a5c2cd6c77823652c901b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + b1a0e143e32be800ff6a5c2cd6c77823652c901b 0 {502e737366322886cf628276aa0a2796904453b4} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + dc88f5aa9bc90a6418899d267d9524205dfb429b 211ab84d1689507465ecf708fea540e9867d5fda 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 211ab84d1689507465ecf708fea540e9867d5fda 13015a180eee523ba9950f18683762a77f560f3d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} $ hg obslog -r . @ 13015a180eee (14) y to y and foobar to foo + | amended(content) from 211ab84d1689 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x 211ab84d1689 (13) y to y and foobar to foo - | amended(content) as 13015a180eee using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | rebased(parent) from dc88f5aa9bc9 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | o dc88f5aa9bc9 (12) y to y and foobar to foo - rebased(parent) as 211ab84d1689 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) Resolving divergence using `hg evolve` ------------------------------------- @@ -785,14 +820,30 @@ $ hg add x $ hg amend + $ hg debugobsolete + 4d1169d82e47b11570c7f380790da5f89f7cabc2 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '1', 'operation': 'amend', 'user': 'test'} + 98bb3a6cfe1a3d98d0959e9d42322f38313a08f3 0 {d3873e73d99ef67873dac33fbcc66268d5d2b6f4} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + aa071e5554e36080a36cfd24accd5a71e3320f1e d47f2b37ed8216234c503b3a2657989958754a59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + d47f2b37ed8216234c503b3a2657989958754a59 3d62500c673dd1c88bb09a73e86d0210aed6fcb6 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + b756eb10ea73ee4ba69c998e64a5c6e1005d74b5 2c3560aedeadb452d517b6c5a93fd3af91b3b8cd 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 2c3560aedeadb452d517b6c5a93fd3af91b3b8cd 502e737366322886cf628276aa0a2796904453b4 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + 2352021b37851be226ebed109b0eb6eada918566 334e300d6db500489d842240cbdc40c203d385c7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 334e300d6db500489d842240cbdc40c203d385c7 b1a0e143e32be800ff6a5c2cd6c77823652c901b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + b1a0e143e32be800ff6a5c2cd6c77823652c901b 0 {502e737366322886cf628276aa0a2796904453b4} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + dc88f5aa9bc90a6418899d267d9524205dfb429b 211ab84d1689507465ecf708fea540e9867d5fda 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 211ab84d1689507465ecf708fea540e9867d5fda 13015a180eee523ba9950f18683762a77f560f3d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + 13015a180eee523ba9950f18683762a77f560f3d 7687d2968b3e2697f955beac2da24ee879950cb9 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 7687d2968b3e2697f955beac2da24ee879950cb9 8c2bb6fb44e9443c64b3a2a3d061272c8e25e6ce 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + f3794e5a91dc1d4d36fee5c423386b19433a1f48 2bfd56949cf0a3abfbf9881254a88fe07b336ddb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 2bfd56949cf0a3abfbf9881254a88fe07b336ddb 5fd38c0de46ec31f0bb1904b5909802bc4bcb47e 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} $ hg obslog -r . @ 5fd38c0de46e (19) added l to l + | amended(content) from 2bfd56949cf0 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x 2bfd56949cf0 (18) added l to l - | amended(content) as 5fd38c0de46e using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | rebased(parent) from f3794e5a91dc using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | x f3794e5a91dc (17) added l to l - rebased(parent) as 2bfd56949cf0 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) $ hg phase -r f3794e5a91dc --public --hidden @@ -1021,22 +1072,28 @@ o 0:d3873e73d99e init () public + $ hg debugobsolete + a51bce62c219f024bc0ae0cc0e3957ee77d7cb46 4f25cd9cd2bf15bc83316e91fbcb93489ea15a75 e1154ec0206ac05c3765f7bd1337e3b96db2974f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'prune', 'user': 'test'} + 4f25cd9cd2bf15bc83316e91fbcb93489ea15a75 86419909e01787959aa6471aee605c6d604a3e0d 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + e1154ec0206ac05c3765f7bd1337e3b96db2974f ee4af146c5cfe0b1bf7665243dd89f9bfe604f59 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + ee4af146c5cfe0b1bf7665243dd89f9bfe604f59 89ba615ea1ec3ba5b25db9f7897eb29712d7e5d6 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} $ hg obslog -r a51bce62c219 --all o 86419909e017 (4) phase-divergent update to a51bce62c219: + | rewritten(description, parent, content) from 4f25cd9cd2bf using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | @ 89ba615ea1ec (6) phase-divergent update to a51bce62c219: + | | rewritten(description, parent, content) from ee4af146c5cf using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | x | 4f25cd9cd2bf (2) added m - | | rewritten(description, parent, content) as 86419909e017 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | split(description, parent, content) from a51bce62c219 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | | | x ee4af146c5cf (5) added n - | | rewritten(description, parent, content) as 89ba615ea1ec using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rebased(parent) from e1154ec0206a using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | | x e1154ec0206a (3) added n - |/ rebased(parent) as ee4af146c5cf using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + |/ split(description, parent, content) from a51bce62c219 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | o a51bce62c219 (1) added m and n - split(description, parent, content) as 4f25cd9cd2bf, e1154ec0206a using prune by test (Thu Jan 01 00:00:00 1970 +0000) XXX: not sure this is the correct @@ -1151,19 +1208,24 @@ o 0:d3873e73d99e init () public + $ hg debugobsolete + 90859808ece64c9ca64dd29992db42353c70f164 a472632947451d2e52659aec3088c98ddf920f2b bb87595f9a77d7d1e4a8726beef266a1636f63d5 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'prune', 'user': 'test'} + a472632947451d2e52659aec3088c98ddf920f2b 25875a9cb6400973b846c94f6a80410067c2cb1f 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + bb87595f9a77d7d1e4a8726beef266a1636f63d5 26f564f94bcc34e049eb112fd14ab1e5286f2325 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} $ hg obslog -r 90859808ece6 --all o 25875a9cb640 (4) phase-divergent update to 90859808ece6: + | rewritten(description, parent, content) from a47263294745 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | @ 26f564f94bcc (5) phase-divergent update to 90859808ece6: + | | rewritten(description, parent, content) from bb87595f9a77 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | x | a47263294745 (2) added p - | | rewritten(description, parent, content) as 25875a9cb640 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | split(description, content) from 90859808ece6 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | | | x bb87595f9a77 (3) added q - |/ rewritten(description, parent, content) as 26f564f94bcc using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + |/ split(description, content) from 90859808ece6 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | o 90859808ece6 (1) added p and q - split(description, content) as a47263294745, bb87595f9a77 using prune by test (Thu Jan 01 00:00:00 1970 +0000) XXX: not sure this is correct @@ -1282,25 +1344,32 @@ o 0:d3873e73d99e init () public + $ hg debugobsolete + a51bce62c219f024bc0ae0cc0e3957ee77d7cb46 4f25cd9cd2bf15bc83316e91fbcb93489ea15a75 e1154ec0206ac05c3765f7bd1337e3b96db2974f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'prune', 'user': 'test'} + e1154ec0206ac05c3765f7bd1337e3b96db2974f 52ca78bb98c71222f8afae28d48ae6cfd44a60c9 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + 4f25cd9cd2bf15bc83316e91fbcb93489ea15a75 86419909e01787959aa6471aee605c6d604a3e0d 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} + 52ca78bb98c71222f8afae28d48ae6cfd44a60c9 98dad881251146cd171f53b2a5b7fc3a371f820e 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 98dad881251146cd171f53b2a5b7fc3a371f820e 88b0dae5369aaa3bceb6c0b647542594e2c72fb7 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} $ hg obslog -r a51bce62c219 --all o 86419909e017 (5) phase-divergent update to a51bce62c219: + | rewritten(description, parent, content) from 4f25cd9cd2bf using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | @ 88b0dae5369a (7) phase-divergent update to a51bce62c219: + | | rewritten(description, parent, content) from 98dad8812511 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | x | 4f25cd9cd2bf (2) added m - | | rewritten(description, parent, content) as 86419909e017 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | split(description, parent, content) from a51bce62c219 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | | | x 98dad8812511 (6) added n - | | rewritten(description, parent, content) as 88b0dae5369a using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rebased(parent) from 52ca78bb98c7 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | | x 52ca78bb98c7 (4) added n - | | rebased(parent) as 98dad8812511 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | amended(content) from e1154ec0206a using amend by test (Thu Jan 01 00:00:00 1970 +0000) | | | x e1154ec0206a (3) added n - |/ amended(content) as 52ca78bb98c7 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + |/ split(description, parent, content) from a51bce62c219 using prune by test (Thu Jan 01 00:00:00 1970 +0000) | o a51bce62c219 (1) added m and n - split(description, parent, content) as 4f25cd9cd2bf, e1154ec0206a using prune by test (Thu Jan 01 00:00:00 1970 +0000) XXX: not sure this is correct @@ -1579,56 +1648,58 @@ 599454370881: E2 phase-divergent: 3074c7249d20 (immutable precursor) + $ hg debugobsolete + 3074c7249d2023b1fff891591d7e609695cd09c2 59945437088136c5fa2f9bb8573d5d02623fe7cb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} $ hg obslog --all --patch @ 599454370881 (2) E2 + | rewritten(description, content) from 3074c7249d20 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 3074c7249d20 -r 599454370881 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -E1 + | +E2 + | + | diff -r 3074c7249d20 -r 599454370881 letters + | --- a/letters Thu Jan 01 00:00:00 1970 +0000 + | +++ b/letters Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,7 +1,7 @@ + | a + | b + | c + | -D + | +d + | e + | f + | g + | diff -r 3074c7249d20 -r 599454370881 numbers + | --- a/numbers Thu Jan 01 00:00:00 1970 +0000 + | +++ b/numbers Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,9 +1,9 @@ + | 1 + | 2 + | 3 + | -four + | +4 + | 5 + | 6 + | -7 + | +seven + | 8 + | nine + | diff -r 3074c7249d20 -r 599454370881 romans + | --- a/romans Thu Jan 01 00:00:00 1970 +0000 + | +++ b/romans Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,5 +1,5 @@ + | I + | -II + | +ii + | III + | IV + | V + | | o 3074c7249d20 (1) E1 - rewritten(description, content) as 599454370881 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 3074c7249d20 -r 599454370881 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -E1 - +E2 - - diff -r 3074c7249d20 -r 599454370881 letters - --- a/letters Thu Jan 01 00:00:00 1970 +0000 - +++ b/letters Thu Jan 01 00:00:00 1970 +0000 - @@ -1,7 +1,7 @@ - a - b - c - -D - +d - e - f - g - diff -r 3074c7249d20 -r 599454370881 numbers - --- a/numbers Thu Jan 01 00:00:00 1970 +0000 - +++ b/numbers Thu Jan 01 00:00:00 1970 +0000 - @@ -1,9 +1,9 @@ - 1 - 2 - 3 - -four - +4 - 5 - 6 - -7 - +seven - 8 - nine - diff -r 3074c7249d20 -r 599454370881 romans - --- a/romans Thu Jan 01 00:00:00 1970 +0000 - +++ b/romans Thu Jan 01 00:00:00 1970 +0000 - @@ -1,5 +1,5 @@ - I - -II - +ii - III - IV - V - $ hg evolve --phase-divergent --rev 'desc("E2")' @@ -1763,60 +1834,63 @@ -9 +nine + $ hg debugobsolete + 3074c7249d2023b1fff891591d7e609695cd09c2 59945437088136c5fa2f9bb8573d5d02623fe7cb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 59945437088136c5fa2f9bb8573d5d02623fe7cb 9eebcb77a7e2b240cb7dce095bbe608b5de91cc8 1 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'evolve', 'user': 'test'} $ hg obslog --patch @ 9eebcb77a7e2 (3) phase-divergent update to 3074c7249d20: + | rewritten(description, parent, content) from 599454370881 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) | x 599454370881 (2) E2 - | rewritten(description, parent, content) as 9eebcb77a7e2 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) - | (No patch available, changesets rebased) + | rewritten(description, content) from 3074c7249d20 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 3074c7249d20 -r 599454370881 changeset-description + | --- a/changeset-description + | +++ b/changeset-description + | @@ -1,1 +1,1 @@ + | -E1 + | +E2 + | + | diff -r 3074c7249d20 -r 599454370881 letters + | --- a/letters Thu Jan 01 00:00:00 1970 +0000 + | +++ b/letters Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,7 +1,7 @@ + | a + | b + | c + | -D + | +d + | e + | f + | g + | diff -r 3074c7249d20 -r 599454370881 numbers + | --- a/numbers Thu Jan 01 00:00:00 1970 +0000 + | +++ b/numbers Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,9 +1,9 @@ + | 1 + | 2 + | 3 + | -four + | +4 + | 5 + | 6 + | -7 + | +seven + | 8 + | nine + | diff -r 3074c7249d20 -r 599454370881 romans + | --- a/romans Thu Jan 01 00:00:00 1970 +0000 + | +++ b/romans Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,5 +1,5 @@ + | I + | -II + | +ii + | III + | IV + | V + | | o 3074c7249d20 (1) E1 - rewritten(description, content) as 599454370881 using amend by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 3074c7249d20 -r 599454370881 changeset-description - --- a/changeset-description - +++ b/changeset-description - @@ -1,1 +1,1 @@ - -E1 - +E2 - - diff -r 3074c7249d20 -r 599454370881 letters - --- a/letters Thu Jan 01 00:00:00 1970 +0000 - +++ b/letters Thu Jan 01 00:00:00 1970 +0000 - @@ -1,7 +1,7 @@ - a - b - c - -D - +d - e - f - g - diff -r 3074c7249d20 -r 599454370881 numbers - --- a/numbers Thu Jan 01 00:00:00 1970 +0000 - +++ b/numbers Thu Jan 01 00:00:00 1970 +0000 - @@ -1,9 +1,9 @@ - 1 - 2 - 3 - -four - +4 - 5 - 6 - -7 - +seven - 8 - nine - diff -r 3074c7249d20 -r 599454370881 romans - --- a/romans Thu Jan 01 00:00:00 1970 +0000 - +++ b/romans Thu Jan 01 00:00:00 1970 +0000 - @@ -1,5 +1,5 @@ - I - -II - +ii - III - IV - V - $ cd .. diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-progress.t diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-public-content-divergent-corner-cases.t --- a/tests/test-evolve-public-content-divergent-corner-cases.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-public-content-divergent-corner-cases.t Fri May 08 20:36:29 2020 +0800 @@ -137,14 +137,14 @@ base: [2] added c rebasing "other" content-divergent changeset f5f9b4fc8b77 on c9241b0f2d5b 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - committed as 3b336cbee992 - working directory is now at 3b336cbee992 + committed as 0941937e8302 + working directory is now at 0941937e8302 $ hg glog -p - @ 8:3b336cbee992 phase-divergent update to c0d7ee6604ea: + @ 8:0941937e8302 phase-divergent update to c0d7ee6604ea: | draft | - | diff -r c0d7ee6604ea -r 3b336cbee992 c + | diff -r c0d7ee6604ea -r 0941937e8302 c | --- a/c Thu Jan 01 00:00:00 1970 +0000 | +++ b/c Thu Jan 01 00:00:00 1970 +0000 | @@ -1,1 +1,2 @@ @@ -366,22 +366,25 @@ +a + $ hg debugobsolete + 9150fe93bec603cd88d05cda9f6ff13420cb53e9 93cd84bbdacaeb8f881c29a609dbdd30c38cbc57 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'prune', 'user': 'test'} + 9150fe93bec603cd88d05cda9f6ff13420cb53e9 e568fd1029bbe9d506275bbb9a034a0509d80324 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'prune', 'user': 'test'} $ hg obslog --all --rev tip --patch @ 93cd84bbdaca (5) added d + | amended(content) from 9150fe93bec6 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | diff -r 9150fe93bec6 -r 93cd84bbdaca d + | --- a/d Thu Jan 01 00:00:00 1970 +0000 + | +++ b/d Thu Jan 01 00:00:00 1970 +0000 + | @@ -1,1 +1,1 @@ + | -d + | +dd + | | | * e568fd1029bb (4) added c e - |/ + |/ rewritten(description, parent, content) from 9150fe93bec6 using prune by test (Thu Jan 01 00:00:00 1970 +0000) + | (No patch available, changesets rebased) + | x 9150fe93bec6 (3) added d - amended(content) as 93cd84bbdaca using prune by test (Thu Jan 01 00:00:00 1970 +0000) - diff -r 9150fe93bec6 -r 93cd84bbdaca d - --- a/d Thu Jan 01 00:00:00 1970 +0000 - +++ b/d Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,1 @@ - -d - +dd - - rewritten(description, parent, content) as e568fd1029bb using prune by test (Thu Jan 01 00:00:00 1970 +0000) - (No patch available, changesets rebased) $ hg evolve --content-divergent --any --update @@ -444,27 +447,27 @@ continue: hg evolve --continue $ hg evolve --continue - committed as bc1f4610744c - working directory is now at bc1f4610744c + committed as bb4d94ae1a5a + working directory is now at bb4d94ae1a5a $ hg export # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 - # Node ID bc1f4610744c6aa0e851d3876a61bfff6243b31c + # Node ID bb4d94ae1a5ac031ba524ef30850f32b9b50a560 # Parent 93cd84bbdacaeb8f881c29a609dbdd30c38cbc57 phase-divergent update to 93cd84bbdaca: added c e - diff -r 93cd84bbdaca -r bc1f4610744c d + diff -r 93cd84bbdaca -r bb4d94ae1a5a d --- a/d Thu Jan 01 00:00:00 1970 +0000 +++ b/d Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +1,1 @@ -dd +resolved - diff -r 93cd84bbdaca -r bc1f4610744c e + diff -r 93cd84bbdaca -r bb4d94ae1a5a e --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/e Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ @@ -752,16 +755,25 @@ @@ -0,0 +1,1 @@ +c_F + $ hg debugobsolete + 4ab2719bbab9c0f4addf11ab7fa3cf3e1a832c2d c7d2d47c7240562be5cbd1a24080dd0396178709 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 77ccbf8d837e0eb67e09569335146263e7d61551 a52ac76b45f523a039fc4a938d79874f4bdb1a85 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 4ab2719bbab9c0f4addf11ab7fa3cf3e1a832c2d b4a584aea4bd8d771184530d445a582251275f37 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 77ccbf8d837e0eb67e09569335146263e7d61551 8ae8db670b4ad2385b9e008122af42ef6048a675 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + b4a584aea4bd8d771184530d445a582251275f37 0773642cfa95002f7937f44bec95dd208564c64e 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 0773642cfa95002f7937f44bec95dd208564c64e c7d2d47c7240562be5cbd1a24080dd0396178709 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} + 8ae8db670b4ad2385b9e008122af42ef6048a675 6a87ed4aa31771f9041ca1260a91f7185f38f15c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} + 6a87ed4aa31771f9041ca1260a91f7185f38f15c a52ac76b45f523a039fc4a938d79874f4bdb1a85 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'evolve', 'user': 'test'} $ hg obslog --rev a52ac76b45f5 @ a52ac76b45f5 (8) c_F - |\ + |\ rewritten from 6a87ed4aa317 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rebased(parent) from 77ccbf8d837e using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | | x | 6a87ed4aa317 (12) c_F - | | rewritten as a52ac76b45f5 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + | | rebased(parent) from 8ae8db670b4a using evolve by test (Thu Jan 01 00:00:00 1970 +0000) | | x | 8ae8db670b4a (10) c_F - |/ rebased(parent) as 6a87ed4aa317 using evolve by test (Thu Jan 01 00:00:00 1970 +0000) + |/ rebased(parent) from 77ccbf8d837e using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | x 77ccbf8d837e (6) c_F - rebased(parent) as 8ae8db670b4a using rebase by test (Thu Jan 01 00:00:00 1970 +0000) - rebased(parent) as a52ac76b45f5 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-public-content-divergent-main.t --- a/tests/test-evolve-public-content-divergent-main.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-public-content-divergent-main.t Fri May 08 20:36:29 2020 +0800 @@ -43,7 +43,7 @@ Make an amend and change phase to public: - $ sed -i "1 i I am first" b + $ printf "I am first\nb\n" > b $ hg amend $ hg phase --public @@ -77,16 +77,16 @@ base: [1] added b merging b 0 files updated, 1 files merged, 0 files removed, 0 files unresolved - committed as c1aa9cfb6cf8 - working directory is now at c1aa9cfb6cf8 + committed as b11d193ede1d + working directory is now at b11d193ede1d Following graph log shows that it correctly merged the two divergent csets: $ hg glog -p - @ 5:c1aa9cfb6cf8 phase-divergent update to 44f360db368f: + @ 5:b11d193ede1d phase-divergent update to 44f360db368f: | draft | - | diff -r 44f360db368f -r c1aa9cfb6cf8 b + | diff -r 44f360db368f -r b11d193ede1d b | --- a/b Thu Jan 01 00:00:00 1970 +0000 | +++ b/b Thu Jan 01 00:00:00 1970 +0000 | @@ -1,2 +1,3 @@ @@ -181,11 +181,11 @@ (no more unresolved files) continue: hg evolve --continue $ hg evolve --continue - committed as 1a739394e9d4 - working directory is now at 1a739394e9d4 + committed as 4ae447c511d3 + working directory is now at 4ae447c511d3 $ hg glog - @ 5:1a739394e9d4 phase-divergent update to 580f2d01e52c: + @ 5:4ae447c511d3 phase-divergent update to 580f2d01e52c: | draft | o 2:580f2d01e52c added b @@ -271,11 +271,11 @@ base: [3] added d rebasing "other" content-divergent changeset 4291d72ee19a on 155349b645be 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - committed as 4cbe48a0c3d9 - working directory is now at 4cbe48a0c3d9 + committed as 07aa587dcd2b + working directory is now at 07aa587dcd2b $ hg glog -l 1 - @ 8:4cbe48a0c3d9 phase-divergent update to 93cd84bbdaca: + @ 8:07aa587dcd2b phase-divergent update to 93cd84bbdaca: | draft ~ @@ -392,20 +392,20 @@ $ hg evolve --continue evolving 4:f31bcc378766 "added d c e" 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - committed as 412dde898967 - working directory is now at 412dde898967 + committed as 4bce4ff71bf9 + working directory is now at 4bce4ff71bf9 $ hg export # HG changeset patch # User test # Date 0 0 # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 412dde898967b50e7d334aefff778a9af46d29d1 + # Node ID 4bce4ff71bf901840aebb0aa87716e878938b55e # Parent 93cd84bbdacaeb8f881c29a609dbdd30c38cbc57 phase-divergent update to 93cd84bbdaca: added d c e - diff -r 93cd84bbdaca -r 412dde898967 e + diff -r 93cd84bbdaca -r 4bce4ff71bf9 e --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/e Thu Jan 01 00:00:00 1970 +0000 @@ -0,0 +1,1 @@ @@ -500,7 +500,7 @@ continue: hg evolve --continue $ hg evolve --continue - committed as 2a0f44767904 + committed as d87a8f56f14a working directory is now at 93cd84bbdaca $ hg evolve -l @@ -628,7 +628,7 @@ continue: hg evolve --continue $ hg evolve --continue - committed as b9082a9e66ce + committed as ba823b8ff683 working directory is now at 93cd84bbdaca $ hg evolve -l diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve-templates.t --- a/tests/test-evolve-templates.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve-templates.t Fri May 08 20:36:29 2020 +0800 @@ -19,8 +19,11 @@ > {if(predecessors, "\n semi-colon: {join(predecessors, "; ")}")}\ > {if(successors, "\n Successors: {successors}")}\ > {if(successors, "\n semi-colon: {join(successors, "; ")}")}\ - > {if(obsfate, "\n Fate: {join(obsfate, "\n Fate: ")}\n")}\n' - > fatelog = log -G -T '{node|short}\n{if(obsfate, " Obsfate: {join(obsfate, "; ")}\n\n")}' + > {if(obsfate, "{obsfate % "\n Fate: {fate}"}")}\ + > {if(obsorigin, "{obsorigin % "\n Origin: {origin}"}")}\n\n' + > fateoriginlog = log -G -T '{node|short}\ + > {if(obsfate, "\n Obsfate: {join(obsfate, "; ")}")}\ + > {if(obsorigin, "\n Obsorigin: {join(obsorigin, "; ")}")}\n\n' > EOF Test templates on amended commit @@ -74,17 +77,19 @@ Predecessors template should show current revision as it is the working copy $ hg olog tip o d004c8f274b9 (3) A2 + | reworded(description) from a468dc9b3633 using amend by test2 (Thu Apr 19 04:25:21 2001 +0000) | x a468dc9b3633 (2) A1 - | reworded(description) as d004c8f274b9 using amend by test2 (Thu Apr 19 04:25:21 2001 +0000) + | rewritten(description, content) from 471f378eab4c using amend by test (Fri Feb 13 23:31:30 2009 +0000) | @ 471f378eab4c (1) A0 - rewritten(description, content) as a468dc9b3633 using amend by test (Fri Feb 13 23:31:30 2009 +0000) $ hg tlog o d004c8f274b9 | Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c + | Origin: rewritten using amend from 1:471f378eab4c by test, test2 + | | @ 471f378eab4c |/ Successors: 3:d004c8f274b9 | semi-colon: 3:d004c8f274b9 @@ -113,8 +118,9 @@ summary: ROOT - $ hg fatelog -q + $ hg fateoriginlog -q o d004c8f274b9 + | Obsorigin: rewritten using amend from 1:471f378eab4c | | @ 471f378eab4c |/ Obsfate: rewritten using amend as 3:d004c8f274b9 @@ -122,16 +128,18 @@ o ea207398892e - $ hg fatelog + $ hg fateoriginlog o d004c8f274b9 + | Obsorigin: rewritten using amend from 1:471f378eab4c by test, test2 | | @ 471f378eab4c |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2 | o ea207398892e - $ hg fatelog -v + $ hg fateoriginlog -v o d004c8f274b9 + | Obsorigin: rewritten using amend from 1:471f378eab4c by test, test2 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000) | | @ 471f378eab4c |/ Obsfate: rewritten using amend as 3:d004c8f274b9 by test, test2 (between 2001-04-19 04:25 +0000 and 2009-02-13 23:31 +0000) @@ -169,6 +177,8 @@ o d004c8f274b9 | Predecessors: 2:a468dc9b3633 | semi-colon: 2:a468dc9b3633 + | Origin: reworded using amend from 2:a468dc9b3633 by test2 + | | @ a468dc9b3633 |/ Successors: 3:d004c8f274b9 | semi-colon: 3:d004c8f274b9 @@ -182,12 +192,15 @@ o d004c8f274b9 | Predecessors: 2:a468dc9b3633 | semi-colon: 2:a468dc9b3633 + | Origin: reworded using amend from 2:a468dc9b3633 by test2 + | | @ a468dc9b3633 |/ Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c | Successors: 3:d004c8f274b9 | semi-colon: 3:d004c8f274b9 | Fate: reworded using amend as 3:d004c8f274b9 by test2 + | Origin: rewritten using amend from 1:471f378eab4c | | x 471f378eab4c |/ Successors: 2:a468dc9b3633 @@ -196,8 +209,9 @@ | o ea207398892e - $ hg fatelog -v + $ hg fateoriginlog -v o d004c8f274b9 + | Obsorigin: reworded using amend from 2:a468dc9b3633 by test2 (at 2001-04-19 04:25 +0000) | | @ a468dc9b3633 |/ Obsfate: reworded using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000) @@ -215,12 +229,15 @@ @ d004c8f274b9 | Predecessors: 2:a468dc9b3633 | semi-colon: 2:a468dc9b3633 + | Origin: reworded using amend from 2:a468dc9b3633 by test2 + | | x a468dc9b3633 |/ Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c | Successors: 3:d004c8f274b9 | semi-colon: 3:d004c8f274b9 | Fate: reworded using amend as 3:d004c8f274b9 by test2 + | Origin: rewritten using amend from 1:471f378eab4c | | x 471f378eab4c |/ Successors: 2:a468dc9b3633 @@ -229,17 +246,19 @@ | o ea207398892e - $ hg fatelog -v + $ hg fateoriginlog -v @ d004c8f274b9 | o ea207398892e - $ hg fatelog -v --hidden + $ hg fateoriginlog -v --hidden @ d004c8f274b9 + | Obsorigin: reworded using amend from 2:a468dc9b3633 by test2 (at 2001-04-19 04:25 +0000) | | x a468dc9b3633 |/ Obsfate: reworded using amend as 3:d004c8f274b9 by test2 (at 2001-04-19 04:25 +0000) + | Obsorigin: rewritten using amend from 1:471f378eab4c by test (at 2009-02-13 23:31 +0000) | | x 471f378eab4c |/ Obsfate: rewritten using amend as 2:a468dc9b3633 by test (at 2009-02-13 23:31 +0000) @@ -345,9 +364,13 @@ o f257fde29c7a | Predecessors: 1:471597cad322 | semi-colon: 1:471597cad322 + | Origin: split using split from 1:471597cad322 + | o 337fec4d2edc | Predecessors: 1:471597cad322 | semi-colon: 1:471597cad322 + | Origin: split using split from 1:471597cad322 + | | @ 471597cad322 |/ Successors: 2:337fec4d2edc 3:f257fde29c7a | semi-colon: 2:337fec4d2edc 3:f257fde29c7a @@ -355,10 +378,12 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog o f257fde29c7a + | Obsorigin: split using split from 1:471597cad322 | o 337fec4d2edc + | Obsorigin: split using split from 1:471597cad322 | | @ 471597cad322 |/ Obsfate: split using split as 2:337fec4d2edc, 3:f257fde29c7a @@ -384,9 +409,13 @@ @ f257fde29c7a | Predecessors: 1:471597cad322 | semi-colon: 1:471597cad322 + | Origin: split using split from 1:471597cad322 + | o 337fec4d2edc | Predecessors: 1:471597cad322 | semi-colon: 1:471597cad322 + | Origin: split using split from 1:471597cad322 + | | x 471597cad322 |/ Successors: 2:337fec4d2edc 3:f257fde29c7a | semi-colon: 2:337fec4d2edc 3:f257fde29c7a @@ -394,10 +423,12 @@ | o ea207398892e - $ hg fatelog --hidden + $ hg fateoriginlog --hidden @ f257fde29c7a + | Obsorigin: split using split from 1:471597cad322 | o 337fec4d2edc + | Obsorigin: split using split from 1:471597cad322 | | x 471597cad322 |/ Obsfate: split using split as 2:337fec4d2edc, 3:f257fde29c7a @@ -476,6 +507,8 @@ o eb5a0daa2192 | Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c + | Origin: folded using fold from 1:471f378eab4c + | | @ 471f378eab4c |/ Successors: 3:eb5a0daa2192 | semi-colon: 3:eb5a0daa2192 @@ -483,8 +516,9 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog o eb5a0daa2192 + | Obsorigin: folded using fold from 1:471f378eab4c | | @ 471f378eab4c |/ Obsfate: folded using fold as 3:eb5a0daa2192 @@ -504,6 +538,8 @@ o eb5a0daa2192 | Predecessors: 2:0dec01379d3b 1:471f378eab4c | semi-colon: 2:0dec01379d3b; 1:471f378eab4c + | Origin: folded using fold from 1:471f378eab4c, 2:0dec01379d3b + | | @ 0dec01379d3b | | Successors: 3:eb5a0daa2192 | | semi-colon: 3:eb5a0daa2192 @@ -516,8 +552,9 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog o eb5a0daa2192 + | Obsorigin: folded using fold from 1:471f378eab4c, 2:0dec01379d3b | | @ 0dec01379d3b | | Obsfate: folded using fold as 3:eb5a0daa2192 @@ -544,6 +581,8 @@ @ eb5a0daa2192 | Predecessors: 2:0dec01379d3b 1:471f378eab4c | semi-colon: 2:0dec01379d3b; 1:471f378eab4c + | Origin: folded using fold from 1:471f378eab4c, 2:0dec01379d3b + | | x 0dec01379d3b | | Successors: 3:eb5a0daa2192 | | semi-colon: 3:eb5a0daa2192 @@ -556,8 +595,9 @@ | o ea207398892e - $ hg fatelog --hidden + $ hg fateoriginlog --hidden @ eb5a0daa2192 + | Obsorigin: folded using fold from 1:471f378eab4c, 2:0dec01379d3b | | x 0dec01379d3b | | Obsfate: folded using fold as 3:eb5a0daa2192 @@ -651,9 +691,13 @@ * 019fadeab383 | Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c + | Origin: reworded using amend from 1:471f378eab4c + | | * fdf9bde5129a |/ Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c + | Origin: reworded using amend from 1:471f378eab4c + | | @ 471f378eab4c |/ Successors: 2:fdf9bde5129a; 4:019fadeab383 | semi-colon: 2:fdf9bde5129a; 4:019fadeab383 @@ -662,11 +706,13 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog * 019fadeab383 + | Obsorigin: reworded using amend from 1:471f378eab4c | | * fdf9bde5129a - |/ + |/ Obsorigin: reworded using amend from 1:471f378eab4c + | | @ 471f378eab4c |/ Obsfate: reworded using amend as 2:fdf9bde5129a; reworded using amend as 4:019fadeab383 | @@ -685,7 +731,7 @@ o ea207398892e - $ hg fatelog + $ hg fateoriginlog * 019fadeab383 | | @ fdf9bde5129a @@ -697,16 +743,21 @@ * 019fadeab383 | Predecessors: 3:65b757b745b9 | semi-colon: 3:65b757b745b9 + | Origin: reworded using amend from 3:65b757b745b9 + | | x 65b757b745b9 |/ Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c | Successors: 4:019fadeab383 | semi-colon: 4:019fadeab383 | Fate: reworded using amend as 4:019fadeab383 + | Origin: reworded using amend from 1:471f378eab4c | | @ fdf9bde5129a |/ Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c + | Origin: reworded using amend from 1:471f378eab4c + | | x 471f378eab4c |/ Successors: 2:fdf9bde5129a; 3:65b757b745b9 | semi-colon: 2:fdf9bde5129a; 3:65b757b745b9 @@ -715,14 +766,17 @@ | o ea207398892e - $ hg fatelog --hidden + $ hg fateoriginlog --hidden * 019fadeab383 + | Obsorigin: reworded using amend from 3:65b757b745b9 | | x 65b757b745b9 |/ Obsfate: reworded using amend as 4:019fadeab383 + | Obsorigin: reworded using amend from 1:471f378eab4c | | @ fdf9bde5129a - |/ + |/ Obsorigin: reworded using amend from 1:471f378eab4c + | | x 471f378eab4c |/ Obsfate: reworded using amend as 2:fdf9bde5129a; reworded using amend as 3:65b757b745b9 | @@ -813,6 +867,8 @@ o eb5a0daa2192 | Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c + | Origin: folded using fold from 1:471f378eab4c + | | @ 471f378eab4c |/ Successors: 4:eb5a0daa2192 | semi-colon: 4:eb5a0daa2192 @@ -820,8 +876,9 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog o eb5a0daa2192 + | Obsorigin: folded using fold from 1:471f378eab4c | | @ 471f378eab4c |/ Obsfate: folded using fold as 4:eb5a0daa2192 @@ -838,6 +895,8 @@ o eb5a0daa2192 | Predecessors: 2:0dec01379d3b 1:471f378eab4c | semi-colon: 2:0dec01379d3b; 1:471f378eab4c + | Origin: folded using amend, fold from 1:471f378eab4c, 2:0dec01379d3b + | | @ 0dec01379d3b | | Successors: 4:eb5a0daa2192 | | semi-colon: 4:eb5a0daa2192 @@ -850,8 +909,9 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog o eb5a0daa2192 + | Obsorigin: folded using amend, fold from 1:471f378eab4c, 2:0dec01379d3b | | @ 0dec01379d3b | | Obsfate: rewritten using amend, fold as 4:eb5a0daa2192 @@ -872,6 +932,8 @@ o eb5a0daa2192 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664 + | Origin: folded using fold from 1:471f378eab4c, 3:b7ea6d14e664 + | | @ b7ea6d14e664 | | Successors: 4:eb5a0daa2192 | | semi-colon: 4:eb5a0daa2192 @@ -884,8 +946,9 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog o eb5a0daa2192 + | Obsorigin: folded using fold from 1:471f378eab4c, 3:b7ea6d14e664 | | @ b7ea6d14e664 | | Obsfate: folded using fold as 4:eb5a0daa2192 @@ -907,12 +970,15 @@ @ eb5a0daa2192 | Predecessors: 1:471f378eab4c 3:b7ea6d14e664 | semi-colon: 1:471f378eab4c; 3:b7ea6d14e664 + | Origin: folded using fold from 1:471f378eab4c, 3:b7ea6d14e664 + | | x b7ea6d14e664 | | Predecessors: 2:0dec01379d3b | | semi-colon: 2:0dec01379d3b | | Successors: 4:eb5a0daa2192 | | semi-colon: 4:eb5a0daa2192 | | Fate: folded using fold as 4:eb5a0daa2192 + | | Origin: reworded using amend from 2:0dec01379d3b | | | | x 0dec01379d3b | |/ Successors: 3:b7ea6d14e664 @@ -926,11 +992,13 @@ | o ea207398892e - $ hg fatelog --hidden + $ hg fateoriginlog --hidden @ eb5a0daa2192 + | Obsorigin: folded using fold from 1:471f378eab4c, 3:b7ea6d14e664 | | x b7ea6d14e664 | | Obsfate: folded using fold as 4:eb5a0daa2192 + | | Obsorigin: reworded using amend from 2:0dec01379d3b | | | | x 0dec01379d3b | |/ Obsfate: reworded using amend as 3:b7ea6d14e664 @@ -1036,6 +1104,8 @@ o 7a230b46bf61 | Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c + | Origin: reworded using amend from 1:471f378eab4c + | | @ 471f378eab4c |/ Successors: 2:7a230b46bf61 | semi-colon: 2:7a230b46bf61 @@ -1043,8 +1113,9 @@ | o ea207398892e - $ hg fatelog --hidden -v + $ hg fateoriginlog --hidden -v o 7a230b46bf61 + | Obsorigin: reworded using amend from 1:471f378eab4c by test (at 1970-01-01 00:00 +0000) | | @ 471f378eab4c |/ Obsfate: reworded using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000) @@ -1058,7 +1129,7 @@ | o ea207398892e - $ hg fatelog -v + $ hg fateoriginlog -v @ 7a230b46bf61 | o ea207398892e @@ -1067,6 +1138,8 @@ @ 7a230b46bf61 | Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c + | Origin: reworded using amend from 1:471f378eab4c + | | x 471f378eab4c |/ Successors: 2:7a230b46bf61 | semi-colon: 2:7a230b46bf61 @@ -1074,8 +1147,9 @@ | o ea207398892e - $ hg fatelog --hidden -v + $ hg fateoriginlog --hidden -v @ 7a230b46bf61 + | Obsorigin: reworded using amend from 1:471f378eab4c by test (at 1970-01-01 00:00 +0000) | | x 471f378eab4c |/ Obsfate: reworded using amend as 2:7a230b46bf61 by test (at 1970-01-01 00:00 +0000) @@ -1116,7 +1190,7 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog @ f897c6137566 | o ea207398892e @@ -1131,6 +1205,8 @@ o f897c6137566 | Predecessors: 2:0dec01379d3b | semi-colon: 2:0dec01379d3b + | Origin: rewritten from 2:0dec01379d3b + | | @ 0dec01379d3b | | Predecessors: 1:471f378eab4c | | semi-colon: 1:471f378eab4c @@ -1138,6 +1214,7 @@ | | semi-colon: 3:f897c6137566; 1:471f378eab4c | | Fate: rewritten as 3:f897c6137566 | | Fate: rewritten as 1:471f378eab4c + | | Origin: rewritten from 1:471f378eab4c | | | x 471f378eab4c |/ Predecessors: 2:0dec01379d3b @@ -1145,17 +1222,21 @@ | Successors: 2:0dec01379d3b | semi-colon: 2:0dec01379d3b | Fate: rewritten as 2:0dec01379d3b + | Origin: rewritten from 2:0dec01379d3b | o ea207398892e - $ hg fatelog + $ hg fateoriginlog o f897c6137566 + | Obsorigin: rewritten from 2:0dec01379d3b | | @ 0dec01379d3b | | Obsfate: rewritten as 3:f897c6137566; rewritten as 1:471f378eab4c + | | Obsorigin: rewritten from 1:471f378eab4c | | | x 471f378eab4c |/ Obsfate: rewritten as 2:0dec01379d3b + | Obsorigin: rewritten from 2:0dec01379d3b | o ea207398892e @@ -1167,13 +1248,16 @@ o f897c6137566 | Predecessors: 1:471f378eab4c | semi-colon: 1:471f378eab4c + | Origin: rewritten from 1:471f378eab4c + | | @ 471f378eab4c |/ Fate: pruned | o ea207398892e - $ hg fatelog + $ hg fateoriginlog o f897c6137566 + | Obsorigin: rewritten from 1:471f378eab4c | | @ 471f378eab4c |/ Obsfate: pruned @@ -1188,7 +1272,7 @@ | @ ea207398892e - $ hg fatelog + $ hg fateoriginlog o f897c6137566 | @ ea207398892e @@ -1197,6 +1281,8 @@ o f897c6137566 | Predecessors: 2:0dec01379d3b | semi-colon: 2:0dec01379d3b + | Origin: rewritten from 2:0dec01379d3b + | | x 0dec01379d3b | | Predecessors: 1:471f378eab4c | | semi-colon: 1:471f378eab4c @@ -1204,6 +1290,7 @@ | | semi-colon: 3:f897c6137566; 1:471f378eab4c | | Fate: rewritten as 3:f897c6137566 | | Fate: rewritten as 1:471f378eab4c + | | Origin: rewritten from 1:471f378eab4c | | | x 471f378eab4c |/ Predecessors: 2:0dec01379d3b @@ -1211,6 +1298,7 @@ | Successors: 2:0dec01379d3b | semi-colon: 2:0dec01379d3b | Fate: rewritten as 2:0dec01379d3b + | Origin: rewritten from 2:0dec01379d3b | @ ea207398892e @@ -1383,9 +1471,13 @@ @ 0b997eb7ceee | Predecessors: 6:4a004186e638 | semi-colon: 6:4a004186e638 + | Origin: reworded using amend from 6:4a004186e638 + | | * b18bc8331526 |/ Predecessors: 6:4a004186e638 | semi-colon: 6:4a004186e638 + | Origin: reworded using amend from 6:4a004186e638 + | | * ba2ed02b0c9a | | | x 4a004186e638 @@ -1400,11 +1492,13 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog @ 0b997eb7ceee + | Obsorigin: reworded using amend from 6:4a004186e638 | | * b18bc8331526 - |/ + |/ Obsorigin: reworded using amend from 6:4a004186e638 + | | * ba2ed02b0c9a | | | x 4a004186e638 @@ -1420,12 +1514,18 @@ @ 0b997eb7ceee | Predecessors: 6:4a004186e638 | semi-colon: 6:4a004186e638 + | Origin: reworded using amend from 6:4a004186e638 + | | * b18bc8331526 |/ Predecessors: 6:4a004186e638 | semi-colon: 6:4a004186e638 + | Origin: reworded using amend from 6:4a004186e638 + | | * ba2ed02b0c9a | | Predecessors: 4:9bd10a0775e4 | | semi-colon: 4:9bd10a0775e4 + | | Origin: split from 4:9bd10a0775e4 + | | | x 4a004186e638 |/ Predecessors: 4:9bd10a0775e4 | semi-colon: 4:9bd10a0775e4 @@ -1433,10 +1533,13 @@ | semi-colon: 8:b18bc8331526; 9:0b997eb7ceee | Fate: reworded using amend as 8:b18bc8331526 | Fate: reworded using amend as 9:0b997eb7ceee + | Origin: split from 4:9bd10a0775e4 | * dd800401bd8c | Predecessors: 4:9bd10a0775e4 | semi-colon: 4:9bd10a0775e4 + | Origin: split from 4:9bd10a0775e4 + | | x 9bd10a0775e4 |/ Successors: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a | semi-colon: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a @@ -1445,6 +1548,8 @@ o f897c6137566 | Predecessors: 2:0dec01379d3b | semi-colon: 2:0dec01379d3b + | Origin: rewritten from 2:0dec01379d3b + | | x 0dec01379d3b | | Predecessors: 1:471f378eab4c | | semi-colon: 1:471f378eab4c @@ -1452,6 +1557,7 @@ | | semi-colon: 3:f897c6137566; 1:471f378eab4c | | Fate: rewritten as 3:f897c6137566 | | Fate: rewritten as 1:471f378eab4c + | | Origin: rewritten from 1:471f378eab4c | | | x 471f378eab4c |/ Predecessors: 2:0dec01379d3b @@ -1459,31 +1565,40 @@ | Successors: 2:0dec01379d3b | semi-colon: 2:0dec01379d3b | Fate: rewritten as 2:0dec01379d3b + | Origin: rewritten from 2:0dec01379d3b | o ea207398892e - $ hg fatelog --hidden + $ hg fateoriginlog --hidden @ 0b997eb7ceee + | Obsorigin: reworded using amend from 6:4a004186e638 | | * b18bc8331526 - |/ + |/ Obsorigin: reworded using amend from 6:4a004186e638 + | | * ba2ed02b0c9a + | | Obsorigin: split from 4:9bd10a0775e4 | | | x 4a004186e638 |/ Obsfate: reworded using amend as 8:b18bc8331526; reworded using amend as 9:0b997eb7ceee + | Obsorigin: split from 4:9bd10a0775e4 | * dd800401bd8c + | Obsorigin: split from 4:9bd10a0775e4 | | x 9bd10a0775e4 |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a | o f897c6137566 + | Obsorigin: rewritten from 2:0dec01379d3b | | x 0dec01379d3b | | Obsfate: rewritten as 3:f897c6137566; rewritten as 1:471f378eab4c + | | Obsorigin: rewritten from 1:471f378eab4c | | | x 471f378eab4c |/ Obsfate: rewritten as 2:0dec01379d3b + | Obsorigin: rewritten from 2:0dec01379d3b | o ea207398892e @@ -1499,15 +1614,23 @@ * eceed8f98ffc | Predecessors: 4:9bd10a0775e4 | semi-colon: 4:9bd10a0775e4 + | Origin: rewritten using rebase from 4:9bd10a0775e4 + | | * 0b997eb7ceee | | Predecessors: 4:9bd10a0775e4 | | semi-colon: 4:9bd10a0775e4 + | | Origin: rewritten using amend from 4:9bd10a0775e4 + | | * | b18bc8331526 |/ Predecessors: 4:9bd10a0775e4 | semi-colon: 4:9bd10a0775e4 + | Origin: rewritten using amend from 4:9bd10a0775e4 + | * dd800401bd8c | Predecessors: 4:9bd10a0775e4 | semi-colon: 4:9bd10a0775e4 + | Origin: split from 4:9bd10a0775e4 + | | @ 9bd10a0775e4 |/ Successors: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc; 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc | semi-colon: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc; 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc @@ -1518,14 +1641,18 @@ | o ea207398892e - $ hg fatelog + $ hg fateoriginlog * eceed8f98ffc + | Obsorigin: rewritten using rebase from 4:9bd10a0775e4 | | * 0b997eb7ceee + | | Obsorigin: rewritten using amend from 4:9bd10a0775e4 | | * | b18bc8331526 - |/ + |/ Obsorigin: rewritten using amend from 4:9bd10a0775e4 + | * dd800401bd8c + | Obsorigin: split from 4:9bd10a0775e4 | | @ 9bd10a0775e4 |/ Obsfate: split using amend, rebase as 5:dd800401bd8c, 9:0b997eb7ceee, 10:eceed8f98ffc; split using amend, rebase as 5:dd800401bd8c, 8:b18bc8331526, 10:eceed8f98ffc @@ -1564,9 +1691,65 @@ | o ea207398892e - $ hg fatelog -v + $ hg fateoriginlog -v @ 471f378eab4c | Obsfate: pruned using prune by test (at 1970-01-01 00:00 +0000) | o ea207398892e + +Test templates when having multiple unrelated predecessors +========================================================== + + $ hg init $TESTTMP/templates-local-multipreds + $ cd $TESTTMP/templates-local-multipreds + $ mkcommit R + $ mkcommit A + $ mkcommit B + $ hg up 'desc(R)' + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ mkcommit C + created new head + $ hg up 'desc(R)' + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ mkcommit Z + created new head + $ hg up 'desc(R)' + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg prune -r 'desc(A) + desc(B)' -s 'desc(Z)' --fold + 2 changesets pruned + $ hg prune -r 'desc(C)' -s 'desc(Z)' + 1 changesets pruned + $ hg debugobsolete + 944ade52b6a1afe01817e7cae4c3006f1f128279 4568aafd15c0ac96a9828ce8418556bb1e76d6d7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'fold-id': 'c59cbeaa', 'fold-idx': '1', 'fold-size': '2', 'operation': 'prune', 'user': 'test'} + 36ca49338d3a303e90126c28b1713092aaf3e9ed 4568aafd15c0ac96a9828ce8418556bb1e76d6d7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'fold-id': 'c59cbeaa', 'fold-idx': '2', 'fold-size': '2', 'operation': 'prune', 'user': 'test'} + 5b3370228fe5fa9824b8df21cd54876ef23ac745 4568aafd15c0ac96a9828ce8418556bb1e76d6d7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'prune', 'user': 'test'} + $ hg tlog + o 4568aafd15c0 + | + @ 7ca5bfdbe243 + + $ hg tlog --hidden + o 4568aafd15c0 + | Predecessors: 2:36ca49338d3a 3:5b3370228fe5 1:944ade52b6a1 + | semi-colon: 2:36ca49338d3a; 3:5b3370228fe5; 1:944ade52b6a1 + | Origin: folded using prune from 1:944ade52b6a1, 2:36ca49338d3a + | Origin: rewritten using prune from 3:5b3370228fe5 + | + | x 5b3370228fe5 + |/ Successors: 4:4568aafd15c0 + | semi-colon: 4:4568aafd15c0 + | Fate: rewritten using prune as 4:4568aafd15c0 + | + | x 36ca49338d3a + | | Successors: 4:4568aafd15c0 + | | semi-colon: 4:4568aafd15c0 + | | Fate: folded using prune as 4:4568aafd15c0 + | | + | x 944ade52b6a1 + |/ Successors: 4:4568aafd15c0 + | semi-colon: 4:4568aafd15c0 + | Fate: folded using prune as 4:4568aafd15c0 + | + @ 7ca5bfdbe243 + diff -r 90fbbc29b93a -r be5aa681c122 tests/test-evolve.t --- a/tests/test-evolve.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-evolve.t Fri May 08 20:36:29 2020 +0800 @@ -757,7 +757,7 @@ Test olog - $ hg olog | head -n 10 # hg touch makes the output unstable (fix it with devel option for more stable touch) + $ hg olog --no-origin | head -n 10 # hg touch makes the output unstable (fix it with devel option for more stable touch) @ d26d339c513f (12) add 4 |\ x | ce341209337f (4) add 4 diff -r 90fbbc29b93a -r be5aa681c122 tests/test-fold.t --- a/tests/test-fold.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-fold.t Fri May 08 20:36:29 2020 +0800 @@ -100,6 +100,33 @@ c8d03c1b5e94af74b772900c58259d2e08917735 198b5c405d01a50c41a81a00fc61677b81981a5f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '33', 'fold-id': '25cb328e', 'fold-idx': '1', 'fold-size': '3', 'operation': 'fold', 'user': 'test'} f69452c5b1af6cbaaa56ef50cf94fff5bcc6ca23 198b5c405d01a50c41a81a00fc61677b81981a5f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '37', 'fold-id': '25cb328e', 'fold-idx': '2', 'fold-size': '3', 'operation': 'fold', 'user': 'test'} + $ hg obslog --no-origin + @ 198b5c405d01 (11) r5 + |\ + | \ + | |\ + x | | 4de32a90b66c (7) r7 + / / folded(description, date, parent) as 198b5c405d01 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | | + x | c8d03c1b5e94 (5) r5 + / folded(description, date) as 198b5c405d01 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | + x f69452c5b1af (6) r6 + folded(description, date, parent) as 198b5c405d01 using fold by test (Thu Jan 01 00:00:00 1970 +0000) + + $ hg obslog + @ 198b5c405d01 (11) r5 + |\ folded(description, date, parent) from 4de32a90b66c, c8d03c1b5e94, f69452c5b1af using fold by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | \ + | |\ + x | | 4de32a90b66c (7) r7 + / / + x / c8d03c1b5e94 (5) r5 + / + x f69452c5b1af (6) r6 + + Checking whether the bookmarks are moved or not $ hg log -G diff -r 90fbbc29b93a -r be5aa681c122 tests/test-metaedit.t --- a/tests/test-metaedit.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-metaedit.t Fri May 08 20:36:29 2020 +0800 @@ -132,7 +132,12 @@ | ~ - $ hg obslog -r . + $ hg debugobsolete + e2abbe8ca2ec6ffca6fd7a19d4158c58ff461723 f3d001339afd30d27fcd91e713274a78233528c8 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 587528abfffe33d49f94f9d6223dbbd58d6197c6 212b2a2b87cdbae992f001e9baba64db389fbce7 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'metaedit', 'user': 'test'} + c2bd843aa2468b30bb56d69d4f5fef95b85986f2 a08d35fd7d9d0f8cb33d5bd2074e9bafb5cbc70f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'fold-id': 'c5832a81', 'fold-idx': '1', 'fold-size': '2', 'note': 'folding changesets using metaedit', 'operation': 'metaedit', 'user': 'test'} + 212b2a2b87cdbae992f001e9baba64db389fbce7 a08d35fd7d9d0f8cb33d5bd2074e9bafb5cbc70f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '29', 'fold-id': 'c5832a81', 'fold-idx': '2', 'fold-size': '2', 'note': 'folding changesets using metaedit', 'operation': 'metaedit', 'user': 'test'} + $ hg obslog -r . --no-origin @ a08d35fd7d9d (9) E |\ x | 212b2a2b87cd (8) F @@ -146,6 +151,18 @@ x 587528abfffe (7) F reauthored(user) as 212b2a2b87cd using metaedit by test (Thu Jan 01 00:00:00 1970 +0000) + $ hg obslog -r . + @ a08d35fd7d9d (9) E + |\ folded(description, user, parent, content) from 212b2a2b87cd, c2bd843aa246 using metaedit by test (Thu Jan 01 00:00:00 1970 +0000) + | | note: folding changesets using metaedit + | | + x | 212b2a2b87cd (8) F + | | reauthored(user) from 587528abfffe using metaedit by test (Thu Jan 01 00:00:00 1970 +0000) + | | + | x c2bd843aa246 (6) E + | + x 587528abfffe (7) F + $ hg debugobsolete --rev . --exclusive 212b2a2b87cdbae992f001e9baba64db389fbce7 a08d35fd7d9d0f8cb33d5bd2074e9bafb5cbc70f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '29', 'fold-id': 'c5832a81', 'fold-idx': '2', 'fold-size': '2', 'note': 'folding changesets using metaedit', 'operation': 'metaedit', 'user': 'test'} c2bd843aa2468b30bb56d69d4f5fef95b85986f2 a08d35fd7d9d0f8cb33d5bd2074e9bafb5cbc70f 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'fold-id': 'c5832a81', 'fold-idx': '1', 'fold-size': '2', 'note': 'folding changesets using metaedit', 'operation': 'metaedit', 'user': 'test'} diff -r 90fbbc29b93a -r be5aa681c122 tests/test-obsolete.t --- a/tests/test-obsolete.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-obsolete.t Fri May 08 20:36:29 2020 +0800 @@ -715,13 +715,17 @@ [4] add obsol_c' [10] add obsol_c [2] - $ hg olog + $ hg olog -a + o 2033b4e49474 (10) add obsol_c + | rebased(parent) from 0d3f46688ccc using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | + | o 725c380fe99b (4) add obsol_c' + |/ rewritten from 0d3f46688ccc by test (Thu Jan 01 00:00:00 1970 +0000) + | @ 0d3f46688ccc (3) add obsol_c - | rebased(parent) as 2033b4e49474 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) - | rewritten as 725c380fe99b by test (Thu Jan 01 00:00:00 1970 +0000) + | rewritten from 4538525df7e2 by test (Thu Jan 01 00:00:00 1970 +0000) | x 4538525df7e2 (2) add c - rewritten as 0d3f46688ccc by test (Thu Jan 01 00:00:00 1970 +0000) Check import reports new unstable changeset: diff -r 90fbbc29b93a -r be5aa681c122 tests/test-pick.t --- a/tests/test-pick.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-pick.t Fri May 08 20:36:29 2020 +0800 @@ -171,6 +171,9 @@ there were no changes to commit, so there shouldn't be any predecessors of 6, and 2 should say it was pruned (issue6093) + $ hg debugobsolete + 7c3bad9141dcb46ff89abf5f61856facd56e476c 7c15c05db6fa1458a8a745f977f4d2426abde6a0 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'pick', 'user': 'test'} + 4538525df7e2b9f09423636c61ef63a4cb872a2d 0 {7c3bad9141dcb46ff89abf5f61856facd56e476c} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'pick', 'user': 'test'} $ hg olog --all --hidden -r 2+6 x 4538525df7e2 (2) add c pruned using pick by test (Thu Jan 01 00:00:00 1970 +0000) diff -r 90fbbc29b93a -r be5aa681c122 tests/test-rewind.t --- a/tests/test-rewind.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-rewind.t Fri May 08 20:36:29 2020 +0800 @@ -90,13 +90,20 @@ $ hg debugobsolete 7e594302a05d3769b27be88fc3cdfd39d7498498 0 {579f120ba91885449adc92eedf48ef3569742cee} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'} 7e594302a05d3769b27be88fc3cdfd39d7498498 073989a581cf430a844192364fa37606357cbbc2 4 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} - $ hg obslog -r 'desc("c_B0")' + $ hg obslog -r 'desc("c_B0")' --no-origin o 073989a581cf (3) c_B0 | x 7e594302a05d (2) c_B0 pruned using prune by test (Thu Jan 01 00:00:00 1970 +0000) meta-changed(meta) as 073989a581cf using rewind by test (Thu Jan 01 00:00:00 1970 +0000) + $ hg obslog -r 'desc("c_B0")' + o 073989a581cf (3) c_B0 + | meta-changed(meta) from 7e594302a05d using rewind by test (Thu Jan 01 00:00:00 1970 +0000) + | + x 7e594302a05d (2) c_B0 + pruned using prune by test (Thu Jan 01 00:00:00 1970 +0000) + $ hg log -G o changeset: 3:073989a581cf | tag: tip @@ -165,7 +172,7 @@ 7e594302a05d3769b27be88fc3cdfd39d7498498 073989a581cf430a844192364fa37606357cbbc2 4 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} 073989a581cf430a844192364fa37606357cbbc2 0 {579f120ba91885449adc92eedf48ef3569742cee} (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'} 7e594302a05d3769b27be88fc3cdfd39d7498498 b13b032065ef57a68d9a4cead38ba0f34f95529b 4 (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} - $ hg obslog -r 'desc("c_B0")' --all + $ hg obslog -r 'desc("c_B0")' --all --no-origin x 073989a581cf (3) c_B0 | pruned using prune by test (Thu Jan 01 00:00:01 1970 +0000) | @@ -176,6 +183,17 @@ meta-changed(meta) as 073989a581cf using rewind by test (Thu Jan 01 00:00:00 1970 +0000) meta-changed(meta) as b13b032065ef using rewind by test (Thu Jan 01 00:00:01 1970 +0000) + $ hg obslog -r 'desc("c_B0")' --all + x 073989a581cf (3) c_B0 + | meta-changed(meta) from 7e594302a05d using rewind by test (Thu Jan 01 00:00:00 1970 +0000) + | pruned using prune by test (Thu Jan 01 00:00:01 1970 +0000) + | + | o b13b032065ef (4) c_B0 + |/ meta-changed(meta) from 7e594302a05d using rewind by test (Thu Jan 01 00:00:01 1970 +0000) + | + x 7e594302a05d (2) c_B0 + pruned using prune by test (Thu Jan 01 00:00:00 1970 +0000) + $ hg log -G o changeset: 4:b13b032065ef | tag: tip @@ -268,13 +286,19 @@ $ hg debugobsolete 7e594302a05d3769b27be88fc3cdfd39d7498498 25c8f5ab0c3bb569ec672570f1a901be4c6f032b 0 (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} 7e594302a05d3769b27be88fc3cdfd39d7498498 b13b032065ef57a68d9a4cead38ba0f34f95529b 4 (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} - $ hg obslog --rev 'desc("c_B0")' + $ hg obslog --rev 'desc("c_B0")' --no-origin * b13b032065ef (4) c_B0 | x 7e594302a05d (2) c_B0 rewritten(description, content) as 25c8f5ab0c3b using amend by test (Thu Jan 01 00:00:01 1970 +0000) meta-changed(meta) as b13b032065ef using rewind by test (Thu Jan 01 00:00:01 1970 +0000) + $ hg obslog --rev 'desc("c_B0")' + * b13b032065ef (4) c_B0 + | meta-changed(meta) from 7e594302a05d using rewind by test (Thu Jan 01 00:00:01 1970 +0000) + | + x 7e594302a05d (2) c_B0 + $ hg log -G * changeset: 4:b13b032065ef | tag: tip @@ -372,7 +396,7 @@ b13b032065ef57a68d9a4cead38ba0f34f95529b 0 {579f120ba91885449adc92eedf48ef3569742cee} (Thu Jan 01 00:00:01 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'} 7e594302a05d3769b27be88fc3cdfd39d7498498 837cd997bb05a27f8ed7d1ba3ff1e8422b9b464e 4 (Thu Jan 01 00:00:02 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} 25c8f5ab0c3bb569ec672570f1a901be4c6f032b 837cd997bb05a27f8ed7d1ba3ff1e8422b9b464e 0 (Thu Jan 01 00:00:02 1970 +0000) {'ef1': '11', 'operation': 'rewind', 'user': 'test'} - $ hg obslog --rev 'desc("c_B0")' + $ hg obslog --rev 'desc("c_B0")' --no-origin @ 837cd997bb05 (5) c_B0 |\ x | 25c8f5ab0c3b (3) c_B1 @@ -383,6 +407,16 @@ meta-changed(meta) as 837cd997bb05 using rewind by test (Thu Jan 01 00:00:02 1970 +0000) meta-changed(meta) as b13b032065ef using rewind by test (Thu Jan 01 00:00:01 1970 +0000) + $ hg obslog --rev 'desc("c_B0")' + @ 837cd997bb05 (5) c_B0 + |\ rewritten(description, meta, content) from 25c8f5ab0c3b using rewind by test (Thu Jan 01 00:00:02 1970 +0000) + | | meta-changed(meta) from 7e594302a05d using rewind by test (Thu Jan 01 00:00:02 1970 +0000) + | | + x | 25c8f5ab0c3b (3) c_B1 + |/ rewritten(description, content) from 7e594302a05d using amend by test (Thu Jan 01 00:00:01 1970 +0000) + | + x 7e594302a05d (2) c_B0 + $ hg log -G @ changeset: 5:837cd997bb05 | tag: tip @@ -511,7 +545,7 @@ $ hg debugobsolete 49fb7d900906b0a3d329e90da4dcb0a7582d3b6e a0316c4c54179357e71d068fb8884678ebc7c351 9576e80d6851ce79cd535e2dc5fa01b444d89a39 0 (Thu Jan 01 00:00:02 1970 +0000) {'ef1': '12', 'operation': 'split', 'user': 'test'} - $ hg obslog --all + $ hg obslog --all --no-origin @ 9576e80d6851 (5) c_CD0 | | o a0316c4c5417 (4) c_CD0 @@ -519,6 +553,15 @@ x 49fb7d900906 (3) c_CD0 split(parent, content) as 9576e80d6851, a0316c4c5417 using split by test (Thu Jan 01 00:00:02 1970 +0000) + $ hg obslog --all + @ 9576e80d6851 (5) c_CD0 + | split(parent, content) from 49fb7d900906 using split by test (Thu Jan 01 00:00:02 1970 +0000) + | + | o a0316c4c5417 (4) c_CD0 + |/ split(parent, content) from 49fb7d900906 using split by test (Thu Jan 01 00:00:02 1970 +0000) + | + x 49fb7d900906 (3) c_CD0 + Actual rewind ````````````` @@ -532,7 +575,7 @@ 49fb7d900906b0a3d329e90da4dcb0a7582d3b6e 4535d0af405c1bf35f37b35f26ec6f9acfa6fe0b 4 (Thu Jan 01 00:00:02 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} 9576e80d6851ce79cd535e2dc5fa01b444d89a39 4535d0af405c1bf35f37b35f26ec6f9acfa6fe0b 0 (Thu Jan 01 00:00:02 1970 +0000) {'ef1': '14', 'operation': 'rewind', 'user': 'test'} a0316c4c54179357e71d068fb8884678ebc7c351 4535d0af405c1bf35f37b35f26ec6f9acfa6fe0b 0 (Thu Jan 01 00:00:02 1970 +0000) {'ef1': '10', 'operation': 'rewind', 'user': 'test'} - $ hg obslog + $ hg obslog --no-origin @ 4535d0af405c (6) c_CD0 |\ | \ @@ -547,6 +590,22 @@ meta-changed(meta) as 4535d0af405c using rewind by test (Thu Jan 01 00:00:02 1970 +0000) split(parent, content) as 9576e80d6851, a0316c4c5417 using split by test (Thu Jan 01 00:00:02 1970 +0000) + $ hg obslog + @ 4535d0af405c (6) c_CD0 + |\ meta-changed(meta) from 49fb7d900906 using rewind by test (Thu Jan 01 00:00:02 1970 +0000) + | | rewritten(meta, parent, content) from 9576e80d6851 using rewind by test (Thu Jan 01 00:00:02 1970 +0000) + | | rewritten(meta, content) from a0316c4c5417 using rewind by test (Thu Jan 01 00:00:02 1970 +0000) + | | + | \ + | |\ + | x | 9576e80d6851 (5) c_CD0 + |/ / split(parent, content) from 49fb7d900906 using split by test (Thu Jan 01 00:00:02 1970 +0000) + | | + | x a0316c4c5417 (4) c_CD0 + |/ split(parent, content) from 49fb7d900906 using split by test (Thu Jan 01 00:00:02 1970 +0000) + | + x 49fb7d900906 (3) c_CD0 + $ hg log -G @ changeset: 6:4535d0af405c | tag: tip @@ -594,7 +653,7 @@ a0316c4c54179357e71d068fb8884678ebc7c351 e76375de0bfc9c59bdd91067c901f3eed7d6c8fe 4 (Thu Jan 01 00:00:03 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} 9576e80d6851ce79cd535e2dc5fa01b444d89a39 95d72d892df7fec59107e10914c5729bdf03665f 4 (Thu Jan 01 00:00:03 1970 +0000) {'ef1': '6', 'operation': 'rewind', 'user': 'test'} 4535d0af405c1bf35f37b35f26ec6f9acfa6fe0b e76375de0bfc9c59bdd91067c901f3eed7d6c8fe 95d72d892df7fec59107e10914c5729bdf03665f 0 (Thu Jan 01 00:00:03 1970 +0000) {'ef1': '14', 'operation': 'rewind', 'user': 'test'} - $ hg obslog -r -2: + $ hg obslog -r -2: --no-origin @ 95d72d892df7 (8) c_CD0 |\ +---o e76375de0bfc (7) c_CD0 @@ -670,7 +729,7 @@ $ hg debugobsolete 579f120ba91885449adc92eedf48ef3569742cee d952d1794ff657f5c2a82225d2e6307ed930b32f 0 (Thu Jan 01 00:00:03 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} 7e594302a05d3769b27be88fc3cdfd39d7498498 a65fceb2324ae1eb1231610193d24a5fa02c7c0e 0 (Thu Jan 01 00:00:03 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} - $ hg obslog -r 'desc("c_A1")::' + $ hg obslog -r 'desc("c_A1")::' --no-origin @ a65fceb2324a (4) c_B0 | | o d952d1794ff6 (3) c_A1 @@ -681,6 +740,17 @@ x 7e594302a05d (2) c_B0 rebased(parent) as a65fceb2324a using evolve by test (Thu Jan 01 00:00:03 1970 +0000) + $ hg obslog -r 'desc("c_A1")::' + @ a65fceb2324a (4) c_B0 + | rebased(parent) from 7e594302a05d using evolve by test (Thu Jan 01 00:00:03 1970 +0000) + | + | o d952d1794ff6 (3) c_A1 + | | rewritten(description, content) from 579f120ba918 using amend by test (Thu Jan 01 00:00:03 1970 +0000) + | | + | x 579f120ba918 (1) c_A0 + | + x 7e594302a05d (2) c_B0 + $ hg log -G @ changeset: 4:a65fceb2324a | tag: tip @@ -713,7 +783,7 @@ 7e594302a05d3769b27be88fc3cdfd39d7498498 a65fceb2324ae1eb1231610193d24a5fa02c7c0e 0 (Thu Jan 01 00:00:03 1970 +0000) {'ef1': '4', 'operation': 'evolve', 'user': 'test'} 7e594302a05d3769b27be88fc3cdfd39d7498498 ac979e0aac4e63ccbbf88ac33942192942302766 4 (Thu Jan 01 00:00:03 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} a65fceb2324ae1eb1231610193d24a5fa02c7c0e ac979e0aac4e63ccbbf88ac33942192942302766 0 (Thu Jan 01 00:00:03 1970 +0000) {'ef1': '6', 'operation': 'rewind', 'user': 'test'} - $ hg obslog + $ hg obslog --no-origin @ ac979e0aac4e (5) c_B0 |\ | x a65fceb2324a (4) c_B0 @@ -723,6 +793,16 @@ rebased(parent) as a65fceb2324a using evolve by test (Thu Jan 01 00:00:03 1970 +0000) meta-changed(meta) as ac979e0aac4e using rewind by test (Thu Jan 01 00:00:03 1970 +0000) + $ hg obslog + @ ac979e0aac4e (5) c_B0 + |\ meta-changed(meta) from 7e594302a05d using rewind by test (Thu Jan 01 00:00:03 1970 +0000) + | | rewritten(meta, parent) from a65fceb2324a using rewind by test (Thu Jan 01 00:00:03 1970 +0000) + | | + | x a65fceb2324a (4) c_B0 + |/ rebased(parent) from 7e594302a05d using evolve by test (Thu Jan 01 00:00:03 1970 +0000) + | + x 7e594302a05d (2) c_B0 + $ hg log -G @ changeset: 5:ac979e0aac4e | tag: tip @@ -787,7 +867,7 @@ a65fceb2324ae1eb1231610193d24a5fa02c7c0e ac979e0aac4e63ccbbf88ac33942192942302766 0 (Thu Jan 01 00:00:03 1970 +0000) {'ef1': '6', 'operation': 'rewind', 'user': 'test'} a65fceb2324ae1eb1231610193d24a5fa02c7c0e a5dd64adbb2af2e646859b35d0d7128daa73cb2b 4 (Thu Jan 01 00:00:04 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} ac979e0aac4e63ccbbf88ac33942192942302766 a5dd64adbb2af2e646859b35d0d7128daa73cb2b 0 (Thu Jan 01 00:00:04 1970 +0000) {'ef1': '6', 'operation': 'rewind', 'user': 'test'} - $ hg obslog + $ hg obslog --no-origin @ a5dd64adbb2a (6) c_B0 |\ | x ac979e0aac4e (5) c_B0 @@ -819,7 +899,7 @@ ac979e0aac4e63ccbbf88ac33942192942302766 3f2d8862657d20af331f0c0531f5228eef4d36c5 4 (Thu Jan 01 00:00:05 1970 +0000) {'ef1': '6', 'operation': 'rewind', 'user': 'test'} a5dd64adbb2af2e646859b35d0d7128daa73cb2b 3f2d8862657d20af331f0c0531f5228eef4d36c5 0 (Thu Jan 01 00:00:05 1970 +0000) {'ef1': '6', 'operation': 'rewind', 'user': 'test'} d952d1794ff657f5c2a82225d2e6307ed930b32f 9c28b7ed3951fd15b20ab75449c1e0fdec445958 0 (Thu Jan 01 00:00:05 1970 +0000) {'ef1': '11', 'operation': 'rewind', 'user': 'test'} - $ hg obslog + $ hg obslog --no-origin @ 3f2d8862657d (8) c_B0 |\ x | a5dd64adbb2a (6) c_B0 @@ -879,7 +959,7 @@ a5dd64adbb2af2e646859b35d0d7128daa73cb2b d36d6d267714108384f31762b6193c32f9f97514 4 (Thu Jan 01 00:00:06 1970 +0000) {'ef1': '6', 'operation': 'rewind', 'user': 'test'} 3f2d8862657d20af331f0c0531f5228eef4d36c5 d36d6d267714108384f31762b6193c32f9f97514 0 (Thu Jan 01 00:00:06 1970 +0000) {'ef1': '6', 'operation': 'rewind', 'user': 'test'} 9c28b7ed3951fd15b20ab75449c1e0fdec445958 fef4355b4cc9e2d3ddc154f60e4f4f1a286e9ce7 0 (Thu Jan 01 00:00:06 1970 +0000) {'ef1': '11', 'operation': 'rewind', 'user': 'test'} - $ hg obslog + $ hg obslog --no-origin @ d36d6d267714 (10) c_B0 |\ x | 3f2d8862657d (8) c_B0 @@ -1002,7 +1082,11 @@ $ hg rewind --keep --to 'desc("initial")' --hidden rewinded to 1 changesets (1 changesets obsoleted) - $ hg obslog + $ hg debugobsolete + 30704102d912d9d35a3d51400c4c93ad1e8bc7f3 2ea5be2f87510c7d26d5866dec83b57a7d939c4a 0 (Thu Jan 01 00:00:06 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} + 30704102d912d9d35a3d51400c4c93ad1e8bc7f3 b4c97fddc16aa57693fa0a730d4b44ceb75bb35c 4 (Thu Jan 01 00:00:06 1970 +0000) {'ef1': '2', 'operation': 'rewind', 'user': 'test'} + 2ea5be2f87510c7d26d5866dec83b57a7d939c4a b4c97fddc16aa57693fa0a730d4b44ceb75bb35c 0 (Thu Jan 01 00:00:06 1970 +0000) {'ef1': '11', 'operation': 'rewind', 'user': 'test'} + $ hg obslog --no-origin @ b4c97fddc16a (3) initial |\ x | 2ea5be2f8751 (2) amended @@ -1012,6 +1096,16 @@ rewritten(description, content) as 2ea5be2f8751 using amend by test (Thu Jan 01 00:00:06 1970 +0000) meta-changed(meta) as b4c97fddc16a using rewind by test (Thu Jan 01 00:00:06 1970 +0000) + $ hg obslog + @ b4c97fddc16a (3) initial + |\ rewritten(description, meta, content) from 2ea5be2f8751 using rewind by test (Thu Jan 01 00:00:06 1970 +0000) + | | meta-changed(meta) from 30704102d912 using rewind by test (Thu Jan 01 00:00:06 1970 +0000) + | | + x | 2ea5be2f8751 (2) amended + |/ rewritten(description, content) from 30704102d912 using amend by test (Thu Jan 01 00:00:06 1970 +0000) + | + x 30704102d912 (1) initial + $ hg glf --hidden @ 3: initial (a b) | diff -r 90fbbc29b93a -r be5aa681c122 tests/test-sharing.t --- a/tests/test-sharing.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-sharing.t Fri May 08 20:36:29 2020 +0800 @@ -520,12 +520,12 @@ with: [6] fix bug 24 (v2 by alice) base: [4] fix bug 24 (v1) 0 files updated, 1 files merged, 0 files removed, 0 files unresolved - working directory is now at aa824ceedb8b + working directory is now at f92394e17e33 $ hg log -q -r 'contentdivergent()' Figure SG10: Bob's repository after fixing divergence. $ hg --hidden shortlog -G -r 3:: - @ 7:aa82 draft fix bug 24 (v2 by bob) + @ 7:f923 draft fix bug 24 (v2 by bob) | | x 6:e3a5 draft fix bug 24 (v2 by alice) |/ @@ -536,7 +536,7 @@ o 3:dd15 public fix bug 15 (v2) | ~ - $ hg --hidden shortlog -r 'predecessors(aa82)' + $ hg --hidden shortlog -r 'predecessors(.)' 5:541f draft fix bug 24 (v2 by bob) 6:e3a5 draft fix bug 24 (v2 by alice) $ cat file1 diff -r 90fbbc29b93a -r be5aa681c122 tests/test-sqlite3-permissions.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-sqlite3-permissions.t Fri May 08 20:36:29 2020 +0800 @@ -0,0 +1,30 @@ +#require unix-permissions + +Test that sqlite3 cache files inherit the permissions of the .hg +directory like other cache files. + + $ . $TESTDIR/testlib/common.sh + + $ cat << EOF >> $HGRCPATH + > [extensions] + > evolve = + > EOF + $ hg init test + $ cd test + $ chmod 700 .hg + $ hg debugupdatecache + $ ls -l .hg/cache/evoext_*.sqlite + -rw------- * .hg/cache/evoext_obshashrange_v2.sqlite (glob) + -rw------- * .hg/cache/evoext_stablerange_v2.sqlite (glob) + $ rm -r .hg/cache + $ chmod 770 .hg + $ hg debugupdatecache + $ ls -l .hg/cache/evoext_*.sqlite + -rw-rw---- * .hg/cache/evoext_obshashrange_v2.sqlite (glob) + -rw-rw---- * .hg/cache/evoext_stablerange_v2.sqlite (glob) + $ rm -r .hg/cache + $ chmod 774 .hg + $ hg debugupdatecache + $ ls -l .hg/cache/evoext_*.sqlite + -rw-rw-r-- * .hg/cache/evoext_obshashrange_v2.sqlite (glob) + -rw-rw-r-- * .hg/cache/evoext_stablerange_v2.sqlite (glob) diff -r 90fbbc29b93a -r be5aa681c122 tests/test-topic-stack-complex.t --- a/tests/test-topic-stack-complex.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-topic-stack-complex.t Fri May 08 20:36:29 2020 +0800 @@ -174,7 +174,7 @@ with: [s4] Added e and f base: [3] Added e and f 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory is now at 80b2ddbf01d3 + working directory is now at 692bc8b2aa4d - $ hg log -r 80b2ddbf01d3 -T '{date|hgdate}\n' + $ hg log -r . -T '{date|hgdate}\n' 0 1 diff -r 90fbbc29b93a -r be5aa681c122 tests/test-topic-stack.t --- a/tests/test-topic-stack.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-topic-stack.t Fri May 08 20:36:29 2020 +0800 @@ -952,22 +952,37 @@ continue splitting? [Ycdq?] c + $ hg debugobsolete + 34679cfcccdd07565970b959c79428af9a5744e4 6a11ae6b0cde4d4952ed68e8077b9e3596d99548 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} + 20f7945d89a5e372b7548f766ebc800677856443 3c7bec987cd37ba12b83c01683e8609dd549c07b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} + 952e24687ebc5f11743268f6f1c3f24fa83c7ddd 74979543bf1d6c0f75229991400f352a6fb3fddb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} + c9961f97c7b40b54b3c1922986675d6f38793014 d7bfa3d6ce36dfb917547246752f0c2a564fe33b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} + c7d60a180d05255e8c6ea50bce09d014015b7cdc 3ab2eedae500f52b6aa220bb8ce6e20732a8a6d1 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} + 6a11ae6b0cde4d4952ed68e8077b9e3596d99548 61700bf67137c724a72aa5f034e9187d2c5e7e47 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} + 3c7bec987cd37ba12b83c01683e8609dd549c07b 4bcfa5dd0945476ba938e8115e81ba367af3b573 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} + 74979543bf1d6c0f75229991400f352a6fb3fddb 1d84ec948370a2ac1a51f3ab27835e31d50c3407 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '16', 'operation': 'amend', 'user': 'test'} + 1d84ec948370a2ac1a51f3ab27835e31d50c3407 f3328cd199dc389b850ca952f65a15a8e6dbc79b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 3ab2eedae500f52b6aa220bb8ce6e20732a8a6d1 907f7d3c2333082d62942ac3a47e466ce03d82b9 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 3bfe800e04863d23f909f8d98848656b7b5a971a 662ff4ad29901b325a64c39f7850e3efaaeeccc5 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} + 907f7d3c2333082d62942ac3a47e466ce03d82b9 b24bab30ac12f6124a52e74aaf46b7468e42526c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} + b24bab30ac12f6124a52e74aaf46b7468e42526c dde94df880e97f4a1ee8c5408254b429b3d90204 e7ea874afbd5c17aeee366d39a828dbcb01682ce 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '12', 'operation': 'split', 'user': 'test'} $ hg --config extensions.evolve= obslog --all o dde94df880e9 (21) c_G + | split(parent, content) from b24bab30ac12 using split by test (Thu Jan 01 00:00:00 1970 +0000) | | @ e7ea874afbd5 (22) c_G - |/ + |/ split(parent, content) from b24bab30ac12 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | x b24bab30ac12 (20) c_G - | split(parent, content) as dde94df880e9, e7ea874afbd5 using split by test (Thu Jan 01 00:00:00 1970 +0000) + | amended(content) from 907f7d3c2333 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x 907f7d3c2333 (18) c_G - | amended(content) as b24bab30ac12 using amend by test (Thu Jan 01 00:00:00 1970 +0000) + | rebased(parent) from 3ab2eedae500 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) | x 3ab2eedae500 (13) c_G - | rebased(parent) as 907f7d3c2333 using rebase by test (Thu Jan 01 00:00:00 1970 +0000) + | reauthored(user) from c7d60a180d05 using amend by test (Thu Jan 01 00:00:00 1970 +0000) | x c7d60a180d05 (6) c_G - reauthored(user) as 3ab2eedae500 using amend by test (Thu Jan 01 00:00:00 1970 +0000) $ hg export . # HG changeset patch diff -r 90fbbc29b93a -r be5aa681c122 tests/test-touch.t --- a/tests/test-touch.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-touch.t Fri May 08 20:36:29 2020 +0800 @@ -157,7 +157,18 @@ 1 changesets pruned $ hg touch 13 --hidden --note "testing with no successor" 1 new orphan changesets - $ hg obslog -r 13 --hidden + $ hg debugobsolete + * * 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'touch', 'user': 'test'} (glob) + * * 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '9', 'operation': 'amend', 'user': 'test'} (glob) + * * 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'touch', 'user': 'test'} (glob) + * 0 {0000000000000000000000000000000000000000} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'} (glob) + * * 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'touch', 'user': 'test'} (glob) + * * 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'touch', 'user': 'test'} (glob) + * * 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'touch', 'user': 'test'} (glob) + * * 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'} (glob) + * 0 {*} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'prune', 'user': 'test'} (glob) + * * 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'note': 'testing with no successor', 'operation': 'touch', 'user': 'test'} (glob) + $ hg obslog -r 13 --no-origin --hidden x [0-9a-f]{12} (.*) move (re) pruned using prune by test (Thu Jan 01 00:00:00 1970 +0000) rewritten(.*) as [0-9a-f]{12} using touch by test (.*) (re) diff -r 90fbbc29b93a -r be5aa681c122 tests/test-uncommit-interactive.t --- a/tests/test-uncommit-interactive.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-uncommit-interactive.t Fri May 08 20:36:29 2020 +0800 @@ -164,12 +164,15 @@ discard change 3/3 to 'a'? [Ynesfdaq?] n + $ hg debugobsolete + e9635f4beaf11f64a07ccc74684092b144c53d89 0 {7733902a8d94c789ca81d866bea1893d79442db6} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'uncommit', 'user': 'test'} + f70fb463d5bf9f0ffd38f105521d96e9f2591bc1 678a59e5ff90754d5e94719bd82ad169be773c21 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'note on amend --extract', 'operation': 'uncommit', 'user': 'test'} $ hg obslog @ 678a59e5ff90 (3) another one + | amended(content) from f70fb463d5bf using uncommit by test (Thu Jan 01 00:00:00 1970 +0000) + | note: note on amend --extract | x f70fb463d5bf (1) another one - amended(content) as 678a59e5ff90 using uncommit by test (Thu Jan 01 00:00:00 1970 +0000) - note: note on amend --extract The unselected part should be in the diff ----------------------------------------- @@ -296,16 +299,21 @@ Checking the obsolescence history + $ hg debugobsolete + e9635f4beaf11f64a07ccc74684092b144c53d89 0 {7733902a8d94c789ca81d866bea1893d79442db6} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'uncommit', 'user': 'test'} + f70fb463d5bf9f0ffd38f105521d96e9f2591bc1 678a59e5ff90754d5e94719bd82ad169be773c21 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'note on amend --extract', 'operation': 'uncommit', 'user': 'test'} + 7ca9935a62f11b39b60c7fb8861377c7d45b3e99 0 {7733902a8d94c789ca81d866bea1893d79442db6} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'uncommit', 'user': 'test'} + 678a59e5ff90754d5e94719bd82ad169be773c21 46e35360be473bf761bedf3d05de4a68ffd9d9f8 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'testing uncommit on dirty wdir', 'operation': 'uncommit', 'user': 'test'} $ hg obslog @ 46e35360be47 (5) another one + | amended(content) from 678a59e5ff90 using uncommit by test (Thu Jan 01 00:00:00 1970 +0000) + | note: testing uncommit on dirty wdir | x 678a59e5ff90 (3) another one - | amended(content) as 46e35360be47 using uncommit by test (Thu Jan 01 00:00:00 1970 +0000) - | note: testing uncommit on dirty wdir + | amended(content) from f70fb463d5bf using uncommit by test (Thu Jan 01 00:00:00 1970 +0000) + | note: note on amend --extract | x f70fb463d5bf (1) another one - amended(content) as 678a59e5ff90 using uncommit by test (Thu Jan 01 00:00:00 1970 +0000) - note: note on amend --extract Push the changes back to the commit and more commits for more testing diff -r 90fbbc29b93a -r be5aa681c122 tests/test-unstability-resolution-result.t --- a/tests/test-unstability-resolution-result.t Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/test-unstability-resolution-result.t Fri May 08 20:36:29 2020 +0800 @@ -66,7 +66,8 @@ Test evolve of orphan that run into conflict - $ ls + $ ls -A + .hg a b $ hg pdiff a diff -r 90fbbc29b93a -r be5aa681c122 tests/test-wireproto.t diff -r 90fbbc29b93a -r be5aa681c122 tests/testlib/push-checkheads-util.sh --- a/tests/testlib/push-checkheads-util.sh Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/testlib/push-checkheads-util.sh Fri May 08 20:36:29 2020 +0800 @@ -34,6 +34,6 @@ echo >> "client/.hg/hgrc" "[ui]" echo >> "client/.hg/hgrc" "# simpler log output" - echo >> "client/.hg/hgrc" 'logtemplate = "{node|short} [{branch}{if(topic, ":{topic}")}] ({phase}): {desc}\\n"' + printf >> "client/.hg/hgrc" "%s" 'logtemplate = "{node|short} [{branch}{if(topic, ":{topic}")}] ({phase}): {desc}\n"' fi } diff -r 90fbbc29b93a -r be5aa681c122 tests/testlib/pythonpath.sh --- a/tests/testlib/pythonpath.sh Wed Apr 08 01:16:54 2020 +0800 +++ b/tests/testlib/pythonpath.sh Fri May 08 20:36:29 2020 +0800 @@ -3,7 +3,7 @@ export SRCDIR="`dirname $TESTDIR`" if [ -n "$PYTHONPATH" ]; then export HGTEST_ORIG_PYTHONPATH=$PYTHONPATH - if uname -o | grep -q Msys; then + if uname -o 2> /dev/null | grep -q Msys; then export PYTHONPATH="$SRCDIR;$PYTHONPATH" else export PYTHONPATH=$SRCDIR:$PYTHONPATH