summaryrefslogtreecommitdiff
path: root/rdiff-backup/rdiff_backup/selection.py
diff options
context:
space:
mode:
Diffstat (limited to 'rdiff-backup/rdiff_backup/selection.py')
-rw-r--r--rdiff-backup/rdiff_backup/selection.py40
1 files changed, 29 insertions, 11 deletions
diff --git a/rdiff-backup/rdiff_backup/selection.py b/rdiff-backup/rdiff_backup/selection.py
index 70203f4..4ca6863 100644
--- a/rdiff-backup/rdiff_backup/selection.py
+++ b/rdiff-backup/rdiff_backup/selection.py
@@ -26,9 +26,8 @@ documentation on what this code does can be found on the man page.
from __future__ import generators
import re
-from log import *
-from robust import *
-import FilenameMapping
+from log import Log
+import FilenameMapping, robust, rpath, Globals
class SelectError(Exception):
@@ -81,7 +80,7 @@ class Select:
# This re should not match normal filenames, but usually just globs
glob_re = re.compile("(.*[*?[]|ignorecase\\:)", re.I | re.S)
- def __init__(self, rpath, quoted_filenames = None):
+ def __init__(self, rootrp, quoted_filenames = None):
"""Select initializer. rpath is the root directory
When files have quoted characters in them, quoted_filenames
@@ -89,9 +88,9 @@ class Select:
version.
"""
- assert isinstance(rpath, RPath)
+ assert isinstance(rootrp, rpath.RPath)
self.selection_functions = []
- self.rpath = rpath
+ self.rpath = rootrp
self.prefix = self.rpath.path
self.quoting_on = Globals.quoting_enabled and quoted_filenames
@@ -141,8 +140,8 @@ class Select:
and should be included iff something inside is included.
"""
- for filename in Robust.listrp(rpath):
- new_rpath = Robust.check_common_error(error_handler,
+ for filename in robust.listrp(rpath):
+ new_rpath = robust.check_common_error(error_handler,
rpath.append, (filename,))
if new_rpath:
s = sel_func(new_rpath)
@@ -204,12 +203,12 @@ class Select:
return None
if self.quoting_on:
- for subdir in FilenameMapping.get_quoted_dir_children(rpath):
+ for subdir in get_quoted_dir_children(rpath):
for rp in rec_func(subdir, rec_func, sel_func):
yield rp
else:
- for filename in Robust.listrp(rpath):
- new_rp = Robust.check_common_error(
+ for filename in robust.listrp(rpath):
+ new_rp = robust.check_common_error(
error_handler, rpath.append, [filename])
if new_rp:
for rp in rec_func(new_rp, rec_func, sel_func):
@@ -646,3 +645,22 @@ probably isn't what you meant.""" %
return res
+def get_quoted_dir_children(rpath):
+ """For rpath directory, return list of quoted children in dir
+
+ This used to be in FilenameMapping, but was moved because it
+ depends on the robust.listrp routine.
+
+ """
+ if not rpath.isdir(): return []
+ dir_pairs = [(FilenameMapping.unquote(filename), filename)
+ for filename in robust.listrp(rpath)]
+ dir_pairs.sort() # sort by real index, not quoted part
+ child_list = []
+ for unquoted, filename in dir_pairs:
+ childrp = rpath.append(unquoted)
+ childrp.quote_path()
+ child_list.append(childrp)
+ return child_list
+
+