merge with stable
authorMatt Mackall <mpm@selenic.com>
Wed, 03 Feb 2016 16:24:24 -0600
changeset 27980 01a5143cd25f
parent 27968 8e79ad2da8a6 (current diff)
parent 27979 c58c4683e2b7 (diff)
child 27981 d630eac3a5db
merge with stable
--- a/.hgsigs	Mon Feb 01 18:29:07 2016 -0600
+++ b/.hgsigs	Wed Feb 03 16:24:24 2016 -0600
@@ -120,3 +120,4 @@
 ea389970c08449440587712117f178d33bab3f1e 0 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
+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
--- a/.hgtags	Mon Feb 01 18:29:07 2016 -0600
+++ b/.hgtags	Wed Feb 03 16:24:24 2016 -0600
@@ -133,3 +133,4 @@
 ea389970c08449440587712117f178d33bab3f1e 3.6.3
 158bdc8965720ca4061f8f8d806563cfc7cdb62e 3.7-rc
 2408645de650d8a29a6ce9e7dce601d8dd0d1474 3.7
+b698abf971e7377d9b7ec7fc8c52df45255b0329 3.7.1
--- a/hgext/histedit.py	Mon Feb 01 18:29:07 2016 -0600
+++ b/hgext/histedit.py	Wed Feb 03 16:24:24 2016 -0600
@@ -887,7 +887,7 @@
 
     - `edit` to edit this changeset
 
-    There are a number of ways to select the root changset:
+    There are a number of ways to select the root changeset:
 
     - Specify ANCESTOR directly
 
--- a/hgext/rebase.py	Mon Feb 01 18:29:07 2016 -0600
+++ b/hgext/rebase.py	Wed Feb 03 16:24:24 2016 -0600
@@ -47,6 +47,17 @@
 def _nothingtorebase():
     return 1
 
+def _savegraft(ctx, extra):
+    s = ctx.extra().get('source', None)
+    if s is not None:
+        extra['source'] = s
+    s = ctx.extra().get('intermediate-source', None)
+    if s is not None:
+        extra['intermediate-source'] = s
+
+def _savebranch(ctx, extra):
+    extra['branch'] = ctx.branch()
+
 def _makeextrafn(copiers):
     """make an extrafn out of the given copy-functions.
 
@@ -208,7 +219,7 @@
         collapsemsg = cmdutil.logmessage(ui, opts)
         date = opts.get('date', None)
         e = opts.get('extrafn') # internal, used by e.g. hgsubversion
-        extrafns = []
+        extrafns = [_savegraft]
         if e:
             extrafns = [e]
         keepf = opts.get('keep', False)
@@ -397,13 +408,18 @@
             if dest.closesbranch() and not keepbranchesf:
                 ui.status(_('reopening closed branch head %s\n') % dest)
 
-        if keepbranchesf and collapsef:
-            branches = set()
-            for rev in state:
-                branches.add(repo[rev].branch())
-                if len(branches) > 1:
-                    raise error.Abort(_('cannot collapse multiple named '
-                                        'branches'))
+        if keepbranchesf:
+            # insert _savebranch at the start of extrafns so if
+            # there's a user-provided extrafn it can clobber branch if
+            # desired
+            extrafns.insert(0, _savebranch)
+            if collapsef:
+                branches = set()
+                for rev in state:
+                    branches.add(repo[rev].branch())
+                    if len(branches) > 1:
+                        raise error.Abort(_('cannot collapse multiple named '
+                            'branches'))
 
         # Rebase
         if not targetancestors:
@@ -605,10 +621,7 @@
         if commitmsg is None:
             commitmsg = ctx.description()
         keepbranch = keepbranches and repo[p1].branch() != ctx.branch()
-        extra = ctx.extra().copy()
-        if not keepbranches:
-            del extra['branch']
-        extra['rebase_source'] = ctx.hex()
+        extra = {'rebase_source': ctx.hex()}
         if extrafn:
             extrafn(ctx, extra)
 
--- a/i18n/pt_BR.po	Mon Feb 01 18:29:07 2016 -0600
+++ b/i18n/pt_BR.po	Wed Feb 03 16:24:24 2016 -0600
@@ -1358,6 +1358,8 @@
 "'attachio' command\n"
 "    attach client's stdio passed by sendmsg()"
 msgstr ""
+"comando 'attachio'\n"
+"    conecta à saída padrão do cliente passada por sendmsg()"
 
 msgid ""
 "'chdir' command\n"
@@ -5000,13 +5002,13 @@
 msgid ""
 "By default each edited revision needs to be present in histedit commands.\n"
 "To remove revision you need to use ``drop`` operation. You can configure\n"
-"the drop to be implicit for missing commits by adding:"
+"the drop to be implicit for missing commits by adding::"
 msgstr ""
 "Por padrão cada revisão editada precisa estar presente nos\n"
 "comandos histedit.\n"
 "Para remover uma revisão, você precisa usar a operação ``drop``.\n"
 "Você pode configurar a remoção como implícita para revisões\n"
-"faltando adicionando:"
+"faltando adicionando::"
 
 msgid ""
 "  [histedit]\n"
@@ -5148,12 +5150,12 @@
 msgid ""
 "    This command lets you edit a linear series of changesets (up to\n"
 "    and including the working directory, which should be clean).\n"
-"    You can::"
+"    You can:"
 msgstr ""
 "    Este comando possibilita a edição de uma série linear\n"
 "    de revisões (até e incluindo o diretório de trabalho,\n"
 "    que deve estar limpo).\n"
-"    Você pode usar::"
+"    Você pode usar:"
 
 msgid "    - `pick` to [re]order a changeset"
 msgstr "    - `pick` para [re]ordenar uma revisão"
@@ -5173,18 +5175,18 @@
 msgid "    - `edit` to edit this changeset"
 msgstr "    - `edit` para editar a revisão"
 
-msgid "    There are a number of ways to select the root changset::"
-msgstr "    Há diversas maneiras de selecionar a revisão raiz::"
+msgid "    There are a number of ways to select the root changset:"
+msgstr "    Há diversas maneiras de selecionar a revisão raiz:"
 
 msgid "    - Specify ANCESTOR directly"
 msgstr "    - Especificar ANCESTRAL diretamente"
 
 msgid ""
 "    - Use --outgoing -- it will be the first linear changeset not\n"
-"      included in destination. (See :hg:\"help default-push\")"
+"      included in destination. (See :hg:`help config.default-push`)"
 msgstr ""
 "    - Usar --outgoing -- será a primeira revisão linear não\n"
-"      incluída no destino. (veja :hg:\"help default-push\")"
+"      incluída no destino. (veja :hg:`help config.default-push`)"
 
 msgid ""
 "    - Otherwise, the value from the \"histedit.defaultrev\" config option\n"
@@ -9156,33 +9158,33 @@
 "    atual (a revisão de destino não é modificada pelo rebaseamento, mas\n"
 "    novas revisões são acrescentadas como seus descendentes)."
 
-msgid "    Here are the ways to select changesets::"
-msgstr "    Estas são as maneiras de selecionar revisões::"
+msgid "    Here are the ways to select changesets:"
+msgstr "    Estas são as maneiras de selecionar revisões:"
 
 msgid "      1. Explicitly select them using ``--rev``."
 msgstr "      1. Seleção explícita usando ``--rev``."
 
 msgid ""
 "      2. Use ``--source`` to select a root changeset and include all of its\n"
-"      descendants."
+"         descendants."
 msgstr ""
 "      2. Use ``--source`` para selecionar uma revisão raiz e incluir\n"
-"      todos os seus descendentes."
+"         todos os seus descendentes."
 
 msgid ""
 "      3. Use ``--base`` to select a changeset; rebase will find ancestors\n"
-"      and their descendants which are not also ancestors of the destination."
+"         and their descendants which are not also ancestors of the destination."
 msgstr ""
 "      3. Use ``--base`` para selecionar uma revisão; rebase encontrará\n"
-"      os ancestrais e seus descendentes que também não forem ancestrais\n"
-"      do destino."
+"         os ancestrais e seus descendentes que também não forem ancestrais\n"
+"         do destino."
 
 msgid ""
 "      4. If you do not specify any of ``--rev``, ``source``, or ``--base``,\n"
-"      rebase will use ``--base .`` as above."
+"         rebase will use ``--base .`` as above."
 msgstr ""
 "      4. Se você não especificar ``--rev``, ``source`` ou ``--base``,\n"
-"      rebase usará ``--base .`` como acima."
+"         rebase usará ``--base .`` como acima."
 
 msgid ""
 "    Rebase will destroy original changesets unless you use ``--keep``.\n"
@@ -12174,6 +12176,9 @@
 msgid "cannot use --commit with --no-commit"
 msgstr "não é possível usar --commit com --no-commit"
 
+msgid "cannot use --merge with --no-commit"
+msgstr "não é possível usar --merge com --no-commit"
+
 msgid "please specify just one revision"
 msgstr "por favor especifique apenas uma revisão"
 
@@ -12463,6 +12468,9 @@
 msgid "force"
 msgstr "forçar"
 
+msgid "revision for bookmark action"
+msgstr "revisão para a ação de marcadores"
+
 msgid "delete a given bookmark"
 msgstr "apaga o marcador pedido"
 
@@ -19084,11 +19092,11 @@
 "Configurações globais, como por exemplo seu nome de usuário, são\n"
 "tipicamente colocadas em:"
 
-msgid "  ``%USERPROFILE%\\mercurial.ini``"
-msgstr "  ``%USERPROFILE%\\mercurial.ini``"
-
-msgid "  ``$HOME/.hgrc``"
-msgstr "  ``$HOME/.hgrc``"
+msgid "  - ``%USERPROFILE%\\mercurial.ini`` (on Windows)"
+msgstr "  - ``%USERPROFILE%\\mercurial.ini`` (em Windows)"
+
+msgid "  - ``$HOME/.hgrc`` (on Unix, Plan9)"
+msgstr "  - ``$HOME/.hgrc`` (em Unix, Plan9)"
 
 msgid ""
 "The names of these files depend on the system on which Mercurial is\n"
@@ -21138,53 +21146,6 @@
 "    entradas em ``http_proxy.no``. (padrão: False)"
 
 msgid ""
-"``merge``\n"
-"---------"
-msgstr ""
-"``merge``\n"
-"---------"
-
-msgid "This section specifies behavior during merges and updates."
-msgstr ""
-"Esta seção especifica o comportamento durante mesclagens e atualizações."
-
-msgid ""
-"``checkignored``\n"
-"   Controls behavior when an ignored file on disk has the same name as a tracked\n"
-"   file in the changeset being merged or updated to, and has different\n"
-"   contents. Options are ``abort``, ``warn`` and ``ignore``. With ``abort``,\n"
-"   abort on such files. With ``warn``, warn on such files and back them up as\n"
-"   .orig. With ``ignore``, don't print a warning and back them up as\n"
-"   .orig. (default: ``abort``)"
-msgstr ""
-"``checkignored``\n"
-"   Controla o comportamento quando um arquivo ignorado no disco\n"
-"   possuir o mesmo nome que um arquivo rastreado na revisão sendo\n"
-"   mesclada ou atualizada, e possuir conteúdo diferente.\n"
-"   As opções são ``abort``, ``warn`` e ``ignore``.\n"
-"   Com ``abort``, aborta ao encontrar tais arquivos.\n"
-"   Com ``warn``, emite um aviso e cria uma cópia desses arquivos\n"
-"   com a extensão .orig.\n"
-"   Com ``ignore``, não emite um aviso e cria uma cópia com a\n"
-"   extensão .orig.\n"
-"   (padrão: ``abort``)"
-
-msgid ""
-"``checkunknown``\n"
-"   Controls behavior when an unknown file that isn't ignored has the same name\n"
-"   as a tracked file in the changeset being merged or updated to, and has\n"
-"   different contents. Similar to ``merge.checkignored``, except for files that\n"
-"   are not ignored. (default: ``abort``)"
-msgstr ""
-"``checkunknown``\n"
-"   Controla o comportamento quando um arquivo desconhecido que não\n"
-"   for ignorado tiver o mesmo nome que um arquivo rastreado na\n"
-"   revisão sendo mesclada ou atualizada, e possuir conteúdo diferente.\n"
-"   Opera de forma similar a ``merge.checkignored``, mas para arquivos\n"
-"   que não são ignorados.\n"
-"   (padrão: ``abort``)"
-
-msgid ""
 "``merge-patterns``\n"
 "------------------"
 msgstr ""
@@ -32361,6 +32322,53 @@
 msgstr "o número de cpus deve ser um inteiro"
 
 #~ msgid ""
+#~ "``merge``\n"
+#~ "---------"
+#~ msgstr ""
+#~ "``merge``\n"
+#~ "---------"
+
+#~ msgid "This section specifies behavior during merges and updates."
+#~ msgstr ""
+#~ "Esta seção especifica o comportamento durante mesclagens e atualizações."
+
+#~ msgid ""
+#~ "``checkignored``\n"
+#~ "   Controls behavior when an ignored file on disk has the same name as a tracked\n"
+#~ "   file in the changeset being merged or updated to, and has different\n"
+#~ "   contents. Options are ``abort``, ``warn`` and ``ignore``. With ``abort``,\n"
+#~ "   abort on such files. With ``warn``, warn on such files and back them up as\n"
+#~ "   .orig. With ``ignore``, don't print a warning and back them up as\n"
+#~ "   .orig. (default: ``abort``)"
+#~ msgstr ""
+#~ "``checkignored``\n"
+#~ "   Controla o comportamento quando um arquivo ignorado no disco\n"
+#~ "   possuir o mesmo nome que um arquivo rastreado na revisão sendo\n"
+#~ "   mesclada ou atualizada, e possuir conteúdo diferente.\n"
+#~ "   As opções são ``abort``, ``warn`` e ``ignore``.\n"
+#~ "   Com ``abort``, aborta ao encontrar tais arquivos.\n"
+#~ "   Com ``warn``, emite um aviso e cria uma cópia desses arquivos\n"
+#~ "   com a extensão .orig.\n"
+#~ "   Com ``ignore``, não emite um aviso e cria uma cópia com a\n"
+#~ "   extensão .orig.\n"
+#~ "   (padrão: ``abort``)"
+
+#~ msgid ""
+#~ "``checkunknown``\n"
+#~ "   Controls behavior when an unknown file that isn't ignored has the same name\n"
+#~ "   as a tracked file in the changeset being merged or updated to, and has\n"
+#~ "   different contents. Similar to ``merge.checkignored``, except for files that\n"
+#~ "   are not ignored. (default: ``abort``)"
+#~ msgstr ""
+#~ "``checkunknown``\n"
+#~ "   Controla o comportamento quando um arquivo desconhecido que não\n"
+#~ "   for ignorado tiver o mesmo nome que um arquivo rastreado na\n"
+#~ "   revisão sendo mesclada ou atualizada, e possuir conteúdo diferente.\n"
+#~ "   Opera de forma similar a ``merge.checkignored``, mas para arquivos\n"
+#~ "   que não são ignorados.\n"
+#~ "   (padrão: ``abort``)"
+
+#~ msgid ""
 #~ "# Edit history between %s and %s\n"
 #~ "#\n"
 #~ "# Commits are listed from least to most recent\n"
--- a/mercurial/cmdutil.py	Mon Feb 01 18:29:07 2016 -0600
+++ b/mercurial/cmdutil.py	Wed Feb 03 16:24:24 2016 -0600
@@ -2623,11 +2623,6 @@
                 message = old.description()
 
             pureextra = extra.copy()
-            if 'amend_source' in pureextra:
-                del pureextra['amend_source']
-            pureoldextra = old.extra()
-            if 'amend_source' in pureoldextra:
-                del pureoldextra['amend_source']
             extra['amend_source'] = old.hex()
 
             new = context.memctx(repo,
@@ -2645,7 +2640,7 @@
                 and newdesc == old.description()
                 and user == old.user()
                 and date == old.date()
-                and pureextra == pureoldextra):
+                and pureextra == old.extra()):
                 # nothing changed. continuing here would create a new node
                 # anyway because of the amend_source noise.
                 #
--- a/mercurial/commands.py	Mon Feb 01 18:29:07 2016 -0600
+++ b/mercurial/commands.py	Wed Feb 03 16:24:24 2016 -0600
@@ -1682,9 +1682,6 @@
         if not allowunstable and old.children():
             raise error.Abort(_('cannot amend changeset with children'))
 
-        newextra = extra.copy()
-        newextra['branch'] = branch
-        extra = newextra
         # commitfunc is used only for temporary amend commit by cmdutil.amend
         def commitfunc(ui, repo, message, match, opts):
             return repo.commit(message,
@@ -4013,10 +4010,10 @@
         if opts.get('dry_run'):
             continue
 
-        extra = ctx.extra().copy()
-        del extra['branch']
-        source = extra.get('source')
+        source = ctx.extra().get('source')
+        extra = {}
         if source:
+            extra['source'] = source
             extra['intermediate-source'] = ctx.hex()
         else:
             extra['source'] = ctx.hex()
--- a/mercurial/osutil.c	Mon Feb 01 18:29:07 2016 -0600
+++ b/mercurial/osutil.c	Wed Feb 03 16:24:24 2016 -0600
@@ -653,7 +653,11 @@
 /*
  * recvfds() simply does not release GIL during blocking io operation because
  * command server is known to be single-threaded.
+ *
+ * Old systems such as Solaris don't provide CMSG_LEN, msg_control, etc.
+ * Currently, recvfds() is not supported on these platforms.
  */
+#ifdef CMSG_LEN
 
 static ssize_t recvfdstobuf(int sockfd, int **rfds, void *cbuf, size_t cbufsize)
 {
@@ -713,6 +717,7 @@
 	return NULL;
 }
 
+#endif /* CMSG_LEN */
 #endif /* ndef _WIN32 */
 
 static PyObject *listdir(PyObject *self, PyObject *args, PyObject *kwargs)
@@ -881,9 +886,11 @@
 	{"statfiles", (PyCFunction)statfiles, METH_VARARGS | METH_KEYWORDS,
 	 "stat a series of files or symlinks\n"
 "Returns None for non-existent entries and entries of other types.\n"},
+#ifdef CMSG_LEN
 	{"recvfds", (PyCFunction)recvfds, METH_VARARGS,
 	 "receive list of file descriptors via socket\n"},
 #endif
+#endif
 #ifdef __APPLE__
 	{
 		"isgui", (PyCFunction)isgui, METH_NOARGS,
--- a/mercurial/pure/osutil.py	Mon Feb 01 18:29:07 2016 -0600
+++ b/mercurial/pure/osutil.py	Wed Feb 03 16:24:24 2016 -0600
@@ -104,9 +104,15 @@
         ]
 
     _libc = ctypes.CDLL(ctypes.util.find_library('c'), use_errno=True)
-    _recvmsg = _libc.recvmsg
-    _recvmsg.restype = getattr(ctypes, 'c_ssize_t', ctypes.c_long)
-    _recvmsg.argtypes = (ctypes.c_int, ctypes.POINTER(_msghdr), ctypes.c_int)
+    _recvmsg = getattr(_libc, 'recvmsg', None)
+    if _recvmsg:
+        _recvmsg.restype = getattr(ctypes, 'c_ssize_t', ctypes.c_long)
+        _recvmsg.argtypes = (ctypes.c_int, ctypes.POINTER(_msghdr),
+                             ctypes.c_int)
+    else:
+        # recvmsg isn't always provided by libc; such systems are unsupported
+        def _recvmsg(sockfd, msg, flags):
+            raise NotImplementedError('unsupported platform')
 
     def _CMSG_FIRSTHDR(msgh):
         if msgh.msg_controllen < ctypes.sizeof(_cmsghdr):
--- a/tests/test-histedit-obsolete.t	Mon Feb 01 18:29:07 2016 -0600
+++ b/tests/test-histedit-obsolete.t	Wed Feb 03 16:24:24 2016 -0600
@@ -152,14 +152,6 @@
   rebasing 11:c13eb81022ca "f"
   $ hg up tip -q
 
-check that extra has accumulated from histedit and rebase
-
-  $ hg log -T '{extras % "{key}={value}\n"}\n' -r tip
-  branch=default
-  histedit_source=cacdfd884a9321ec4e1de275ef3949fa953a1f83
-  rebase_source=c13eb81022caa686a369223fe7f926bc4f7db576
-  
-
 Test dropping of changeset on the top of the stack
 -------------------------------------------------------
 
@@ -173,7 +165,7 @@
   $ cd droplast
   $ hg histedit -r '40db8afa467b' --commands - << EOF
   > pick 40db8afa467b 10 c
-  > drop 947ece25170f 11 f
+  > drop b449568bf7fc 11 f
   > EOF
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg log -G
@@ -221,7 +213,7 @@
   $ hg ph -pv '.^'
   phase changed for 2 changesets
   $ hg log -G
-  @  13:947ece25170f (draft) f
+  @  13:b449568bf7fc (draft) f
   |
   o  12:40db8afa467b (public) c
   |
@@ -243,17 +235,17 @@
   > done
   $ hg phase --force --secret .~2
   $ hg log -G
-  @  18:14bda137d5b3 (secret) k
+  @  18:ee118ab9fa44 (secret) k
   |
-  o  17:c62e7241a4f2 (secret) j
+  o  17:3a6c53ee7f3d (secret) j
   |
-  o  16:9cd3934e05af (secret) i
+  o  16:b605fb7503f2 (secret) i
   |
-  o  15:ee4a24fc4dfa (draft) h
+  o  15:7395e1ff83bd (draft) h
   |
-  o  14:d22905de3528 (draft) g
+  o  14:6b70183d2492 (draft) g
   |
-  o  13:947ece25170f (draft) f
+  o  13:b449568bf7fc (draft) f
   |
   o  12:40db8afa467b (public) c
   |
@@ -271,33 +263,33 @@
 
   $ cp -r base simple-draft
   $ cd simple-draft
-  $ hg histedit -r '947ece25170f' --commands - << EOF
-  > edit 947ece25170f 11 f
-  > pick d22905de3528 12 g
-  > pick ee4a24fc4dfa 13 h
-  > pick 9cd3934e05af 14 i
-  > pick c62e7241a4f2 15 j
-  > pick 14bda137d5b3 16 k
+  $ hg histedit -r 'b449568bf7fc' --commands - << EOF
+  > edit b449568bf7fc 11 f
+  > pick 6b70183d2492 12 g
+  > pick 7395e1ff83bd 13 h
+  > pick b605fb7503f2 14 i
+  > pick 3a6c53ee7f3d 15 j
+  > pick ee118ab9fa44 16 k
   > EOF
   0 files updated, 0 files merged, 6 files removed, 0 files unresolved
   adding f
-  Editing (947ece25170f), you may commit or record as needed now.
+  Editing (b449568bf7fc), you may commit or record as needed now.
   (hg histedit --continue to resume)
   [1]
   $ echo f >> f
   $ hg histedit --continue
   $ hg log -G
-  @  24:12925f763c90 (secret) k
+  @  24:12e89af74238 (secret) k
   |
-  o  23:4545a6e77442 (secret) j
+  o  23:636a8687b22e (secret) j
   |
-  o  22:d947a0798e76 (secret) i
+  o  22:ccaf0a38653f (secret) i
   |
-  o  21:28fb35ae4ebb (draft) h
+  o  21:11a89d1c2613 (draft) h
   |
-  o  20:10b22a5a9645 (draft) g
+  o  20:c1dec7ca82ea (draft) g
   |
-  o  19:c5a1db4a69f5 (draft) f
+  o  19:087281e68428 (draft) f
   |
   o  12:40db8afa467b (public) c
   |
@@ -314,33 +306,33 @@
   > [phases]
   > new-commit=secret
   > EOF
-  $ hg histedit -r '947ece25170f' --commands - << EOF
-  > edit 947ece25170f 11 f
-  > pick d22905de3528 12 g
-  > pick ee4a24fc4dfa 13 h
-  > pick 9cd3934e05af 14 i
-  > pick c62e7241a4f2 15 j
-  > pick 14bda137d5b3 16 k
+  $ hg histedit -r 'b449568bf7fc' --commands - << EOF
+  > edit b449568bf7fc 11 f
+  > pick 6b70183d2492 12 g
+  > pick 7395e1ff83bd 13 h
+  > pick b605fb7503f2 14 i
+  > pick 3a6c53ee7f3d 15 j
+  > pick ee118ab9fa44 16 k
   > EOF
   0 files updated, 0 files merged, 6 files removed, 0 files unresolved
   adding f
-  Editing (947ece25170f), you may commit or record as needed now.
+  Editing (b449568bf7fc), you may commit or record as needed now.
   (hg histedit --continue to resume)
   [1]
   $ echo f >> f
   $ hg histedit --continue
   $ hg log -G
-  @  24:12925f763c90 (secret) k
+  @  24:12e89af74238 (secret) k
   |
-  o  23:4545a6e77442 (secret) j
+  o  23:636a8687b22e (secret) j
   |
-  o  22:d947a0798e76 (secret) i
+  o  22:ccaf0a38653f (secret) i
   |
-  o  21:28fb35ae4ebb (draft) h
+  o  21:11a89d1c2613 (draft) h
   |
-  o  20:10b22a5a9645 (draft) g
+  o  20:c1dec7ca82ea (draft) g
   |
-  o  19:c5a1db4a69f5 (draft) f
+  o  19:087281e68428 (draft) f
   |
   o  12:40db8afa467b (public) c
   |
@@ -357,27 +349,27 @@
 
   $ cp -r base reorder
   $ cd reorder
-  $ hg histedit -r '947ece25170f' --commands - << EOF
-  > pick 947ece25170f 11 f
-  > pick c62e7241a4f2 15 j
-  > pick d22905de3528 12 g
-  > pick 9cd3934e05af 14 i
-  > pick ee4a24fc4dfa 13 h
-  > pick 14bda137d5b3 16 k
+  $ hg histedit -r 'b449568bf7fc' --commands - << EOF
+  > pick b449568bf7fc 11 f
+  > pick 3a6c53ee7f3d 15 j
+  > pick 6b70183d2492 12 g
+  > pick b605fb7503f2 14 i
+  > pick 7395e1ff83bd 13 h
+  > pick ee118ab9fa44 16 k
   > EOF
   0 files updated, 0 files merged, 5 files removed, 0 files unresolved
   $ hg log -G
-  @  23:9e712162b2c1 (secret) k
+  @  23:558246857888 (secret) k
   |
-  o  22:490861543602 (secret) h
+  o  22:28bd44768535 (secret) h
   |
-  o  21:86aeda50b70d (secret) i
+  o  21:d5395202aeb9 (secret) i
   |
-  o  20:b2fa360bc090 (secret) g
+  o  20:21edda8e341b (secret) g
   |
-  o  19:e10fb4e3eb8e (secret) j
+  o  19:5ab64f3a4832 (secret) j
   |
-  o  13:947ece25170f (draft) f
+  o  13:b449568bf7fc (draft) f
   |
   o  12:40db8afa467b (public) c
   |
@@ -399,13 +391,13 @@
   > [phases]
   > new-commit=secret
   > EOF
-  $ hg histedit -r '947ece25170f' --commands - << EOF
-  > pick ee4a24fc4dfa 13 h
-  > fold 947ece25170f 11 f
-  > pick d22905de3528 12 g
-  > fold c62e7241a4f2 15 j
-  > pick 9cd3934e05af 14 i
-  > fold 14bda137d5b3 16 k
+  $ hg histedit -r 'b449568bf7fc' --commands - << EOF
+  > pick 7395e1ff83bd 13 h
+  > fold b449568bf7fc 11 f
+  > pick 6b70183d2492 12 g
+  > fold 3a6c53ee7f3d 15 j
+  > pick b605fb7503f2 14 i
+  > fold ee118ab9fa44 16 k
   > EOF
   0 files updated, 0 files merged, 6 files removed, 0 files unresolved
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
@@ -415,29 +407,29 @@
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg log -G
-  @  27:769e8ee8708e (secret) i
+  @  27:f9daec13fb98 (secret) i
   |
-  o  24:3de6dbab1b62 (secret) g
+  o  24:49807617f46a (secret) g
   |
-  o  21:1d51647632b2 (draft) h
+  o  21:050280826e04 (draft) h
   |
   o  12:40db8afa467b (public) c
   |
   o  0:cb9a9f314b8b (public) a
   
-  $ hg co 3de6dbab1b62
+  $ hg co 49807617f46a
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
   $ echo wat >> wat
   $ hg add wat
   $ hg ci -m 'add wat'
   created new head
-  $ hg merge 769e8ee8708e
+  $ hg merge f9daec13fb98
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
   $ hg ci -m 'merge'
   $ echo not wat > wat
   $ hg ci -m 'modify wat'
-  $ hg histedit 1d51647632b2
+  $ hg histedit 050280826e04
   abort: cannot edit history that contains merges
   [255]
   $ cd ..
--- a/tests/test-rebase-obsolete.t	Mon Feb 01 18:29:07 2016 -0600
+++ b/tests/test-rebase-obsolete.t	Wed Feb 03 16:24:24 2016 -0600
@@ -253,9 +253,9 @@
   grafting 11:4596109a6a43 "D"
   $ hg up -qr 'desc(E)'
   $ hg rebase -s tip -d .
-  rebasing 14:0f4c66d0b70f "D" (tip)
+  rebasing 14:9e36056a46e3 "D" (tip)
   $ hg log --style default --debug -r tip
-  changeset:   15:884f358981b4d32069bb539e0e95d49a35eb81d0
+  changeset:   15:627d4614809036ba22b9e7cb31638ddc06ab99ab
   tag:         tip
   phase:       draft
   parent:      4:9520eea781bcca16c1e15acc0ba14335a0e8e5ba
@@ -266,7 +266,7 @@
   files+:      D
   extra:       branch=default
   extra:       intermediate-source=4596109a6a4328c398bde3a4a3b6737cfade3003
-  extra:       rebase_source=0f4c66d0b70f8e1ce4aec01f8e95cf24ee923afa
+  extra:       rebase_source=9e36056a46e37c9776168c7375734eebc70e294f
   extra:       source=32af7686d403cf45b5d95f2d70cebea587ac806a
   description:
   D