changeset 6696:e0712a00154e

branching: merge with stable
author Anton Shestakov <av6@dwimlabs.net>
date Wed, 07 Feb 2024 14:57:11 -0300
parents aa51f19c71f6 (current diff) 75c048fdcd09 (diff)
children c329bd4beaa6
files .gitlab-ci.yml CHANGELOG hgext3rd/evolve/__init__.py hgext3rd/evolve/cmdrewrite.py hgext3rd/evolve/metadata.py hgext3rd/topic/__init__.py tests/test-namespaces.t
diffstat 13 files changed, 293 insertions(+), 68 deletions(-) [+]
line wrap: on
line diff
--- a/.gitlab-ci.yml	Fri Feb 02 00:12:49 2024 +0100
+++ b/.gitlab-ci.yml	Wed Feb 07 14:57:11 2024 -0300
@@ -113,7 +113,7 @@
     when: manual
 
 deb:
-    image: registry.heptapod.net/mercurial/ci-images/py3-hgext3rd
+    image: registry.heptapod.net/mercurial/ci-images/py3-hgext3rd:v2.0
     script:
         - apt-get update && apt-get -yq install devscripts equivs lintian --no-install-recommends
         - mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control
--- a/.hgtags	Fri Feb 02 00:12:49 2024 +0100
+++ b/.hgtags	Wed Feb 07 14:57:11 2024 -0300
@@ -107,3 +107,4 @@
 33f24dd8cfa2c57a7da2fa6757ba41ffc69da794 11.0.1
 b9355f6f3093c0cf9698215f05059321880f28da 11.0.2
 a625eb5acea4d682becd21759170306ab769afb2 11.1.0
+369e248b6312cc3b0777033a4632f2c9e18a0897 11.1.1
--- a/CHANGELOG	Fri Feb 02 00:12:49 2024 +0100
+++ b/CHANGELOG	Wed Feb 07 14:57:11 2024 -0300
@@ -7,6 +7,33 @@
   * evolve: remove legacy.py that could be used to "detect and convert
     prehistoric format of obsolete markers" (older than Mercurial 2.3)
 
+11.1.1 -- 2024-02-05
+--------------------
+
+  * compatibility with Mercurial 6.6
+
+  * evolve: fix typo in "mercurial" and let hasmemmergestate be True sometimes
+
+  * uncommit: set uncommit_source extra consistently in interactive mode
+
+topic (1.1.1)
+
+  * compatibility with Mercurial 6.6
+
+  * topic: properly decode topic and topic namespace after reading from disk
+  * topic: wrap makebundlerepository() to wrap bundlerepository class
+    (issue6856)
+  * topic: internal config option to fix hg pick behavior (issue6406)
+  * topic: use the appropriate functions to change topic and topic namespace on
+    working directory update and don't write empty/default values to disk
+
+  * topic namespaces: check that user-provided topic namespace names are
+    human-readable like topics
+  * topic namespaces: add tns_heads method to wirepeer directly instead of
+    using a subclass
+  * topic namespaces: remove .hg/topic-namespace file if it has the default
+    value ("none")
+
 11.1.0 -- 2023-10-23
 --------------------
 
--- a/debian/changelog	Fri Feb 02 00:12:49 2024 +0100
+++ b/debian/changelog	Wed Feb 07 14:57:11 2024 -0300
@@ -1,3 +1,9 @@
+mercurial-evolve (11.1.1-1) unstable; urgency=medium
+
+  * new upstream release
+
+ -- Anton Shestakov <av6@dwimlabs.net>  Mon, 05 Feb 2024 16:27:09 -0300
+
 mercurial-evolve (11.1.0-1) unstable; urgency=medium
 
   * new upstream release
--- a/hgext3rd/evolve/__init__.py	Fri Feb 02 00:12:49 2024 +0100
+++ b/hgext3rd/evolve/__init__.py	Wed Feb 07 14:57:11 2024 -0300
@@ -808,7 +808,7 @@
             if topic and _getcurrenttopic(repo) != _gettopic(target):
                 configoverride = repo.ui.configoverride({
                     (b'_internal', b'keep-topic'): b'yes'
-                }, source=b'topic-extension')
+                }, source=b'previous')
             with configoverride:
                 _prevupdate(repo, display, target, bookmark, dryrunopt,
                             mergeopt)
--- a/hgext3rd/evolve/cmdrewrite.py	Fri Feb 02 00:12:49 2024 +0100
+++ b/hgext3rd/evolve/cmdrewrite.py	Wed Feb 07 14:57:11 2024 -0300
@@ -540,10 +540,10 @@
     fp.seek(0)
     oldnode = node.short(old.node())
     message = b'temporary commit for uncommiting %s' % oldnode
-    tempnode = _patchtocommit(ui, repo, old, fp, message, oldnode)
+    tempnode = _patchtocommit(ui, repo, old, fp, message)
     return tempnode
 
-def _patchtocommit(ui, repo, old, fp, message=None, extras=None):
+def _patchtocommit(ui, repo, old, fp, message=None):
     """ A function which will apply the patch to the working directory and
     make a commit whose parents are same as that of old argument. The message
     argument tells us whether to use the message of the old commit or a
@@ -554,9 +554,9 @@
     date = old.date()
     branch = old.branch()
     user = old.user()
-    extra = old.extra()
-    if extras:
-        extra[b'uncommit_source'] = extras
+    extra = old.extra().copy()
+    extra[b'uncommit_source'] = node.short(old.node())
+
     if not message:
         message = old.description()
     store = patch.filestore()
@@ -1354,7 +1354,8 @@
 def cmdpick(ui, repo, *revs, **opts):
     """move a commit onto the working directory parent and update to it.
 
-    If there is an active topic, it will be used for the resulting changeset.
+    The resulting changeset will have the current active topic. If there's no
+    active topic set, the resulting changeset will also not have any topic.
     """
 
     cont = opts.get('continue')
@@ -1416,7 +1417,10 @@
 
 def _dopick(ui, repo, pickstate, origctx):
     """shared logic for performing or continuing a pick"""
-    overrides = {(b'phases', b'new-commit'): origctx.phase()}
+    overrides = {
+        (b'phases', b'new-commit'): origctx.phase(),
+        (b'_internal', b'topic-source'): b'local',
+    }
     new_desc = evolvecmd._rewrite_commit_message_hashes(repo,
                                                         origctx.description())
     with repo.ui.configoverride(overrides, b'pick'):
--- a/hgext3rd/evolve/metadata.py	Fri Feb 02 00:12:49 2024 +0100
+++ b/hgext3rd/evolve/metadata.py	Wed Feb 07 14:57:11 2024 -0300
@@ -6,6 +6,6 @@
 # GNU General Public License version 2 or any later version.
 
 __version__ = b'11.2.0.dev0'
-testedwith = b'5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5'
+testedwith = b'5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5 6.6'
 minimumhgversion = b'5.6'
 buglink = b'https://bz.mercurial-scm.org/'
--- a/hgext3rd/topic/__init__.py	Fri Feb 02 00:12:49 2024 +0100
+++ b/hgext3rd/topic/__init__.py	Wed Feb 07 14:57:11 2024 -0300
@@ -157,6 +157,7 @@
 
 from __future__ import absolute_import
 
+import errno
 import functools
 import re
 import time
@@ -238,7 +239,7 @@
 
 __version__ = b'1.2.0.dev0'
 
-testedwith = b'5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5'
+testedwith = b'5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5 6.6'
 minimumhgversion = b'5.6'
 buglink = b'https://bz.mercurial-scm.org/'
 
@@ -277,6 +278,12 @@
 configitem(b'_internal', b'tns-explicit-target',
            default=False,
 )
+# used for selecting what topic and topic namespace values take priority during
+# some history rewriting operations: 'local' prefers active topic and tns,
+# 'other' prefers values in commit extras, if there are any
+configitem(b'_internal', b'topic-source',
+           default=b'other',
+)
 configitem(b'devel', b'tns-report-transactions',
            default=lambda: [],
 )
@@ -660,15 +667,26 @@
                 # bypass the core "nothing changed" logic
                 configoverride = self.ui.configoverride({
                     (b'ui', b'allowemptycommit'): True
-                })
+                }, b'topic-extension')
             with configoverride:
                 return super(topicrepo, self).commit(*args, **kwargs)
 
         def commitctx(self, ctx, *args, **kwargs):
             if isinstance(ctx, context.workingcommitctx):
-                current = self.currenttopic
-                if current and constants.extrakey not in ctx.extra():
-                    ctx.extra()[constants.extrakey] = current
+                tns = self.currenttns
+                topic = self.currenttopic
+                # topic source:
+                # - 'local': we need to put currently active tns and topic into
+                #   commit extras in any case
+                # - 'other': we could use active tns and topic, but only if
+                #   commit extras don't already have them
+                ts = self.ui.config(b'_internal', b'topic-source')
+                if ts == b'local' or (tns != b'none' and b'topic-namespace' not in ctx.extra()):
+                    # default value will be dropped from extra later on
+                    ctx.extra()[b'topic-namespace'] = tns
+                if ts == b'local' or (topic and constants.extrakey not in ctx.extra()):
+                    # empty value will be dropped from extra later on
+                    ctx.extra()[constants.extrakey] = topic
             return super(topicrepo, self).commitctx(ctx, *args, **kwargs)
 
         @util.propertycache
@@ -688,7 +706,29 @@
 
         @property
         def currenttns(self):
-            tns = self.vfs.tryread(b'topic-namespace') or b'none'
+            tns = self.vfs.tryread(b'topic-namespace')
+            # we should definitely drop this at some point, but it depends on
+            # our own release schedule, not core's, so here's hg 1.0
+            # hg <= 1.0 (cfa08c88a5c4)
+            if tns == b'none':
+                try:
+                    with self.wlock(wait=False):
+                        try:
+                            # we make sure the file contains what we expect
+                            if self.vfs.read(b'topic-namespace') == b'none':
+                                repo.vfs.unlinkpath(b'topic-namespace')
+                        except IOError as err:
+                            if err.errno != errno.ENOENT:
+                                raise
+                except error.LockError:
+                    # if we cannot acquire wdir lock, then we shouldn't do
+                    # anything at all, since it'd be unsafe to modify wdir
+                    pass
+            elif tns == b'':
+                # technically, if user creates an empty file, it should be
+                # handled differently than non-existing file, but the
+                # distinction is probably not that important
+                tns = b'none'
             return encoding.tolocal(tns)
 
         @util.propertycache
@@ -1684,10 +1724,10 @@
             if pctx.phase() > phases.public:
                 tns = pctx.topic_namespace()
                 t = pctx.topic()
-            repo.vfs.write(b'topic-namespace', tns)
+            _changecurrenttns(repo, tns)
             if tns != b'none' and tns != otns:
                 repo.ui.status(_(b"switching to topic-namespace %s\n") % tns)
-            repo.vfs.write(b'topic', t)
+            _changecurrenttopic(repo, t)
             if t and t != ot:
                 repo.ui.status(_(b"switching to topic %s\n") % t)
             if ot and not t:
--- a/tests/test-namespaces-exchange.t	Fri Feb 02 00:12:49 2024 +0100
+++ b/tests/test-namespaces-exchange.t	Wed Feb 07 14:57:11 2024 -0300
@@ -70,6 +70,9 @@
   marked working directory as topic: apple
   $ hg ci -qAm apple
 
+  $ hg log -r . -T '{rev}: {join(extras, " ")}\n'
+  0: branch=default topic=apple
+
   $ hg incoming -R ../clone
   comparing with * (glob)
   0: apple default//apple (draft)
--- a/tests/test-namespaces.t	Fri Feb 02 00:12:49 2024 +0100
+++ b/tests/test-namespaces.t	Wed Feb 07 14:57:11 2024 -0300
@@ -11,6 +11,8 @@
   marked working directory as topic namespace: space-name
   $ hg debug-topic-namespaces
   space-name
+  $ cat .hg/topic-namespace
+  space-name (no-eol)
 
   $ hg log -r 'wdir()' -T '{topic_namespace}\n'
   none
@@ -34,6 +36,8 @@
 Non-ascii topic namespace name
 
   $ hg debug-topic-namespace --clear
+  $ test -f .hg/topic-namespace
+  [1]
   $ hg --encoding utf-8 debug-topic-namespace æ
   marked working directory as topic namespace: \xc3\xa6 (esc)
   $ hg --encoding utf-8 debug-topic-namespaces
@@ -42,6 +46,8 @@
   ? (esc)
   $ hg --encoding latin1 debug-topic-namespaces
   \xe6 (esc)
+  $ cat .hg/topic-namespace
+  \xc3\xa6 (no-eol) (esc)
 
   $ hg --encoding utf-8 debug-topic-namespace ©
   abort: invalid topic namespace name: '\xc2\xa9' (esc)
@@ -85,25 +91,50 @@
   $ hg log -r . -T '{rev}: {fqbn}\n'
   0: stable//alice/feature
 
+  $ hg log -r . -T '{rev}: {join(extras, " ")}\n'
+  0: branch=stable topic=feature topic-namespace=alice
+
   $ hg branches
   stable//alice/feature          0:69c7dbf6acd1
 
+Removing topic namespace file if it contains the default value
+
+The default value changed from b'default' to b'none' in 11.1.0, this is a
+safeguard against accidentally putting the new default tns value into commit
+extras with an old version of topic extension
+
+  $ printf 'none' > .hg/topic-namespace
+  $ test -f .hg/topic-namespace
+  $ hg ci -m ''
+  nothing changed
+  [1]
+  $ test -f .hg/topic-namespace
+  [1]
+
 Updating to a revision with a namespace should activate it
 
   $ hg up null
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg debug-topic-namespace
   none
+  $ test -f .hg/topic-namespace
+  [1]
   $ hg topics
      feature (1 changesets)
+  $ test -f .hg/topic
+  [1]
   $ hg up 0
   switching to topic-namespace alice
   switching to topic feature
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg debug-topic-namespace
   alice
+  $ cat .hg/topic-namespace
+  alice (no-eol)
   $ hg topics
    * feature (1 changesets)
+  $ cat .hg/topic
+  feature (no-eol)
 
 Updating to a topic namespace is not supported
 
--- a/tests/test-pick.t	Fri Feb 02 00:12:49 2024 +0100
+++ b/tests/test-pick.t	Wed Feb 07 14:57:11 2024 -0300
@@ -32,7 +32,8 @@
   
   move a commit onto the working directory parent and update to it.
   
-      If there is an active topic, it will be used for the resulting changeset.
+      The resulting changeset will have the current active topic. If there's no
+      active topic set, the resulting changeset will also not have any topic.
   
   options:
   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-topic-issue6406.t	Wed Feb 07 14:57:11 2024 -0300
@@ -0,0 +1,104 @@
+hg pick with no active topic and with a different active topic (issue6406)
+https://bz.mercurial-scm.org/show_bug.cgi?id=6406
+For prior discussions on this behavior see also
+https://foss.heptapod.net/mercurial/evolve/-/merge_requests/313
+https://foss.heptapod.net/mercurial/evolve/-/merge_requests/390
+
+  $ . "$TESTDIR/testlib/common.sh"
+
+  $ cat << EOF >> "$HGRCPATH"
+  > [phases]
+  > publish = no
+  > [extensions]
+  > evolve =
+  > topic =
+  > EOF
+
+#testcases inmemory ondisk
+#if inmemory
+  $ cat >> $HGRCPATH <<EOF
+  > [experimental]
+  > evolution.in-memory = yes
+  > EOF
+#endif
+
+  $ hg init issue6406
+  $ cd issue6406
+
+  $ mkcommit ROOT
+
+  $ hg debug-topic-namespace aaa
+  marked working directory as topic namespace: aaa
+  $ hg topic a-things
+  marked working directory as topic: a-things
+  $ mkcommit apple
+  active topic 'a-things' grew its first changeset
+  (see 'hg help topics' for more information)
+
+  $ hg up 'desc("ROOT")'
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg debug-topic-namespace bbb
+  marked working directory as topic namespace: bbb
+  $ hg topic b-things
+  marked working directory as topic: b-things
+  $ mkcommit banana
+  active topic 'b-things' grew its first changeset
+  (see 'hg help topics' for more information)
+  $ mkcommit blackberry
+
+  $ hg up 'desc("apple")'
+  switching to topic-namespace aaa
+  switching to topic a-things
+  1 files updated, 0 files merged, 2 files removed, 0 files unresolved
+
+This is what the help text says about this issue
+
+  $ hg help pick | grep 'active topic'
+      The resulting changeset will have the current active topic. If there's no
+      active topic set, the resulting changeset will also not have any topic.
+
+wdir has no active topic: pick should clear topic of the resulting cset
+
+  $ hg debug-topic-namespace --clear
+  $ hg topic --clear
+  $ hg pick 'desc("banana")'
+  picking 2:fcda3d8dafd2 "banana"
+  1 new orphan changesets
+  $ hg log -r . -T '{rev}: {desc} ({fqbn})\n'
+  4: banana (default)
+  $ hg debug-topic-namespace
+  none
+  $ hg topic --current
+  no active topic
+  [1]
+
+wdir has active topic: pick should use the active topic for the resulting cset
+
+  $ hg debug-topic-namespace everything
+  marked working directory as topic namespace: everything
+  $ hg topic all-things
+  marked working directory as topic: all-things
+  $ hg pick 'desc("blackberry")'
+  picking 3:48bbfbece8fa "blackberry"
+  active topic 'all-things' grew its first changeset
+  (see 'hg help topics' for more information)
+  $ hg log -r . -T '{rev}: {desc} ({fqbn})\n'
+  5: blackberry (default//everything/all-things)
+  $ hg debug-topic-namespace
+  everything
+  $ hg topic --current
+  all-things
+
+  $ hg log -GT '{rev}: {desc} ({fqbn})\n{join(extras, " ")}\n\n'
+  @  5: blackberry (default//everything/all-things)
+  |  branch=default topic=all-things topic-namespace=everything
+  |
+  o  4: banana (default)
+  |  branch=default
+  |
+  o  1: apple (default//aaa/a-things)
+  |  branch=default topic=a-things topic-namespace=aaa
+  |
+  o  0: ROOT (default)
+     branch=default
+  
--- a/tests/test-uncommit-interactive.t	Fri Feb 02 00:12:49 2024 +0100
+++ b/tests/test-uncommit-interactive.t	Wed Feb 07 14:57:11 2024 -0300
@@ -176,6 +176,9 @@
   $ 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 log -l 2 -T '{rev}:{node|short} {join(extras, " ")}\n' --hidden
+  3:678a59e5ff90 branch=default uncommit_source=f70fb463d5bf
+  2:e9635f4beaf1 branch=default uncommit_source=f70fb463d5bf
   $ hg obslog
   @  678a59e5ff90 (3) another one
   |    amended(content) from f70fb463d5bf using uncommit by test (Thu Jan 01 00:00:00 1970 +0000)
@@ -272,7 +275,7 @@
   Hunk #1 succeeded at 2 with fuzz 1 (offset 0 lines).
 
   $ hg diff
-  diff -r 46e35360be47 a
+  diff -r ef651ea03f87 a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,3 +1,6 @@
@@ -293,11 +296,11 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 46e35360be473bf761bedf3d05de4a68ffd9d9f8
+  # Node ID ef651ea03f873a6d70aeeb9ac351d4f65c84fb3b
   # Parent  7733902a8d94c789ca81d866bea1893d79442db6
   another one
   
-  diff -r 7733902a8d94 -r 46e35360be47 a
+  diff -r 7733902a8d94 -r ef651ea03f87 a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,5 +1,7 @@
@@ -315,9 +318,14 @@
   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'}
+  678a59e5ff90754d5e94719bd82ad169be773c21 ef651ea03f873a6d70aeeb9ac351d4f65c84fb3b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'testing uncommit on dirty wdir', 'operation': 'uncommit', 'user': 'test'}
+  $ hg log -l 4 -T '{rev}:{node|short} {join(extras, " ")}\n' --hidden
+  5:ef651ea03f87 branch=default uncommit_source=678a59e5ff90
+  4:7ca9935a62f1 branch=default uncommit_source=678a59e5ff90
+  3:678a59e5ff90 branch=default uncommit_source=f70fb463d5bf
+  2:e9635f4beaf1 branch=default uncommit_source=f70fb463d5bf
   $ hg obslog
-  @  46e35360be47 (5) another one
+  @  ef651ea03f87 (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
   |
@@ -332,7 +340,7 @@
 
   $ hg amend
   $ glog
-  @  6:905eb2a23ea2@default(draft) another one
+  @  6:f4c93db9c5cd@default(draft) another one
   |
   o  0:7733902a8d94@default(draft) The base commit
   
@@ -364,7 +372,7 @@
   $ hg status
   A foo
   $ hg diff
-  diff -r 857367499298 foo
+  diff -r 665843692be0 foo
   --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
   @@ -0,0 +1,1 @@
@@ -375,8 +383,8 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 857367499298e999b5841bb01df65f73088b5d3b
-  # Parent  905eb2a23ea2d92073419d0e19165b90d36ea223
+  # Node ID 665843692be04cb0619d8ad1f81ec31c7b33f366
+  # Parent  f4c93db9c5cde0d4ab20badcb9c514cfbf7b9e38
   Added foo
   
   $ hg amend
@@ -391,11 +399,11 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 219cfe20964e93f8bb9bd82ceaa54d3b776046db
-  # Parent  42cc15efbec26c14d96d805dee2766ba91d1fd31
+  # Node ID 24fcae345f93a1161b224f849c3a9ab362f76f44
+  # Parent  3f44e16f88daf37e5798606082ae9895eb90fc4d
   Removed a
   
-  diff -r 42cc15efbec2 -r 219cfe20964e a
+  diff -r 3f44e16f88da -r 24fcae345f93 a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,11 +0,0 @@
@@ -444,7 +452,7 @@
   (use 'hg prune .' to remove it)
 
   $ hg diff
-  diff -r 737487f1e5f8 a
+  diff -r 3778ffc6315b a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,11 +0,0 @@
@@ -466,22 +474,22 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 737487f1e5f853e55decb73ea31522c63e7f5980
-  # Parent  42cc15efbec26c14d96d805dee2766ba91d1fd31
+  # Node ID 3778ffc6315b9cefdb01c218413677c23bf5bc9f
+  # Parent  3f44e16f88daf37e5798606082ae9895eb90fc4d
   Removed a
   
 
   $ hg prune .
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  working directory is now at 42cc15efbec2
+  working directory is now at 3f44e16f88da
   1 changesets pruned
   $ hg revert --all
   undeleting a
 
   $ glog
-  @  10:42cc15efbec2@default(draft) Added foo
+  @  10:3f44e16f88da@default(draft) Added foo
   |
-  o  6:905eb2a23ea2@default(draft) another one
+  o  6:f4c93db9c5cd@default(draft) another one
   |
   o  0:7733902a8d94@default(draft) The base commit
   
@@ -527,18 +535,18 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 25a080d13cb23dbd014839f54d99a96e57ba7e9b
-  # Parent  42cc15efbec26c14d96d805dee2766ba91d1fd31
+  # Node ID 5fcbf1c538b13186c920c63ca6a7dab443ad6663
+  # Parent  3f44e16f88daf37e5798606082ae9895eb90fc4d
   Added x
   
-  diff -r 42cc15efbec2 -r 25a080d13cb2 x
+  diff -r 3f44e16f88da -r 5fcbf1c538b1 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 @@
   +abcd
 
   $ hg diff
-  diff -r 25a080d13cb2 foo
+  diff -r 5fcbf1c538b1 foo
   --- a/foo	Thu Jan 01 00:00:00 1970 +0000
   +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,1 +1,2 @@
@@ -555,15 +563,15 @@
 =====================================================
 
   $ glog
-  @  16:25a080d13cb2@default(draft) Added x
+  @  16:5fcbf1c538b1@default(draft) Added x
   |
-  o  10:42cc15efbec2@default(draft) Added foo
+  o  10:3f44e16f88da@default(draft) Added foo
   |
-  o  6:905eb2a23ea2@default(draft) another one
+  o  6:f4c93db9c5cd@default(draft) another one
   |
   o  0:7733902a8d94@default(draft) The base commit
   
-  $ hg up 905eb2a23ea2
+  $ hg up f4c93db9c5cd
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
 
   $ touch bar
@@ -578,11 +586,11 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 905eb2a23ea2d92073419d0e19165b90d36ea223
+  # Node ID f4c93db9c5cde0d4ab20badcb9c514cfbf7b9e38
   # Parent  7733902a8d94c789ca81d866bea1893d79442db6
   another one
   
-  diff -r 7733902a8d94 -r 905eb2a23ea2 a
+  diff -r 7733902a8d94 -r f4c93db9c5cd a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,5 +1,11 @@
@@ -642,7 +650,7 @@
   2 new orphan changesets
 
   $ hg diff
-  diff -r 676366511f95 a
+  diff -r 98a3d38b1b81 a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -8,3 +8,4 @@
@@ -650,7 +658,7 @@
    4
    5
   +babar
-  diff -r 676366511f95 bar
+  diff -r 98a3d38b1b81 bar
   --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   +++ b/bar	Thu Jan 01 00:00:00 1970 +0000
   @@ -0,0 +1,1 @@
@@ -661,11 +669,11 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 676366511f95ca4122413dcf79b45eaab61fb387
+  # Node ID 98a3d38b1b812aeca00a61a5554dfa228d632b9e
   # Parent  7733902a8d94c789ca81d866bea1893d79442db6
   another one
   
-  diff -r 7733902a8d94 -r 676366511f95 a
+  diff -r 7733902a8d94 -r 98a3d38b1b81 a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,5 +1,10 @@
@@ -724,11 +732,11 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 62d907d0c4fa13b4b8bfeed05f13751035daf963
+  # Node ID 9c6818648d9e694d2decfde377c6821191c5bfd5
   # Parent  7733902a8d94c789ca81d866bea1893d79442db6
   another one
   
-  diff -r 7733902a8d94 -r 62d907d0c4fa a
+  diff -r 7733902a8d94 -r 9c6818648d9e a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,5 +1,7 @@
@@ -741,7 +749,7 @@
    5
 
   $ hg diff
-  diff -r 62d907d0c4fa a
+  diff -r 9c6818648d9e a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,3 +1,6 @@
@@ -756,7 +764,7 @@
    4
    5
   +babar
-  diff -r 62d907d0c4fa bar
+  diff -r 9c6818648d9e bar
   --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   +++ b/bar	Thu Jan 01 00:00:00 1970 +0000
   @@ -0,0 +1,1 @@
@@ -792,11 +800,11 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID be5c67225e80b050867862bbd9f4755c4e9207c5
-  # Parent  c280a907fddcef2ffe9fadcc2d87f29998e22b2f
+  # Node ID bbdfefb59fb08650a9a663367ab18a3c2d072691
+  # Parent  4f15d398b049b07eb4f4c98d3466a7f708e61735
   some more changes
   
-  diff -r c280a907fddc -r be5c67225e80 a
+  diff -r 4f15d398b049 -r bbdfefb59fb0 a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -9,3 +9,4 @@
@@ -804,7 +812,7 @@
    5
    babar
   +celeste
-  diff -r c280a907fddc -r be5c67225e80 b
+  diff -r 4f15d398b049 -r bbdfefb59fb0 b
   --- a/b	Thu Jan 01 00:00:00 1970 +0000
   +++ b/b	Thu Jan 01 00:00:00 1970 +0000
   @@ -5,3 +5,4 @@
@@ -830,7 +838,7 @@
   M a
   ? foo.orig
   $ hg diff
-  diff -r c701d7c8d18b a
+  diff -r 0873ba67273f a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -9,3 +9,4 @@
@@ -843,11 +851,11 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID c701d7c8d18be55a92688f4458c26bd74fb1f525
-  # Parent  c280a907fddcef2ffe9fadcc2d87f29998e22b2f
+  # Node ID 0873ba67273ff5654e032c98df89be8cf431cb63
+  # Parent  4f15d398b049b07eb4f4c98d3466a7f708e61735
   some more changes
   
-  diff -r c280a907fddc -r c701d7c8d18b b
+  diff -r 4f15d398b049 -r 0873ba67273f b
   --- a/b	Thu Jan 01 00:00:00 1970 +0000
   +++ b/b	Thu Jan 01 00:00:00 1970 +0000
   @@ -5,3 +5,4 @@
@@ -904,7 +912,7 @@
   ? foo.orig
 
   $ hg diff
-  diff -r 28d5de12b225 a
+  diff -r 72c07d186be7 a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -1,3 +1,4 @@
@@ -918,11 +926,11 @@
   # User test
   # Date 0 0
   #      Thu Jan 01 00:00:00 1970 +0000
-  # Node ID 28d5de12b225d1e0951110cced8d8994227be026
-  # Parent  c280a907fddcef2ffe9fadcc2d87f29998e22b2f
+  # Node ID 72c07d186be791e6fa80bfdaf85f493dca503df2
+  # Parent  4f15d398b049b07eb4f4c98d3466a7f708e61735
   some more changes
   
-  diff -r c280a907fddc -r 28d5de12b225 a
+  diff -r 4f15d398b049 -r 72c07d186be7 a
   --- a/a	Thu Jan 01 00:00:00 1970 +0000
   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
   @@ -9,3 +9,4 @@
@@ -930,7 +938,7 @@
    5
    babar
   +celeste
-  diff -r c280a907fddc -r 28d5de12b225 b
+  diff -r 4f15d398b049 -r 72c07d186be7 b
   --- a/b	Thu Jan 01 00:00:00 1970 +0000
   +++ b/b	Thu Jan 01 00:00:00 1970 +0000
   @@ -5,3 +5,4 @@