import stat, os
from bup.helpers import *
+import bup.xstat as xstat
try:
O_LARGEFILE = os.O_LARGEFILE
os.fchdir(self.fd)
def stat(self):
- return os.fstat(self.fd)
+ return xstat.fstat(self.fd)
_IFMT = stat.S_IFMT(0xffffffff) # avoid function call in inner loop
l = []
for n in os.listdir('.'):
try:
- st = os.lstat(n)
+ st = xstat.lstat(n)
except OSError, e:
add_error(Exception('%s: %s' % (realpath(n), str(e))))
continue
return l
-def _recursive_dirlist(prepend, xdev, bup_dir=None, excluded_paths=None):
+def _recursive_dirlist(prepend, xdev, bup_dir=None,
+ excluded_paths=None,
+ exclude_rxs=None):
for (name,pst) in _dirlist():
+ path = prepend + name
+ if excluded_paths:
+ if os.path.normpath(path) in excluded_paths:
+ debug1('Skipping %r: excluded.\n' % path)
+ continue
+ if exclude_rxs and should_rx_exclude_path(path, exclude_rxs):
+ continue
if name.endswith('/'):
if xdev != None and pst.st_dev != xdev:
- log('Skipping %r: different filesystem.\n' % (prepend+name))
+ debug1('Skipping %r: different filesystem.\n' % (prepend+name))
continue
if bup_dir != None:
if os.path.normpath(prepend+name) == bup_dir:
- log('Skipping BUP_DIR.\n')
- continue
- if excluded_paths:
- if os.path.normpath(prepend+name) in excluded_paths:
- log('Skipping %r: excluded.\n' % (prepend+name))
+ debug1('Skipping BUP_DIR.\n')
continue
try:
OsFile(name).fchdir()
else:
for i in _recursive_dirlist(prepend=prepend+name, xdev=xdev,
bup_dir=bup_dir,
- excluded_paths=excluded_paths):
+ excluded_paths=excluded_paths,
+ exclude_rxs=exclude_rxs):
yield i
os.chdir('..')
yield (prepend + name, pst)
-def recursive_dirlist(paths, xdev, bup_dir=None, excluded_paths=None):
+def recursive_dirlist(paths, xdev, bup_dir=None, excluded_paths=None,
+ exclude_rxs=None):
startdir = OsFile('.')
try:
assert(type(paths) != type(''))
for path in paths:
try:
- pst = os.lstat(path)
+ pst = xstat.lstat(path)
if stat.S_ISLNK(pst.st_mode):
yield (path, pst)
continue
prepend = os.path.join(path, '')
for i in _recursive_dirlist(prepend=prepend, xdev=xdev,
bup_dir=bup_dir,
- excluded_paths=excluded_paths):
+ excluded_paths=excluded_paths,
+ exclude_rxs=exclude_rxs):
yield i
startdir.fchdir()
else:
except:
pass
raise
-
-def parse_excludes(flags):
- excluded_paths = []
-
- for flag in flags:
- (option, parameter) = flag
- if option == '--exclude':
- excluded_paths.append(realpath(parameter))
-
- if option == '--exclude-from':
- try:
- try:
- f = open(realpath(parameter))
- for exclude_path in f.readlines():
- excluded_paths.append(realpath(exclude_path.strip()))
- except Error, e:
- log("warning: couldn't read %s" % parameter)
- finally:
- f.close()
-
- return excluded_paths
-