# HG changeset patch # User Durham Goode # Date 2017-10-11 17:36:59 # Node ID 5f79f5f8487a54668094eaead5dda82bfe1db110 # Parent 31c6c4d27be7af21c08018a5a97148c146ac71e2 bundle2: immediate exit for ctrl+c (issue5692) 21c2df59a regressed bundle2 by catching all exceptions and trying to handle them. The old behavior was to allow KeyboardInterrupts to throw and not have graceful cleanup, which allowed it to exit immediately. Let's go back to that behavior. Differential Revision: https://phab.mercurial-scm.org/D960 diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py --- a/mercurial/bundle2.py +++ b/mercurial/bundle2.py @@ -370,14 +370,10 @@ class partiterator(object): if not self.iterator: return - if exc: - # If exiting or interrupted, do not attempt to seek the stream in - # the finally block below. This makes abort faster. - if (self.current and - not isinstance(exc, (SystemExit, KeyboardInterrupt))): - # consume the part content to not corrupt the stream. - self.current.seek(0, 2) - + # Only gracefully abort in a normal exception situation. User aborts + # like Ctrl+C throw a KeyboardInterrupt which is not a base Exception, + # and should not gracefully cleanup. + if isinstance(exc, Exception): # Any exceptions seeking to the end of the bundle at this point are # almost certainly related to the underlying stream being bad. # And, chances are that the exception we're handling is related to @@ -385,6 +381,10 @@ class partiterator(object): # re-raise the original error. seekerror = False try: + if self.current: + # consume the part content to not corrupt the stream. + self.current.seek(0, 2) + for part in self.iterator: # consume the bundle content part.seek(0, 2)