diff options
Diffstat (limited to 'rdiff-backup')
-rw-r--r-- | rdiff-backup/rdiff_backup/Main.py | 18 | ||||
-rw-r--r-- | rdiff-backup/rdiff_backup/backup.py | 1 |
2 files changed, 11 insertions, 8 deletions
diff --git a/rdiff-backup/rdiff_backup/Main.py b/rdiff-backup/rdiff_backup/Main.py index 15258e1..757fd71 100644 --- a/rdiff-backup/rdiff_backup/Main.py +++ b/rdiff-backup/rdiff_backup/Main.py @@ -324,14 +324,16 @@ option.""" % rpout.path) def backup_warn_if_infinite_regress(rpin, rpout): """Warn user if destination area contained in source area""" - if rpout.conn is rpin.conn: # it's meaningful to compare paths - if ((len(rpout.path) > len(rpin.path)+1 and - rpout.path[:len(rpin.path)] == rpin.path and - rpout.path[len(rpin.path)] == '/') or - (rpin.path == "." and rpout.path[0] != '/' and - rpout.path[:2] != '..')): - # Just a few heuristics, we don't have to get every case - if Globals.backup_reader.Globals.select_source.Select(rpout): Log( + # Just a few heuristics, we don't have to get every case + if rpout.conn is not rpin.conn: return + if len(rpout.path) <= len(rpin.path)+1: return + if rpout.path[:len(rpin.path)+1] != rpin.path + '/': return + + relative_rpout_comps = tuple(rpout.path[len(rpin.path)+1:].split('/')) + relative_rpout = rpin.new_index(relative_rpout_comps) + if not Globals.select_mirror.Select(relative_rpout): return + + Log( """Warning: The destination directory '%s' may be contained in the source directory '%s'. This could cause an infinite regress. You may need to use the --exclude option.""" % (rpout.path, rpin.path), 2) diff --git a/rdiff-backup/rdiff_backup/backup.py b/rdiff-backup/rdiff_backup/backup.py index 3a57afb..b0ba31f 100644 --- a/rdiff-backup/rdiff_backup/backup.py +++ b/rdiff-backup/rdiff_backup/backup.py @@ -67,6 +67,7 @@ class SourceStruct: sel.set_iter() cache_size = Globals.pipeline_max_length * 3 # to and from+leeway cls._source_select = rorpiter.CacheIndexable(sel, cache_size) + Globals.set('select_mirror', sel) def get_source_select(cls): """Return source select iterator, set by set_source_select""" |