diff options
author | bescoto <bescoto@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109> | 2004-05-15 23:31:24 +0000 |
---|---|---|
committer | bescoto <bescoto@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109> | 2004-05-15 23:31:24 +0000 |
commit | 7ec3fa22659dab911dfb303b6d5cd124d1fc5333 (patch) | |
tree | 5f9b4c766ed1cb5f8761fe26beabe9256c2699ad /rdiff-backup/rdiff_backup | |
parent | 9b0bcc3edfca7d4b57907136d9ede03325322eba (diff) | |
download | rdiff-backup-7ec3fa22659dab911dfb303b6d5cd124d1fc5333.tar.gz |
Fix to backup_warn_if_infinite_regress code
git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@524 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109
Diffstat (limited to 'rdiff-backup/rdiff_backup')
-rw-r--r-- | rdiff-backup/rdiff_backup/Main.py | 20 | ||||
-rw-r--r-- | rdiff-backup/rdiff_backup/backup.py | 1 |
2 files changed, 12 insertions, 9 deletions
diff --git a/rdiff-backup/rdiff_backup/Main.py b/rdiff-backup/rdiff_backup/Main.py index 78ddf79..2ff5c58 100644 --- a/rdiff-backup/rdiff_backup/Main.py +++ b/rdiff-backup/rdiff_backup/Main.py @@ -272,6 +272,7 @@ def Backup(rpin, rpout): init_user_group_mapping(rpout.conn) backup_final_init(rpout) backup_set_select(rpin) + backup_warn_if_infinite_regress(rpin, rpout) if prevtime: rpout.conn.Main.backup_touch_curmirror_local(rpin, rpout) Time.setprevtime(prevtime) @@ -311,7 +312,6 @@ def backup_check_dirs(rpin, rpout): Log.FatalError("Source directory %s does not exist" % rpin.path) elif not rpin.isdir(): Log.FatalError("Source %s is not a directory" % rpin.path) - backup_warn_if_infinite_regress(rpin, rpout) Globals.rbdir = rpout.append_path("rdiff-backup-data") def backup_set_rbdir(rpin, rpout): @@ -337,14 +337,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 ed0e733..bf458bd 100644 --- a/rdiff-backup/rdiff_backup/backup.py +++ b/rdiff-backup/rdiff_backup/backup.py @@ -71,6 +71,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""" |