changeset 30916:455677a7667f

merge with stable
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 13 Feb 2017 09:44:16 -0800
parents 72f25e17af9d (current diff) f3807a135e43 (diff)
children b35e05103641
files contrib/check-code.py mercurial/commands.py mercurial/exchange.py tests/test-help.t
diffstat 37 files changed, 173 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Mon Feb 13 02:31:56 2017 -0800
+++ b/Makefile	Mon Feb 13 09:44:16 2017 -0800
@@ -141,7 +141,7 @@
         # xgettext "parse" and ignore them.
 	echo $(PYFILES) | xargs \
 	  xgettext --package-name "Mercurial" \
-	  --msgid-bugs-address "<mercurial-devel@selenic.com>" \
+	  --msgid-bugs-address "<mercurial-devel@mercurial-scm.org>" \
 	  --copyright-holder "Matt Mackall <mpm@selenic.com> and others" \
 	  --from-code ISO-8859-1 --join --sort-by-file --add-comments=i18n: \
 	  -d hg -p i18n -o hg.pot.tmp
--- a/contrib/check-code.py	Mon Feb 13 02:31:56 2017 -0800
+++ b/contrib/check-code.py	Mon Feb 13 09:44:16 2017 -0800
@@ -452,6 +452,10 @@
   [
     (r'(http|https)://[a-zA-Z0-9./]*selenic.com/',
      'use mercurial-scm.org domain URL'),
+    (r'mercurial@selenic\.com',
+     'use mercurial-scm.org domain for mercurial ML address'),
+    (r'mercurial-devel@selenic\.com',
+     'use mercurial-scm.org domain for mercurial-devel ML address'),
   ],
   # warnings
   [],
--- a/contrib/debian/changelog	Mon Feb 13 02:31:56 2017 -0800
+++ b/contrib/debian/changelog	Mon Feb 13 09:44:16 2017 -0800
@@ -2,4 +2,4 @@
 
   * Automated build performed by upstream.
 
- -- Mercurial Devel <mercurial-devel@selenic.com>  __DATE__
+ -- Mercurial Devel <mercurial-devel@mercurial-scm.org>  __DATE__
--- a/contrib/debian/control	Mon Feb 13 02:31:56 2017 -0800
+++ b/contrib/debian/control	Mon Feb 13 09:44:16 2017 -0800
@@ -1,7 +1,7 @@
 Source: mercurial
 Section: vcs
 Priority: optional
-Maintainer: Mercurial Developers <mercurial-devel@selenic.com>
+Maintainer: Mercurial Developers <mercurial-devel@mercurial-scm.org>
 Build-Depends:
  debhelper (>= 9),
  dh-python,
--- a/contrib/debian/copyright	Mon Feb 13 02:31:56 2017 -0800
+++ b/contrib/debian/copyright	Mon Feb 13 09:44:16 2017 -0800
@@ -3,7 +3,7 @@
 Source: https://www.mercurial-scm.org/
 
 Files: *
-Copyright: 2005-2015, Matt Mackall <mpm@selenic.com> and others.
+Copyright: 2005-2017, Matt Mackall <mpm@selenic.com> and others.
 License: GPL-2+
  This program is free software; you can redistribute it
  and/or modify it under the terms of the GNU General Public
--- a/contrib/win32/ReadMe.html	Mon Feb 13 02:31:56 2017 -0800
+++ b/contrib/win32/ReadMe.html	Mon Feb 13 09:44:16 2017 -0800
@@ -140,7 +140,7 @@
     </p>
 
     <p>
-      Mercurial is Copyright 2005-2016 Matt Mackall and others. See
+      Mercurial is Copyright 2005-2017 Matt Mackall and others. See
       the <tt>Contributors.txt</tt> file for a list of contributors.
     </p>
 
--- a/contrib/win32/mercurial.iss	Mon Feb 13 02:31:56 2017 -0800
+++ b/contrib/win32/mercurial.iss	Mon Feb 13 09:44:16 2017 -0800
@@ -21,7 +21,7 @@
 #endif
 
 [Setup]
-AppCopyright=Copyright 2005-2016 Matt Mackall and others
+AppCopyright=Copyright 2005-2017 Matt Mackall and others
 AppName=Mercurial
 AppVersion={#VERSION}
 #if ARCH == "x64"
@@ -41,11 +41,11 @@
 AppSupportURL=https://mercurial-scm.org/
 AppUpdatesURL=https://mercurial-scm.org/
 AppID={{4B95A5F1-EF59-4B08-BED8-C891C46121B3}
-AppContact=mercurial@selenic.com
+AppContact=mercurial@mercurial-scm.org
 DefaultDirName={pf}\Mercurial
 SourceDir=..\..
 VersionInfoDescription=Mercurial distributed SCM (version {#VERSION})
-VersionInfoCopyright=Copyright 2005-2016 Matt Mackall and others
+VersionInfoCopyright=Copyright 2005-2017 Matt Mackall and others
 VersionInfoCompany=Matt Mackall and others
 InternalCompressLevel=max
 SolidCompression=true
--- a/contrib/wix/mercurial.wxs	Mon Feb 13 02:31:56 2017 -0800
+++ b/contrib/wix/mercurial.wxs	Mon Feb 13 09:44:16 2017 -0800
@@ -43,7 +43,7 @@
     </Property>
 
     <!--Property Id='ARPCOMMENTS'>any comments</Property-->
-    <Property Id='ARPCONTACT'>mercurial@selenic.com</Property>
+    <Property Id='ARPCONTACT'>mercurial@mercurial-scm.org</Property>
     <Property Id='ARPHELPLINK'>https://mercurial-scm.org/wiki/</Property>
     <Property Id='ARPURLINFOABOUT'>https://mercurial-scm.org/about/</Property>
     <Property Id='ARPURLUPDATEINFO'>https://mercurial-scm.org/downloads/</Property>
--- a/i18n/da.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/da.po	Mon Feb 13 09:44:16 2017 -0800
@@ -16,7 +16,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2011-11-09 18:27+0100\n"
 "PO-Revision-Date: 2011-11-09 19:00+0100\n"
 "Last-Translator: <mg@lazybytes.net>\n"
--- a/i18n/de.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/de.po	Mon Feb 13 09:44:16 2017 -0800
@@ -19,7 +19,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2014-01-29 16:47+0100\n"
 "PO-Revision-Date: 2014-05-07 09:14+0200\n"
 "Last-Translator: Simon Heimberg <simohe@besonet.ch>\n"
--- a/i18n/el.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/el.po	Mon Feb 13 09:44:16 2017 -0800
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2009-10-25 12:38+0100\n"
 "PO-Revision-Date: 2009-12-02 03:23+0200\n"
 "Last-Translator: <keramida@ceid.upatras.gr>\n"
--- a/i18n/fr.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/fr.po	Mon Feb 13 09:44:16 2017 -0800
@@ -85,7 +85,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2009-10-25 12:38+0100\n"
 "PO-Revision-Date: 2009-10-25 12:43+0100\n"
 "Last-Translator: Cedric Duval <cedricduval@free.fr>\n"
--- a/i18n/it.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/it.po	Mon Feb 13 09:44:16 2017 -0800
@@ -4,7 +4,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2011-03-22 22:04+0100\n"
 "PO-Revision-Date: 2013-04-05 14:47+0100\n"
 "Last-Translator: Stefano Tortarolo <stefano.tortarolo@gmail.com>\n"
--- a/i18n/ja.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/ja.po	Mon Feb 13 09:44:16 2017 -0800
@@ -164,7 +164,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2016-12-31 13:29+0900\n"
 "PO-Revision-Date: 2016-12-31 17:09+0900\n"
 "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
--- a/i18n/pt_BR.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/pt_BR.po	Mon Feb 13 09:44:16 2017 -0800
@@ -31,7 +31,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2017-01-31 16:48-0200\n"
 "PO-Revision-Date: 2017-02-01 08:40-0200\n"
 "Last-Translator: Wagner Bruna <wbruna@softwareexpress.com.br>\n"
--- a/i18n/ro.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/ro.po	Mon Feb 13 09:44:16 2017 -0800
@@ -105,7 +105,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2011-06-08 15:03+0200\n"
 "PO-Revision-Date: 2011-06-08 17:00+0200\n"
 "Last-Translator: Daniel Dumitriu <daniel.dumitriu@gmail.com>\n"
--- a/i18n/ru.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/ru.po	Mon Feb 13 09:44:16 2017 -0800
@@ -179,7 +179,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2014-10-13 14:18+0400\n"
 "PO-Revision-Date: 2011-05-12 23:48+0400\n"
 "Last-Translator: Alexander Sauta <demosito@gmail.com>\n"
--- a/i18n/sv.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/sv.po	Mon Feb 13 09:44:16 2017 -0800
@@ -15,7 +15,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2012-07-28 14:35+0200\n"
 "PO-Revision-Date: 2012-07-28 22:58+0200\n"
 "Last-Translator: Jens Bäckman <jens.backman@gmail.com>\n"
--- a/i18n/zh_CN.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/zh_CN.po	Mon Feb 13 09:44:16 2017 -0800
@@ -46,7 +46,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial 1.3\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2009-10-19 11:47+0800\n"
 "PO-Revision-Date: 2009-03-31 20:38+0200\n"
 "Last-Translator: Dongsheng Song <dongsheng.song@gmail.com>\n"
--- a/i18n/zh_TW.po	Mon Feb 13 02:31:56 2017 -0800
+++ b/i18n/zh_TW.po	Mon Feb 13 09:44:16 2017 -0800
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@mercurial-scm.org>\n"
 "POT-Creation-Date: 2010-10-31 22:27+0100\n"
 "PO-Revision-Date: 2014-05-07 09:20+0200\n"
 "Last-Translator: Chia-Huan Wu <willie.tw@gmail.com>,leolarrel<leolarrel@gmail.com>\n"
--- a/mercurial/commands.py	Mon Feb 13 02:31:56 2017 -0800
+++ b/mercurial/commands.py	Mon Feb 13 09:44:16 2017 -0800
@@ -6583,7 +6583,7 @@
              util.version())
     license = _(
         "(see https://mercurial-scm.org for more information)\n"
-        "\nCopyright (C) 2005-2016 Matt Mackall and others\n"
+        "\nCopyright (C) 2005-2017 Matt Mackall and others\n"
         "This is free software; see the source for copying conditions. "
         "There is NO\nwarranty; "
         "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
--- a/mercurial/exchange.py	Mon Feb 13 02:31:56 2017 -0800
+++ b/mercurial/exchange.py	Mon Feb 13 09:44:16 2017 -0800
@@ -904,7 +904,9 @@
             raise error.Abort(_('missing support for %s') % exc)
         except bundle2.AbortFromPart as exc:
             pushop.ui.status(_('remote: %s\n') % exc)
-            raise error.Abort(_('push failed on remote'), hint=exc.hint)
+            if exc.hint is not None:
+                pushop.ui.status(_('remote: %s\n') % ('(%s)' % exc.hint))
+            raise error.Abort(_('push failed on remote'))
     except error.PushkeyFailed as exc:
         partid = int(exc.partid)
         if partid not in pushop.pkfailcb:
@@ -1361,6 +1363,9 @@
     bundle = pullop.remote.getbundle('pull', **kwargs)
     try:
         op = bundle2.processbundle(pullop.repo, bundle, pullop.gettransaction)
+    except bundle2.AbortFromPart as exc:
+        pullop.repo.ui.status(_('remote: abort: %s\n') % exc)
+        raise error.Abort(_('pull failed on remote'), hint=exc.hint)
     except error.BundleValueError as exc:
         raise error.Abort(_('missing support for %s') % exc)
 
--- a/mercurial/help/hg.1.txt	Mon Feb 13 02:31:56 2017 -0800
+++ b/mercurial/help/hg.1.txt	Mon Feb 13 09:44:16 2017 -0800
@@ -112,7 +112,7 @@
 
 Copying
 """""""
-Copyright (C) 2005-2016 Matt Mackall.
+Copyright (C) 2005-2017 Matt Mackall.
 Free use of this software is granted under the terms of the GNU General
 Public License version 2 or any later version.
 
--- a/mercurial/help/hgignore.5.txt	Mon Feb 13 02:31:56 2017 -0800
+++ b/mercurial/help/hgignore.5.txt	Mon Feb 13 09:44:16 2017 -0800
@@ -26,7 +26,7 @@
 Copying
 =======
 This manual page is copyright 2006 Vadim Gelfer.
-Mercurial is copyright 2005-2016 Matt Mackall.
+Mercurial is copyright 2005-2017 Matt Mackall.
 Free use of this software is granted under the terms of the GNU General
 Public License version 2 or any later version.
 
--- a/mercurial/help/hgrc.5.txt	Mon Feb 13 02:31:56 2017 -0800
+++ b/mercurial/help/hgrc.5.txt	Mon Feb 13 09:44:16 2017 -0800
@@ -34,7 +34,7 @@
 Copying
 =======
 This manual page is copyright 2005 Bryan O'Sullivan.
-Mercurial is copyright 2005-2016 Matt Mackall.
+Mercurial is copyright 2005-2017 Matt Mackall.
 Free use of this software is granted under the terms of the GNU General
 Public License version 2 or any later version.
 
--- a/mercurial/wireproto.py	Mon Feb 13 02:31:56 2017 -0800
+++ b/mercurial/wireproto.py	Mon Feb 13 09:44:16 2017 -0800
@@ -33,9 +33,10 @@
 urlerr = util.urlerr
 urlreq = util.urlreq
 
-bundle2required = _(
-    'incompatible Mercurial client; bundle2 required\n'
-    '(see https://www.mercurial-scm.org/wiki/IncompatibleClient)\n')
+bundle2requiredmain = _('incompatible Mercurial client; bundle2 required')
+bundle2requiredhint = _('see https://www.mercurial-scm.org/wiki/'
+                        'IncompatibleClient')
+bundle2required = '%s\n(%s)\n' % (bundle2requiredmain, bundle2requiredhint)
 
 class abstractserverproto(object):
     """abstract class that summarizes the protocol API
@@ -833,9 +834,29 @@
 
     if not bundle1allowed(repo, 'pull'):
         if not exchange.bundle2requested(opts.get('bundlecaps')):
-            return ooberror(bundle2required)
+            if proto.name == 'http':
+                return ooberror(bundle2required)
+            raise error.Abort(bundle2requiredmain,
+                              hint=bundle2requiredhint)
 
-    chunks = exchange.getbundlechunks(repo, 'serve', **opts)
+    #chunks = exchange.getbundlechunks(repo, 'serve', **opts)
+    try:
+        chunks = exchange.getbundlechunks(repo, 'serve', **opts)
+    except error.Abort as exc:
+        # cleanly forward Abort error to the client
+        if not exchange.bundle2requested(opts.get('bundlecaps')):
+            if proto.name == 'http':
+                return ooberror(str(exc) + '\n')
+            raise # cannot do better for bundle1 + ssh
+        # bundle2 request expect a bundle2 reply
+        bundler = bundle2.bundle20(repo.ui)
+        manargs = [('message', str(exc))]
+        advargs = []
+        if exc.hint is not None:
+            advargs.append(('hint', exc.hint))
+        bundler.addpart(bundle2.bundlepart('error:abort',
+                                           manargs, advargs))
+        return streamres(gen=bundler.getchunks(), v1compressible=True)
     return streamres(gen=chunks, v1compressible=True)
 
 @wireprotocommand('heads')
@@ -948,7 +969,14 @@
             gen = exchange.readbundle(repo.ui, fp, None)
             if (isinstance(gen, changegroupmod.cg1unpacker)
                 and not bundle1allowed(repo, 'push')):
-                return ooberror(bundle2required)
+                if proto.name == 'http':
+                    # need to special case http because stderr do not get to
+                    # the http client on failed push so we need to abuse some
+                    # other error type to make sure the message get to the
+                    # user.
+                    return ooberror(bundle2required)
+                raise error.Abort(bundle2requiredmain,
+                                  hint=bundle2requiredhint)
 
             r = exchange.unbundle(repo, gen, their_heads, 'serve',
                                   proto._client())
@@ -973,6 +1001,8 @@
                 # This need to be moved to something proper.
                 # Feel free to do it.
                 util.stderr.write("abort: %s\n" % exc)
+                if exc.hint is not None:
+                    util.stderr.write("(%s)\n" % exc.hint)
                 return pushres(0)
             except error.PushRaced:
                 return pusherr(str(exc))
--- a/setup.py	Mon Feb 13 02:31:56 2017 -0800
+++ b/setup.py	Mon Feb 13 09:44:16 2017 -0800
@@ -664,7 +664,7 @@
 if py2exeloaded:
     extra['console'] = [
         {'script':'hg',
-         'copyright':'Copyright (C) 2005-2016 Matt Mackall and others',
+         'copyright':'Copyright (C) 2005-2017 Matt Mackall and others',
          'product_version':version}]
     # sub command of 'build' because 'py2exe' does not handle sub_commands
     build.sub_commands.insert(0, ('build_hgextindex', None))
@@ -712,7 +712,7 @@
 setup(name='mercurial',
       version=setupversion,
       author='Matt Mackall and many others',
-      author_email='mercurial@selenic.com',
+      author_email='mercurial@mercurial-scm.org',
       url='https://mercurial-scm.org/',
       download_url='https://mercurial-scm.org/release/',
       description=('Fast scalable distributed SCM (revision control, version '
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/crashgetbundler.py	Mon Feb 13 09:44:16 2017 -0800
@@ -0,0 +1,14 @@
+from __future__ import absolute_import
+
+from mercurial.i18n import _
+from mercurial import (
+        changegroup,
+        error,
+        extensions
+    )
+
+def abort(orig, *args, **kwargs):
+    raise error.Abort(_('this is an exercise'))
+
+def uisetup(ui):
+    extensions.wrapfunction(changegroup, 'getbundler', abort)
--- a/tests/test-bundle2-exchange.t	Mon Feb 13 02:31:56 2017 -0800
+++ b/tests/test-bundle2-exchange.t	Mon Feb 13 09:44:16 2017 -0800
@@ -518,16 +518,16 @@
   pushing to ssh://user@dummy/other
   searching for changes
   remote: Abandon ship!
+  remote: (don't panic)
   abort: push failed on remote
-  (don't panic)
   [255]
 
   $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
   pushing to http://localhost:$HGPORT2/
   searching for changes
   remote: Abandon ship!
+  remote: (don't panic)
   abort: push failed on remote
-  (don't panic)
   [255]
 
 
@@ -1024,11 +1024,12 @@
 
 Verify the global server.bundle1 option works
 
-  $ cat > .hg/hgrc << EOF
+  $ cd ..
+  $ cat > bundle2onlyserver/.hg/hgrc << EOF
   > [server]
   > bundle1 = false
   > EOF
-  $ hg serve -p $HGPORT -d --pid-file=hg.pid
+  $ hg -R bundle2onlyserver serve -p $HGPORT -d --pid-file=hg.pid
   $ cat hg.pid >> $DAEMON_PIDS
   $ hg --config devel.legacy.exchange=bundle1 clone http://localhost:$HGPORT not-bundle2
   requesting all changes
@@ -1038,11 +1039,21 @@
   [255]
   $ killdaemons.py
 
-  $ cat > .hg/hgrc << EOF
+  $ hg --config devel.legacy.exchange=bundle1 clone ssh://user@dummy/bundle2onlyserver not-bundle2-ssh
+  requesting all changes
+  adding changesets
+  remote: abort: incompatible Mercurial client; bundle2 required
+  remote: (see https://www.mercurial-scm.org/wiki/IncompatibleClient)
+  transaction abort!
+  rollback completed
+  abort: stream ended unexpectedly (got 0 bytes, expected 4)
+  [255]
+
+  $ cat > bundle2onlyserver/.hg/hgrc << EOF
   > [server]
   > bundle1gd = false
   > EOF
-  $ hg serve -p $HGPORT -d --pid-file=hg.pid
+  $ hg -R bundle2onlyserver serve -p $HGPORT -d --pid-file=hg.pid
   $ cat hg.pid >> $DAEMON_PIDS
 
   $ hg --config devel.legacy.exchange=bundle1 clone http://localhost:$HGPORT/ not-bundle2
@@ -1054,7 +1065,7 @@
 
   $ killdaemons.py
 
-  $ cd ../notgdserver
+  $ cd notgdserver
   $ cat > .hg/hgrc << EOF
   > [server]
   > bundle1gd = false
@@ -1107,6 +1118,15 @@
   (see https://www.mercurial-scm.org/wiki/IncompatibleClient)
   [255]
 
+(also check with ssh)
+
+  $ hg --config devel.legacy.exchange=bundle1 push ssh://user@dummy/bundle2onlyserver
+  pushing to ssh://user@dummy/bundle2onlyserver
+  searching for changes
+  remote: abort: incompatible Mercurial client; bundle2 required
+  remote: (see https://www.mercurial-scm.org/wiki/IncompatibleClient)
+  [1]
+
   $ hg push
   pushing to http://localhost:$HGPORT/
   searching for changes
--- a/tests/test-convert-baz.t	Mon Feb 13 02:31:56 2017 -0800
+++ b/tests/test-convert-baz.t	Mon Feb 13 09:44:16 2017 -0800
@@ -1,6 +1,6 @@
 #require baz symlink
 
-  $ baz my-id "mercurial <mercurial@selenic.com>"
+  $ baz my-id "mercurial <mercurial@mercurial-scm.org>"
 
   $ echo "[extensions]" >> $HGRCPATH
   $ echo "convert=" >> $HGRCPATH
--- a/tests/test-convert-tla.t	Mon Feb 13 02:31:56 2017 -0800
+++ b/tests/test-convert-tla.t	Mon Feb 13 09:44:16 2017 -0800
@@ -1,6 +1,6 @@
 #require tla symlink
 
-  $ tla my-id "mercurial <mercurial@selenic.com>"
+  $ tla my-id "mercurial <mercurial@mercurial-scm.org>"
   $ echo "[extensions]" >> $HGRCPATH
   $ echo "convert=" >> $HGRCPATH
 
--- a/tests/test-help.t	Mon Feb 13 02:31:56 2017 -0800
+++ b/tests/test-help.t	Mon Feb 13 09:44:16 2017 -0800
@@ -445,7 +445,7 @@
   Mercurial Distributed SCM (version *) (glob)
   (see https://mercurial-scm.org for more information)
   
-  Copyright (C) 2005-2016 Matt Mackall and others
+  Copyright (C) 2005-* Matt Mackall and others (glob)
   This is free software; see the source for copying conditions. There is NO
   warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
--- a/tests/test-hgrc.t	Mon Feb 13 02:31:56 2017 -0800
+++ b/tests/test-hgrc.t	Mon Feb 13 09:44:16 2017 -0800
@@ -71,7 +71,7 @@
   Mercurial Distributed SCM (version *) (glob)
   (see https://mercurial-scm.org for more information)
   
-  Copyright (C) 2005-2016 Matt Mackall and others
+  Copyright (C) 2005-* Matt Mackall and others (glob)
   This is free software; see the source for copying conditions. There is NO
   warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   $ unset FAKEPATH
--- a/tests/test-http-bundle1.t	Mon Feb 13 02:31:56 2017 -0800
+++ b/tests/test-http-bundle1.t	Mon Feb 13 09:44:16 2017 -0800
@@ -333,3 +333,15 @@
 check error log
 
   $ cat error.log
+
+Check error reporting while pulling/cloning
+
+  $ $RUNTESTDIR/killdaemons.py
+  $ hg -R test serve -p $HGPORT -d --pid-file=hg3.pid -E error.log --config extensions.crash=${TESTDIR}/crashgetbundler.py
+  $ cat hg3.pid >> $DAEMON_PIDS
+  $ hg clone http://localhost:$HGPORT/ abort-clone
+  requesting all changes
+  abort: remote error:
+  this is an exercise
+  [255]
+  $ cat error.log
--- a/tests/test-http.t	Mon Feb 13 02:31:56 2017 -0800
+++ b/tests/test-http.t	Mon Feb 13 09:44:16 2017 -0800
@@ -321,3 +321,15 @@
 check error log
 
   $ cat error.log
+
+check abort error reporting while pulling/cloning
+
+  $ $RUNTESTDIR/killdaemons.py
+  $ hg -R test serve -p $HGPORT -d --pid-file=hg3.pid -E error.log --config extensions.crash=${TESTDIR}/crashgetbundler.py
+  $ cat hg3.pid >> $DAEMON_PIDS
+  $ hg clone http://localhost:$HGPORT/ abort-clone
+  requesting all changes
+  remote: abort: this is an exercise
+  abort: pull failed on remote
+  [255]
+  $ cat error.log
--- a/tests/test-ssh-bundle1.t	Mon Feb 13 02:31:56 2017 -0800
+++ b/tests/test-ssh-bundle1.t	Mon Feb 13 09:44:16 2017 -0800
@@ -543,3 +543,20 @@
   remote: abort: pretxnchangegroup.fail hook failed
   [1]
 
+abort during pull is properly reported as such
+
+  $ echo morefoo >> ../remote/foo
+  $ hg -R ../remote commit --message "more foo to be pulled"
+  $ cat >> ../remote/.hg/hgrc << EOF
+  > [extensions]
+  > crash = ${TESTDIR}/crashgetbundler.py
+  > EOF
+  $ hg --config ui.ssh="python $TESTDIR/dummyssh" pull
+  pulling from ssh://user@dummy/remote
+  searching for changes
+  adding changesets
+  remote: abort: this is an exercise
+  transaction abort!
+  rollback completed
+  abort: stream ended unexpectedly (got 0 bytes, expected 4)
+  [255]
--- a/tests/test-ssh.t	Mon Feb 13 02:31:56 2017 -0800
+++ b/tests/test-ssh.t	Mon Feb 13 09:44:16 2017 -0800
@@ -548,3 +548,17 @@
   abort: push failed on remote
   [255]
 
+abort during pull is properly reported as such
+
+  $ echo morefoo >> ../remote/foo
+  $ hg -R ../remote commit --message "more foo to be pulled"
+  $ cat >> ../remote/.hg/hgrc << EOF
+  > [extensions]
+  > crash = ${TESTDIR}/crashgetbundler.py
+  > EOF
+  $ hg --config ui.ssh="python $TESTDIR/dummyssh" pull
+  pulling from ssh://user@dummy/remote
+  searching for changes
+  remote: abort: this is an exercise
+  abort: pull failed on remote
+  [255]