raise
-def update_index(top, excluded_paths):
+def update_index(top, excluded_paths, exclude_rxs):
# tmax and start must be epoch nanoseconds.
tmax = (time.time() - 1) * 10**9
ri = index.Reader(indexfile)
hlinks.del_path(rig.cur.name)
rig.next()
if rig.cur and rig.cur.name == path: # paths that already existed
+ try:
+ meta = metadata.from_path(path, statinfo=pst)
+ except (OSError, IOError), e:
+ add_error(e)
+ rig.next()
+ continue
if not stat.S_ISDIR(rig.cur.mode) and rig.cur.nlink > 1:
hlinks.del_path(rig.cur.name)
if not stat.S_ISDIR(pst.st_mode) and pst.st_nlink > 1:
hlinks.add_path(path, pst.st_dev, pst.st_ino)
- meta = metadata.from_path(path, statinfo=pst)
# Clear these so they don't bloat the store -- they're
# already in the index (since they vary a lot and they're
# fixed length). If you've noticed "tmax", you might
rig.cur.repack()
rig.next()
else: # new paths
- meta = metadata.from_path(path, statinfo=pst)
+ try:
+ meta = metadata.from_path(path, statinfo=pst)
+ except (OSError, IOError), e:
+ add_error(e)
+ continue
# See same assignment to 0, above, for rationale.
meta.atime = meta.mtime = meta.ctime = 0
meta_ofs = msw.store(meta)
s,status print each filename with a status char (A/M/D) (implies -p)
u,update recursively update the index entries for the given file/dir names (default if no mode is specified)
check carefully check index file integrity
-clear clear the index
+clear clear the default index
Options:
H,hash print the hash for each object next to its name
l,long print more information about each file
fake-valid mark all index entries as up-to-date even if they aren't
fake-invalid mark all index entries as invalid
f,indexfile= the name of the index file (normally BUP_DIR/bupindex)
-exclude= a path to exclude from the backup (can be used more than once)
-exclude-from= a file that contains exclude paths (can be used more than once)
-exclude-rx= skip paths that match the unanchored regular expression
+exclude= a path to exclude from the backup (may be repeated)
+exclude-from= skip --exclude paths in file (may be repeated)
+exclude-rx= skip paths matching the unanchored regex (may be repeated)
+exclude-rx-from= skip --exclude-rx patterns in file (may be repeated)
v,verbose increase log output (can be used more than once)
x,xdev,one-file-system don't cross filesystem boundaries
"""
o.fatal('--fake-{in,}valid are meaningless without -u')
if opt.fake_valid and opt.fake_invalid:
o.fatal('--fake-valid is incompatible with --fake-invalid')
+if opt.clear and opt.indexfile:
+ o.fatal('cannot clear an external index (via -f)')
# FIXME: remove this once we account for timestamp races, i.e. index;
# touch new-file; index. It's possible for this to happen quickly
if not extra:
o.fatal('update mode (-u) requested but no paths given')
for (rp,path) in paths:
- update_index(rp, excluded_paths)
+ update_index(rp, excluded_paths, exclude_rxs)
if opt['print'] or opt.status or opt.modified:
for (name, ent) in index.Reader(indexfile).filter(extra or ['']):