[PATCH 13/23] MetaStoreReader.__del__: replace with context management

0 views
Skip to first unread message

Rob Browning

unread,
Nov 13, 2021, 12:59:32 PM11/13/21
to bup-...@googlegroups.com, Bas Stottelaar
Signed-off-by: Rob Browning <r...@defaultvalue.org>
Tested-by: Rob Browning <r...@defaultvalue.org>
---
lib/bup/cmd/save.py | 25 ++++++++++++-------------
lib/bup/index.py | 10 +++++++---
2 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/lib/bup/cmd/save.py b/lib/bup/cmd/save.py
index f053b8a4..3c889e2b 100755
--- a/lib/bup/cmd/save.py
+++ b/lib/bup/cmd/save.py
@@ -109,7 +109,7 @@ def opts_from_cmdline(argv):

return opt

-def save_tree(opt, indexfile, hlink_db, w):
+def save_tree(opt, indexfile, hlink_db, msr, w):
# Metadata is stored in a file named .bupm in each directory. The
# first metadata entry will be the metadata for the current directory.
# The remaining entries will be for each of the other directory
@@ -225,16 +225,6 @@ def save_tree(opt, indexfile, hlink_db, w):
remainstr, kpsstr))


- r = index.Reader(indexfile)
- try:
- msr = index.MetaStoreReader(indexfile + b'.meta')
- except IOError as ex:
- if ex.errno != EACCES:
- raise
- log('error: cannot access %r; have you run bup index?'
- % path_msg(indexfile))
- sys.exit(1)
-
def already_saved(ent):
return ent.is_valid() and w.exists(ent.sha) and ent.sha

@@ -251,6 +241,7 @@ def save_tree(opt, indexfile, hlink_db, w):
return link_paths[0]
return None

+ r = index.Reader(indexfile)
total = ftotal = 0
if opt.progress:
for transname, ent in r.filter(opt.sources,
@@ -520,8 +511,16 @@ def main(argv):
refname = parent = None

indexfile = opt.indexfile or git.repo(b'bupindex')
- with hlinkdb.HLinkDB(indexfile + b'.hlink') as hlink_db:
- tree = save_tree(opt, indexfile, hlink_db, w)
+ try:
+ msr = index.MetaStoreReader(indexfile + b'.meta')
+ except IOError as ex:
+ if ex.errno != EACCES:
+ raise
+ log('error: cannot access %r; have you run bup index?'
+ % path_msg(indexfile))
+ sys.exit(1)
+ with msr, hlinkdb.HLinkDB(indexfile + b'.hlink') as hlink_db:
+ tree = save_tree(opt, indexfile, hlink_db, msr, w)
if opt.tree:
out.write(hexlify(tree))
out.write(b'\n')
diff --git a/lib/bup/index.py b/lib/bup/index.py
index 8eae5357..dd24d937 100644
--- a/lib/bup/index.py
+++ b/lib/bup/index.py
@@ -4,7 +4,7 @@ import errno, os, stat, struct, tempfile

from bup import metadata, xstat
from bup._helpers import UINT_MAX, bytescmp
-from bup.compat import range
+from bup.compat import pending_raise, range
from bup.helpers import (add_error, log, merge_iter, mmap_readwrite,
progress, qprogress, resolve_parent, slashappend)

@@ -58,8 +58,12 @@ class MetaStoreReader:
self._file.close()
self._file = None

- def __del__(self):
- self.close()
+ def __enter__(self):
+ return self
+
+ def __exit__(self, type, value, traceback):
+ with pending_raise(value, rethrow=True):
+ self.close()

def metadata_at(self, ofs):
self._file.seek(ofs)
--
2.30.2

Reply all
Reply to author
Forward
0 new messages