]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/drecurse.py
Use absolute_import from the __future__ everywhere
[bup.git] / lib / bup / drecurse.py
index 90b7f26de4bf6316230c68ed49304a5d73e8c927..24a0db941538e68b95d2db061d16b6b0d2b30073 100644 (file)
@@ -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: