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
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
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()
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)
# 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
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')