summaryrefslogtreecommitdiff
path: root/rdiff-backup/rdiff_backup/Main.py
diff options
context:
space:
mode:
Diffstat (limited to 'rdiff-backup/rdiff_backup/Main.py')
-rw-r--r--rdiff-backup/rdiff_backup/Main.py18
1 files changed, 10 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)