X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fbup%2Fdrecurse.py;h=24a0db941538e68b95d2db061d16b6b0d2b30073;hb=c40b3dd5fd74e72024fbaad3daf5a958aefa1c54;hp=90b7f26de4bf6316230c68ed49304a5d73e8c927;hpb=dd2bf330103347208f63198c7e8a1490bddc0c6e;p=bup.git diff --git a/lib/bup/drecurse.py b/lib/bup/drecurse.py index 90b7f26..24a0db9 100644 --- a/lib/bup/drecurse.py +++ b/lib/bup/drecurse.py @@ -1,7 +1,11 @@ + +from __future__ import absolute_import import stat, os -from bup.helpers import * + +from bup.helpers import add_error, should_rx_exclude_path, debug1, resolve_parent import bup.xstat as xstat + try: O_LARGEFILE = os.O_LARGEFILE except AttributeError: @@ -51,7 +55,8 @@ def _dirlist(): def _recursive_dirlist(prepend, xdev, bup_dir=None, excluded_paths=None, - exclude_rxs=None): + exclude_rxs=None, + xdev_exceptions=frozenset()): for (name,pst) in _dirlist(): path = prepend + name if excluded_paths: @@ -65,7 +70,8 @@ def _recursive_dirlist(prepend, xdev, bup_dir=None, if os.path.normpath(path) == bup_dir: debug1('Skipping BUP_DIR.\n') continue - if xdev != None and pst.st_dev != xdev: + if xdev != None and pst.st_dev != xdev \ + and path not in xdev_exceptions: debug1('Skipping contents of %r: different filesystem.\n' % path) else: try: @@ -76,14 +82,17 @@ def _recursive_dirlist(prepend, xdev, bup_dir=None, for i in _recursive_dirlist(prepend=prepend+name, xdev=xdev, bup_dir=bup_dir, excluded_paths=excluded_paths, - exclude_rxs=exclude_rxs): + exclude_rxs=exclude_rxs, + xdev_exceptions=xdev_exceptions): yield i os.chdir('..') yield (path, pst) -def recursive_dirlist(paths, xdev, bup_dir=None, excluded_paths=None, - exclude_rxs=None): +def recursive_dirlist(paths, xdev, bup_dir=None, + excluded_paths=None, + exclude_rxs=None, + xdev_exceptions=frozenset()): startdir = OsFile('.') try: assert(type(paths) != type('')) @@ -112,7 +121,8 @@ def recursive_dirlist(paths, xdev, bup_dir=None, excluded_paths=None, for i in _recursive_dirlist(prepend=prepend, xdev=xdev, bup_dir=bup_dir, excluded_paths=excluded_paths, - exclude_rxs=exclude_rxs): + exclude_rxs=exclude_rxs, + xdev_exceptions=xdev_exceptions): yield i startdir.fchdir() else: