changeset 1800:1554b30b18eb mercurial-3.4

merge with 5.6.0 no extra changes were needed from the mercurial-3.5 branch.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Wed, 01 Feb 2017 16:03:39 +0100
parents b1809340478b (diff) 6d54fd20bb81 (current diff)
children c0da3186e9a2
files tests/test-evolve.t tests/test-obsolete.t tests/test-simple4server-bundle2.t tests/test-simple4server.t tests/test-tutorial.t tests/test-uncommit.t
diffstat 13 files changed, 161 insertions(+), 79 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Sat Oct 29 15:07:27 2016 +0200
+++ b/.hgtags	Wed Feb 01 16:03:39 2017 +0100
@@ -41,3 +41,5 @@
 bd59cc2ee2039c370a0343f683488cde2a106565 5.3.0
 b21ce82e6f7640c2b38506545968650227d67e9b 5.4.0
 2ad40d972a740a613c4c559104166a015b37cac2 5.4.1
+727c7211c810d304ebf92b32db7ecf697ce46ac6 5.5.0
+99ede2d775458a236a46ad25a93aca473b676eee 5.6.0
--- a/MANIFEST.in	Sat Oct 29 15:07:27 2016 +0200
+++ b/MANIFEST.in	Wed Feb 01 16:03:39 2017 +0100
@@ -1,21 +1,29 @@
-recursive-include docs/figures *.svg
+exclude contrib/nopushpublish.py
+exclude hgext/directaccess.py
+exclude hgext/drophack.py
+exclude hgext/inhibit.py
+exclude hgext/obsolete.py
+exclude Makefile
+exclude tests/test-drop.t
+exclude tests/test-inhibit.t
+exclude tests/test-oldconvert.t
+include COPYING
 include docs/figures/hgview-example.png
+include docs/makefile
+include docs/*.py
+include docs/README
 include docs/*.rst
-include docs/*.py
+include docs/static/*.svg
 include docs/tutorials/*.t
-include docs/makefile
-include docs/static/*.svg
+include hgext/evolve.py
 include hgext/__init__.py
-include hgext/evolve.py
 include hgext/pushexperiment.py
 include hgext/simple4server.py
-include setup.py
+include MANIFEST.in
 include README
-include COPYING
-include tests/*.t
+include setup.py
 include tests/*.py
-include tests/_exc-util.sh
-include tests/dummyssh
-exclude tests/test-oldconvert.t
-exclude tests/test-qsync.t
-exclude tests/test-drop.t
+include tests/*.sh
+include tests/*.t
+prune debian
+recursive-include docs/figures *.svg
--- a/Makefile	Sat Oct 29 15:07:27 2016 +0200
+++ b/Makefile	Wed Feb 01 16:03:39 2017 +0100
@@ -3,9 +3,7 @@
 
 help:
 	@echo 'Commonly used make targets:'
-	@echo '  tests              - run all tests in the automatic test suite'
-	@echo '  all-version-tests - run all tests against many hg versions'
-	@echo '  tests-%s           - run all tests in the specified hg version'
+	@echo '  deb-prepare - prepare the build of a debian package'
 
 all: help
 
--- a/README	Sat Oct 29 15:07:27 2016 +0200
+++ b/README	Wed Feb 01 16:03:39 2017 +0100
@@ -46,7 +46,7 @@
 say in $HGSRC:
 
     cd tests
-    python $HGSRC/tests/run-tests.py --with-hg=$HGSRC/hg
+    python $HGSRC/tests/run-tests.py
 
 (evolve's stable and default branches correspond to Mercurial's stable
 and default branches. So to test evolve from default, you need
@@ -56,12 +56,18 @@
 Changelog
 =========
 
-5.5.0 --
+5.6.0 -- 2016-10-30
+
+ - compatibility with Mercurial 4.1.
+ - improvement of prune error message.
+ - fold: require --from flag for folding revisions to working copy
+ - fix crash when trying to fold an empty revision set (issue5453)
+ - uncommit: preserve copy information of remaining files (issue5403)
+
+5.5.0 -- 2016-10-30
 
  - The {obsolete} template now yield "obsolete" or "".
-
-5.4.2 --
-
+ - compatibility with Mercurial 4.0
  - Fix erroneous manifest computation when solving 'bumped' changeset.
  - split: avoid crash on empty commit (issue5191),
  - next: improve locking to avoid issue with working copy parent (issue5244)
--- a/debian/changelog	Sat Oct 29 15:07:27 2016 +0200
+++ b/debian/changelog	Wed Feb 01 16:03:39 2017 +0100
@@ -1,3 +1,15 @@
+mercurial-evolve (5.6.0-1) UNRELEASED; urgency=medium
+
+  * New Upstream Release
+
+ -- Pierre-Yves David <marmoute@nodosa.octopoid.net>  Wed, 01 Feb 2017 15:06:21 +0100
+
+mercurial-evolve (5.5.0-1) unstable; urgency=medium
+
+  * new upstream release
+
+ -- Pierre-Yves David <pierre-yves.david@ens-lyon.org>  Sun, 30 Oct 2016 23:27:14 +0100
+
 mercurial-evolve (5.2.1-1) unstable; urgency=medium
 
   * New upstream release.
--- a/hgext/evolve.py	Sat Oct 29 15:07:27 2016 +0200
+++ b/hgext/evolve.py	Wed Feb 01 16:03:39 2017 +0100
@@ -19,8 +19,8 @@
     - improves some aspect of the early implementation in Mercurial core
 '''
 
-__version__ = '5.4.1'
-testedwith = '3.4.3 3.5.2 3.6.2 3.7.3 3.8.1 3.9 4.0'
+__version__ = '5.6.0'
+testedwith = '3.4.3 3.5.2 3.6.2 3.7.3 3.8.1 3.9 4.0 4.1'
 buglink = 'https://bz.mercurial-scm.org/'
 
 
@@ -2514,7 +2514,8 @@
             raise error.Abort('nothing to prune')
 
         if _disallowednewunstable(repo, revs):
-            raise error.Abort(_("cannot prune in the middle of a stack"))
+            raise error.Abort(_("cannot prune in the middle of a stack"),
+                        hint = _("new unstable changesets are not allowed"))
 
         # defines successors changesets
         sucs = scmutil.revrange(repo, succs)
@@ -2687,7 +2688,7 @@
 
     # Filter copies
     copied = copies.pathcopies(target, ctx)
-    copied = dict((src, dst) for src, dst in copied.iteritems()
+    copied = dict((dst, src) for dst, src in copied.iteritems()
                   if dst in files)
     def filectxfn(repo, memctx, path, contentctx=ctx, redirect=newcontent):
         if path in redirect:
@@ -3067,16 +3068,17 @@
 
 @command('^fold|squash',
     [('r', 'rev', [], _("revision to fold")),
-     ('', 'exact', None, _("only fold specified revisions"))
+     ('', 'exact', None, _("only fold specified revisions")),
+     ('', 'from', None, _("fold revisions linearly to working copy parent"))
     ] + commitopts + commitopts2,
     _('hg fold [OPTION]... [-r] REV'))
 def fold(ui, repo, *revs, **opts):
     """fold multiple revisions into a single one
 
-    By default, folds all the revisions linearly between the given revisions
+    With --from, folds all the revisions linearly between the given revisions
     and the parent of the working directory.
 
-    Use --exact for folding only the specified revisions while ignoring the
+    With --exact, folds only the specified revisions while ignoring the
     parent of the working directory. In this case, the given revisions must
     form a linear unbroken chain.
 
@@ -3086,18 +3088,18 @@
 
      - Fold the current revision with its parent::
 
-         hg fold .^
+         hg fold --from .^
 
      - Fold all draft revisions with working directory parent::
 
-         hg fold 'draft()'
+         hg fold --from 'draft()'
 
        See :hg:`help phases` for more about draft revisions and
        :hg:`help revsets` for more about the `draft()` keyword
 
      - Fold revisions between 3 and 6 with the working directory parent::
 
-         hg fold 3::6
+         hg fold --from 3::6
 
      - Fold revisions 3 and 4:
 
@@ -3114,7 +3116,9 @@
 
     revs = scmutil.revrange(repo, revs)
 
-    if not opts['exact']:
+    if opts['from'] and opts['exact']:
+        raise error.Abort(_('cannot use both --from and --exact'))
+    elif opts['from']:
         # Try to extend given revision starting from the working directory
         extrevs = repo.revs('(%ld::.) or (.::%ld)', revs, revs)
         discardedrevs = [r for r in revs if r not in extrevs]
@@ -3123,8 +3127,16 @@
                                hint=_("given revisions are unrelated to parent "
                                       "of working directory"))
         revs = extrevs
-
-    if len(revs) == 1:
+    elif opts['exact']:
+        # Nothing to do; "revs" is already set correctly
+        pass
+    else:
+        raise error.Abort(_('must specify either --from or --exact'))
+
+    if not revs:
+        raise error.Abort(_('specified revisions evaluate to an empty set'),
+                          hint=_('use different revision arguments'))
+    elif len(revs) == 1:
         ui.write_err(_('single revision specified, nothing to fold\n'))
         return 1
 
@@ -3135,7 +3147,7 @@
 
         root, head = _foldcheck(repo, revs)
 
-        tr = repo.transaction('touch')
+        tr = repo.transaction('fold')
         try:
             commitopts = opts.copy()
             allctx = [repo[r] for r in revs]
@@ -3234,8 +3246,9 @@
             newunstable = _disallowednewunstable(repo, revs)
             if newunstable:
                 raise error.Abort(
-                    _('cannot edit commit information in the middle of a stack'),
-                    hint=_('%s will be affected') % repo[newunstable.first()])
+                    _('cannot edit commit information in the middle of a '\
+                    'stack'), hint=_('%s will become unstable and new unstable'\
+                    ' changes are not allowed') % repo[newunstable.first()])
             root = head = repo[revs.first()]
 
         wctx = repo[None]
@@ -3299,7 +3312,8 @@
     head = repo[heads.first()]
     if _disallowednewunstable(repo, revs):
         raise error.Abort(_("cannot fold chain not ending with a head "\
-                            "or with branching"))
+                            "or with branching"), hint = _("new unstable"\
+                            " changesets are not allowed"))
     return root, head
 
 def _disallowednewunstable(repo, revs):
@@ -3837,6 +3851,17 @@
 def local_pullobsmarkers(self, heads=None, common=None):
     return _getobsmarkersstream(self._repo, heads=heads, common=common)
 
+# The wireproto.streamres API changed, handling chunking and compression
+# directly. Handle either case.
+if util.safehasattr(wireproto.abstractserverproto, 'groupchunks'):
+    # We need to handle chunking and compression directly
+    def streamres(d, proto):
+        return wireproto.streamres(proto.groupchunks(d))
+else:
+    # Leave chunking and compression to streamres
+    def streamres(d, proto):
+        return wireproto.streamres(reader=d, v1compressible=True)
+
 def srv_pullobsmarkers(repo, proto, others):
     opts = wireproto.options('', ['heads', 'common'], others)
     for k, v in opts.iteritems():
@@ -3848,7 +3873,7 @@
     finaldata.write('%20i' % len(obsdata))
     finaldata.write(obsdata)
     finaldata.seek(0)
-    return wireproto.streamres(proto.groupchunks(finaldata))
+    return streamres(finaldata, proto)
 
 def _obsrelsethashtreefm0(repo):
     return _obsrelsethashtree(repo, obsolete._fm0encodeonemarker)
--- a/hgext/simple4server.py	Sat Oct 29 15:07:27 2016 +0200
+++ b/hgext/simple4server.py	Wed Feb 01 16:03:39 2017 +0100
@@ -158,6 +158,17 @@
             seennodes |= pendingnodes
         return seenmarkers
 
+# The wireproto.streamres API changed, handling chunking and compression
+# directly. Handle either case.
+if util.safehasattr(wireproto.abstractserverproto, 'groupchunks'):
+    # We need to handle chunking and compression directly
+    def streamres(d, proto):
+        return wireproto.streamres(proto.groupchunks(d))
+else:
+    # Leave chunking and compression to streamres
+    def streamres(d, proto):
+        return wireproto.streamres(reader=d, v1compressible=True)
+
 # from evolve extension: cf35f38d6a10
 def srv_pullobsmarkers(repo, proto, others):
     """serves a binary stream of markers.
@@ -175,7 +186,7 @@
     finaldata.write('%20i' % len(obsdata))
     finaldata.write(obsdata)
     finaldata.seek(0)
-    return wireproto.streamres(proto.groupchunks(finaldata))
+    return streamres(finaldata, proto)
 
 
 # from evolve extension: 3249814dabd1
--- a/tests/test-evolve.t	Sat Oct 29 15:07:27 2016 +0200
+++ b/tests/test-evolve.t	Wed Feb 01 16:03:39 2017 +0100
@@ -681,7 +681,16 @@
   $ hg fold
   abort: no revisions specified
   [255]
+  $ hg fold --from
+  abort: no revisions specified
+  [255]
   $ hg fold .
+  abort: must specify either --from or --exact
+  [255]
+  $ hg fold --from . --exact
+  abort: cannot use both --from and --exact
+  [255]
+  $ hg fold --from .
   single revision specified, nothing to fold
   [1]
   $ hg fold 0::10 --rev 1 --exact
@@ -690,18 +699,22 @@
   $ hg fold -r 4 -r 6 --exact
   abort: cannot fold non-linear revisions (multiple roots given)
   [255]
-  $ hg fold 10 1
+  $ hg fold --from 10 1
   abort: cannot fold non-linear revisions
   (given revisions are unrelated to parent of working directory)
   [255]
+  $ hg fold --exact -r "4 and not 4"
+  abort: specified revisions evaluate to an empty set
+  (use different revision arguments)
+  [255]
   $ hg phase --public 0
-  $ hg fold -r 0
+  $ hg fold --from -r 0
   abort: cannot fold public revisions
   [255]
-  $ hg fold -r 5
+  $ hg fold --from -r 5
   3 changesets folded
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg fold 6 # want to run hg fold 6
+  $ hg fold --from 6 # want to run hg fold 6
   abort: hidden revision '6'!
   (use --hidden to access hidden revisions)
   [255]
@@ -808,7 +821,7 @@
 Test fold with commit messages
 
   $ cd ../work
-  $ hg fold .^ --message "Folding with custom commit message"
+  $ hg fold --from .^ --message "Folding with custom commit message"
   2 changesets folded
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ glog
@@ -827,7 +840,7 @@
   >                   commit message
   > EOF
 
-  $ hg fold .^ --logfile commit-message
+  $ hg fold --from .^ --logfile commit-message
   2 changesets folded
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg qlog
@@ -1300,9 +1313,11 @@
   created new head
   $ hg prune '26 + 27'
   abort: cannot prune in the middle of a stack
+  (new unstable changesets are not allowed)
   [255]
   $ hg prune '19::28'
   abort: cannot prune in the middle of a stack
+  (new unstable changesets are not allowed)
   [255]
   $ hg prune '26::'
   3 changesets pruned
@@ -1335,9 +1350,11 @@
 
   $ hg fold --exact "19 + 18"
   abort: cannot fold chain not ending with a head or with branching
+  (new unstable changesets are not allowed)
   [255]
   $ hg fold --exact "18::29"
   abort: cannot fold chain not ending with a head or with branching
+  (new unstable changesets are not allowed)
   [255]
   $ hg fold --exact "19::"
   2 changesets folded
@@ -1478,10 +1495,11 @@
 check that metaedit respects allowunstable
   $ hg metaedit '.^' --config 'experimental.evolution=createmarkers, allnewcommands'
   abort: cannot edit commit information in the middle of a stack
-  (c904da5245b0 will be affected)
+  (c904da5245b0 will become unstable and new unstable changes are not allowed)
   [255]
   $ hg metaedit '18::20' --fold --config 'experimental.evolution=createmarkers, allnewcommands'
   abort: cannot fold chain not ending with a head or with branching
+  (new unstable changesets are not allowed)
   [255]
   $ hg metaedit --user foobar
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-simple4server-bundle2.t	Sat Oct 29 15:07:27 2016 +0200
+++ b/tests/test-simple4server-bundle2.t	Wed Feb 01 16:03:39 2017 +0100
@@ -71,12 +71,12 @@
 Capacity testing
 ===================
 
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+  $ curl -s http://localhost:$HGPORT/?cmd=hello
   capabilities: * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (glob)
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+  $ curl -s http://localhost:$HGPORT/?cmd=capabilities
   * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol) (glob)
 
-  $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+  $ curl -s "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
   bookmarks	
   namespaces	
   obsolete	
@@ -128,14 +128,14 @@
 ===========================================
 (used by bitbucket to select which repo use evolve)
 
-  $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+  $ curl -s "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
   bookmarks	
   namespaces	
   obsolete	
   phases	
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+  $ curl -s http://localhost:$HGPORT/?cmd=hello
   capabilities: * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (glob)
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+  $ curl -s http://localhost:$HGPORT/?cmd=capabilities
   * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol) (glob)
 
   $ echo '[__temporary__]' >> server/.hg/hgrc
@@ -144,7 +144,7 @@
   $ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
   $ cat hg.pid >> $DAEMON_PIDS
 
-  $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+  $ curl -s "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
   bookmarks	
   namespaces	
   phases	
@@ -154,13 +154,13 @@
   $ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
   $ cat hg.pid >> $DAEMON_PIDS
 
-  $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+  $ curl -s "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
   bookmarks	
   namespaces	
   obsolete	
   phases	
 
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+  $ curl -s http://localhost:$HGPORT/?cmd=hello
   capabilities: * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (glob)
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+  $ curl -s http://localhost:$HGPORT/?cmd=capabilities
   * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol) (glob)
--- a/tests/test-simple4server.t	Sat Oct 29 15:07:27 2016 +0200
+++ b/tests/test-simple4server.t	Wed Feb 01 16:03:39 2017 +0100
@@ -75,12 +75,12 @@
 Capacity testing
 ===================
 
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+  $ curl -s http://localhost:$HGPORT/?cmd=hello
   capabilities: * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (glob)
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+  $ curl -s http://localhost:$HGPORT/?cmd=capabilities
   * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol) (glob)
 
-  $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+  $ curl -s "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
   bookmarks	
   namespaces	
   obsolete	
@@ -133,14 +133,14 @@
 ===========================================
 (used by bitbucket to select which repo use evolve)
 
-  $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+  $ curl -s "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
   bookmarks	
   namespaces	
   obsolete	
   phases	
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+  $ curl -s http://localhost:$HGPORT/?cmd=hello
   capabilities: * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (glob)
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+  $ curl -s http://localhost:$HGPORT/?cmd=capabilities
   * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol) (glob)
 
   $ echo '[__temporary__]' >> server/.hg/hgrc
@@ -149,13 +149,13 @@
   $ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
   $ cat hg.pid >> $DAEMON_PIDS
 
-  $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+  $ curl -s "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
   bookmarks	
   namespaces	
   phases	
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=hello | grep _evoext_pushobsmarkers_0
+  $ curl -s http://localhost:$HGPORT/?cmd=hello | grep _evoext_pushobsmarkers_0
   [1]
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities | grep _evoext_pushobsmarkers_0
+  $ curl -s http://localhost:$HGPORT/?cmd=capabilities | grep _evoext_pushobsmarkers_0
   [1]
 
   $ echo 'advertiseobsolete=True' >> server/.hg/hgrc
@@ -163,12 +163,12 @@
   $ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
   $ cat hg.pid >> $DAEMON_PIDS
 
-  $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+  $ curl -s "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
   bookmarks	
   namespaces	
   obsolete	
   phases	
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+  $ curl -s http://localhost:$HGPORT/?cmd=hello
   capabilities: * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (glob)
-  $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+  $ curl -s http://localhost:$HGPORT/?cmd=capabilities
   * _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol) (glob)
--- a/tests/test-tutorial.t	Sat Oct 29 15:07:27 2016 +0200
+++ b/tests/test-tutorial.t	Wed Feb 01 16:03:39 2017 +0100
@@ -482,17 +482,18 @@
   
   fold multiple revisions into a single one
   
-      By default, folds all the revisions linearly between the given revisions
+      With --from, folds all the revisions linearly between the given revisions
       and the parent of the working directory.
   
-      Use --exact for folding only the specified revisions while ignoring the
-      parent of the working directory. In this case, the given revisions must
-      form a linear unbroken chain.
+      With --exact, folds only the specified revisions while ignoring the parent
+      of the working directory. In this case, the given revisions must form a
+      linear unbroken chain.
   
   options ([+] can be repeated):
   
    -r --rev VALUE [+] revision to fold
       --exact         only fold specified revisions
+      --from          fold revisions linearly to working copy parent
    -m --message TEXT  use text as commit message
    -l --logfile FILE  read commit message from file
    -d --date DATE     record the specified date as commit date
--- a/tests/test-uncommit.t	Sat Oct 29 15:07:27 2016 +0200
+++ b/tests/test-uncommit.t	Wed Feb 01 16:03:39 2017 +0100
@@ -253,6 +253,7 @@
   M j
   M o
   A aa
+    a
   A ff
     f
   A h
@@ -265,7 +266,7 @@
   R m
   R n
   $ glog --hidden
-  @  5:c706fe2c12f8@bar(/draft) touncommit
+  @  5:a1d4c1ad76cc@bar(/draft) touncommit
   |
   | o  4:e8db4aa611f6@bar(/draft) touncommit
   |/
@@ -279,12 +280,12 @@
   
   $ hg debugobsolete
   5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 e8db4aa611f6d5706374288e6898e498f5c44098 0 (*) {'user': 'test'} (glob)
-  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c706fe2c12f83ba5010cb60ea6af3bd1f0c2d6d3 0 (*) {'user': 'test'} (glob)
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 a1d4c1ad76cc7eb5e8a36ef52396da334b6d59c5 0 (*) {'user': 'test'} (glob)
 
 Test --all
 
   $ hg up -C 3 --hidden
-  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   working directory parent is obsolete!
   (use 'hg evolve' to update to its successor)
   $ hg --config extensions.purge= purge
@@ -313,7 +314,7 @@
 
   $ hg debugobsolete
   5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 e8db4aa611f6d5706374288e6898e498f5c44098 0 (*) {'user': 'test'} (glob)
-  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c706fe2c12f83ba5010cb60ea6af3bd1f0c2d6d3 0 (*) {'user': 'test'} (glob)
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 a1d4c1ad76cc7eb5e8a36ef52396da334b6d59c5 0 (*) {'user': 'test'} (glob)
   5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c4cbebac3751269bdf12d1466deabcc78521d272 0 (*) {'user': 'test'} (glob)
 
 Display a warning if nothing left
@@ -323,7 +324,7 @@
   (use 'hg prune .' to remove it)
   $ hg debugobsolete
   5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 e8db4aa611f6d5706374288e6898e498f5c44098 0 (*) {'user': 'test'} (glob)
-  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c706fe2c12f83ba5010cb60ea6af3bd1f0c2d6d3 0 (*) {'user': 'test'} (glob)
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 a1d4c1ad76cc7eb5e8a36ef52396da334b6d59c5 0 (*) {'user': 'test'} (glob)
   5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c4cbebac3751269bdf12d1466deabcc78521d272 0 (*) {'user': 'test'} (glob)
   c4cbebac3751269bdf12d1466deabcc78521d272 4f1c269eab68720f54e88ce3c1dc02b2858b6b89 0 (*) {'user': 'test'} (glob)
 
--- a/tests/test-userguide.t	Sat Oct 29 15:07:27 2016 +0200
+++ b/tests/test-userguide.t	Wed Feb 01 16:03:39 2017 +0100
@@ -107,7 +107,7 @@
   7:05e61aab8294  step 1
   8:be6d5bc8e4cc  step 2
   9:35f432d9f7c1  step 3
-  $ hg fold -d '0 0' -m 'fix bug 64' -r 7::
+  $ hg fold -d '0 0' -m 'fix bug 64' --from -r 7::
   3 changesets folded
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg --hidden shortlog -G -r 6::