X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fbup%2Fcmd%2Fsave.py;h=88f74d77b9216bac94acdca2bc3a4360c97b6969;hb=847bace2085bbba833849301439fcca24d0e4946;hp=3c889e2b3b0200897bc5773ffb8bb3fe3afcf9f1;hpb=994c2230ac13d31ef581320969bf0faefb105033;p=bup.git diff --git a/lib/bup/cmd/save.py b/lib/bup/cmd/save.py old mode 100755 new mode 100644 index 3c889e2..88f74d7 --- a/lib/bup/cmd/save.py +++ b/lib/bup/cmd/save.py @@ -1,7 +1,7 @@ from __future__ import absolute_import, print_function from binascii import hexlify -from errno import EACCES +from errno import ENOENT from io import BytesIO import math, os, stat, sys, time @@ -109,7 +109,7 @@ def opts_from_cmdline(argv): return opt -def save_tree(opt, indexfile, hlink_db, msr, w): +def save_tree(opt, reader, 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 @@ -241,11 +241,10 @@ def save_tree(opt, indexfile, hlink_db, msr, 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, - wantrecurse=wantrecurse_pre): + for transname, ent in reader.filter(opt.sources, + wantrecurse=wantrecurse_pre): if not (ftotal % 10024): qprogress('Reading index: %d\r' % ftotal) exists = ent.exists() @@ -275,7 +274,8 @@ def save_tree(opt, indexfile, hlink_db, msr, w): fcount = 0 lastskip_name = None lastdir = b'' - for transname, ent in r.filter(opt.sources, wantrecurse=wantrecurse_during): + for transname, ent in reader.filter(opt.sources, + wantrecurse=wantrecurse_during): (dir, file) = os.path.split(ent.name) exists = (ent.flags & index.IX_EXISTS) hashvalid = already_saved(ent) @@ -459,7 +459,6 @@ def save_tree(opt, indexfile, hlink_db, msr, w): # When there's a collision, use empty metadata for the root. tree = _pop(dir_metadata = metadata.Metadata() if root_collision else None) - msr.close() return tree @@ -514,13 +513,15 @@ def main(argv): try: msr = index.MetaStoreReader(indexfile + b'.meta') except IOError as ex: - if ex.errno != EACCES: + if ex.errno != ENOENT: 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) + with msr, \ + hlinkdb.HLinkDB(indexfile + b'.hlink') as hlink_db, \ + index.Reader(indexfile) as reader: + tree = save_tree(opt, reader, hlink_db, msr, w) if opt.tree: out.write(hexlify(tree)) out.write(b'\n')