]> arthur.barton.de Git - bup.git/commitdiff
Add any pending exception to context in all __exit__ methods
authorRob Browning <rlb@defaultvalue.org>
Sun, 3 Oct 2021 17:47:17 +0000 (12:47 -0500)
committerRob Browning <rlb@defaultvalue.org>
Mon, 22 Nov 2021 06:33:50 +0000 (00:33 -0600)
Use pending_raise() in all __exit__ methods to make sure that any
pending exception is included in the context if the body throws.

Signed-off-by: Rob Browning <rlb@defaultvalue.org>
Tested-by: Rob Browning <rlb@defaultvalue.org>
lib/bup/git.py
lib/bup/midx.py
lib/bup/repo.py
lib/bup/vfs.py

index fe297cd2e34edc4cd15734229c5bf006b5532ed1..90618c415b39c980349204f1a0ee73f8904a0e76 100644 (file)
@@ -15,6 +15,7 @@ from bup.compat import (buffer,
                         byte_int, bytes_from_byte, bytes_from_uint,
                         environ,
                         items,
+                        pending_raise,
                         range,
                         reraise)
 from bup.io import path_msg
@@ -425,7 +426,8 @@ class PackIdxV1(PackIdx):
         return self
 
     def __exit__(self, type, value, traceback):
-        self.close()
+        with pending_raise(value, rethrow=False):
+            self.close()
 
     def __len__(self):
         return int(self.nsha)  # int() from long for python 2
@@ -475,7 +477,8 @@ class PackIdxV2(PackIdx):
         return self
 
     def __exit__(self, type, value, traceback):
-        self.close()
+        with pending_raise(value, rethrow=False):
+            self.close()
 
     def __len__(self):
         return int(self.nsha)  # int() from long for python 2
@@ -753,7 +756,8 @@ class PackWriter:
         return self
 
     def __exit__(self, type, value, traceback):
-        self.close()
+        with pending_raise(value, rethrow=False):
+            self.close()
 
     def _open(self):
         if not self.file:
index 2952a432333bf4769e04b11374ba9be58bf3cfb9..239532ea21e2ec0ae54b3be7c8139fd9a570ea2f 100644 (file)
@@ -3,7 +3,7 @@ from __future__ import absolute_import, print_function
 import glob, os, struct
 
 from bup import _helpers
-from bup.compat import range
+from bup.compat import pending_raise, range
 from bup.helpers import log, mmap_read
 from bup.io import path_msg
 
@@ -65,7 +65,8 @@ class PackMidx:
         return self
 
     def __exit__(self, type, value, traceback):
-        self.close()
+        with pending_raise(value, rethrow=False):
+            self.close()
 
     def _init_failed(self):
         self.bits = 0
index dd6ef3f90674537ee2813a12d1530bf94e4c32ac..d52aa0bdc3734d32ab31ff00d3ba307759e6d2fb 100644 (file)
@@ -4,7 +4,7 @@ from os.path import realpath
 from functools import partial
 
 from bup import client, git, vfs
-
+from bup.compat import pending_raise
 
 _next_repo_id = 0
 _repo_ids = {}
@@ -36,7 +36,8 @@ class LocalRepo:
         return self
 
     def __exit__(self, type, value, traceback):
-        self.close()
+        with pending_raise(value, rethrow=False):
+            self.close()
 
     def id(self):
         """Return an identifier that differs from any other repository that
@@ -106,7 +107,8 @@ class RemoteRepo:
         return self
 
     def __exit__(self, type, value, traceback):
-        self.close()
+        with pending_raise(value, rethrow=False):
+            self.close()
 
     def id(self):
         """Return an identifier that differs from any other repository that
index 09267f4c3e634fa1cf511cdb80cb2c8b6112adb1..f5badf6982fd1f4ed87ceee32bf28dbc6a462af1 100644 (file)
@@ -57,7 +57,7 @@ from time import localtime, strftime
 import re, sys
 
 from bup import git, vint
-from bup.compat import hexstr, range, str_type
+from bup.compat import hexstr, pending_raise, range, str_type
 from bup.git import BUP_CHUNKED, parse_commit, tree_decode
 from bup.helpers import debug2, last
 from bup.io import path_msg
@@ -236,8 +236,8 @@ class _FileReader(object):
     def __enter__(self):
         return self
     def __exit__(self, type, value, traceback):
-        self.close()
-        return False
+        with pending_raise(value, rethrow=False):
+            self.close()
 
 _multiple_slashes_rx = re.compile(br'//+')