diff mercurial/bundle2.py @ 29937:2c302c654451

merge with stable
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Wed, 14 Sep 2016 17:12:39 +0200
parents e584c6235500 ccd436f7db6d
children 0f6d6fdd3c2a
line wrap: on
line diff
--- a/mercurial/bundle2.py	Tue Sep 13 13:49:42 2016 -0700
+++ b/mercurial/bundle2.py	Wed Sep 14 17:12:39 2016 +0200
@@ -353,7 +353,7 @@
     try:
         for nbpart, part in iterparts:
             _processpart(op, part)
-    except BaseException as exc:
+    except Exception as exc:
         for nbpart, part in iterparts:
             # consume the bundle content
             part.seek(0, 2)
@@ -382,6 +382,7 @@
     The part is guaranteed to have been fully consumed when the function exits
     (even if an exception is raised)."""
     status = 'unknown' # used by debug output
+    hardabort = False
     try:
         try:
             handler = parthandlermapping.get(part.type)
@@ -436,9 +437,15 @@
                 outpart = op.reply.newpart('output', data=output,
                                            mandatory=False)
                 outpart.addparam('in-reply-to', str(part.id), mandatory=False)
+    # If exiting or interrupted, do not attempt to seek the stream in the
+    # finally block below. This makes abort faster.
+    except (SystemExit, KeyboardInterrupt):
+        hardabort = True
+        raise
     finally:
         # consume the part content to not corrupt the stream.
-        part.seek(0, 2)
+        if not hardabort:
+            part.seek(0, 2)
 
 
 def decodecaps(blob):
@@ -1467,7 +1474,7 @@
 def handleoutput(op, inpart):
     """forward output captured on the server to the client"""
     for line in inpart.read().splitlines():
-        op.ui.status(('remote: %s\n' % line))
+        op.ui.status(_('remote: %s\n') % line)
 
 @parthandler('replycaps')
 def handlereplycaps(op, inpart):