[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Rdiff-backup-commits] Changes to rdiff-backup/rdiff_backup/backup.py
From: |
Ben Escoto |
Subject: |
[Rdiff-backup-commits] Changes to rdiff-backup/rdiff_backup/backup.py |
Date: |
Fri, 04 Nov 2005 21:54:04 -0500 |
Index: rdiff-backup/rdiff_backup/backup.py
diff -u rdiff-backup/rdiff_backup/backup.py:1.34
rdiff-backup/rdiff_backup/backup.py:1.35
--- rdiff-backup/rdiff_backup/backup.py:1.34 Fri Nov 4 22:41:13 2005
+++ rdiff-backup/rdiff_backup/backup.py Sat Nov 5 02:54:03 2005
@@ -477,14 +477,27 @@
self.cached_rp = self.basis_root_rp.new_index(index)
return self.cached_rp
+ def check_long_name(self, func, *args):
+ """Execute function, checking for ENAMETOOLONG error"""
+ try: result = func(*args)
+ except OSError, exc:
+ if (errno.errorcode.has_key(exc[0]) and
+ errno.errorcode[exc[0]] == 'ENAMETOOLONG'):
+ self.error_handler(exc, args[0])
+ return None
+ else: raise
+ return result
+
def can_fast_process(self, index, diff_rorp):
"""True if diff_rorp and mirror are not directories"""
- rp = self.get_rp_from_root(index)
- return not diff_rorp.isdir() and not rp.isdir()
+ rp = self.check_long_name(self.get_rp_from_root, index)
+ # filename too long error qualifies (hack)
+ return not rp or (not diff_rorp.isdir() and not rp.isdir())
def fast_process(self, index, diff_rorp):
"""Patch base_rp with diff_rorp (case where neither is
directory)"""
- rp = self.get_rp_from_root(index)
+ rp = self.check_long_name(self.get_rp_from_root, index)
+ if not rp: return
tf = TempFile.new(rp)
if self.patch_to_temp(rp, diff_rorp, tf):
if tf.lstat():
@@ -633,23 +646,14 @@
self.cached_incrp = self.inc_root_rp.new_index(index)
return self.cached_incrp
- def inc_with_checking(self, new, old, inc_rp):
- """Produce increment taking new to old checking for errors"""
- try: inc = increment.Increment(new, old, inc_rp)
- except OSError, exc:
- if (errno.errorcode.has_key(exc[0]) and
- errno.errorcode[exc[0]] == 'ENAMETOOLONG'):
- self.error_handler(exc, old)
- return None
- else: raise
- return inc
-
def fast_process(self, index, diff_rorp):
"""Patch base_rp with diff_rorp and write increment (neither is
dir)"""
- rp = self.get_rp_from_root(index)
+ rp = self.check_long_name(self.get_rp_from_root, index)
+ if not rp: return
tf = TempFile.new(rp)
if self.patch_to_temp(rp, diff_rorp, tf):
- inc = self.inc_with_checking(tf, rp,
self.get_incrp(index))
+ inc = self.check_long_name(increment.Increment,
+ tf,
rp, self.get_incrp(index))
if inc is not None:
self.CCPP.set_inc(index, inc)
if inc.isreg():
@@ -669,14 +673,14 @@
base_rp = self.base_rp = self.get_rp_from_root(index)
assert diff_rorp.isdir() or base_rp.isdir()
if diff_rorp.isdir():
- inc = self.inc_with_checking(diff_rorp, base_rp,
-
self.get_incrp(index))
+ inc = self.check_long_name(increment.Increment,
+ diff_rorp,
base_rp, self.get_incrp(index))
if inc and inc.isreg():
inc.fsync_with_dir() # must write inc before rp
changed
self.prepare_dir(diff_rorp, base_rp)
elif self.set_dir_replacement(diff_rorp, base_rp):
- inc = self.inc_with_checking(self.dir_replacement,
base_rp,
-
self.get_incrp(index))
+ inc = self.check_long_name(increment.Increment,
+ self.dir_replacement, base_rp,
self.get_incrp(index))
if inc:
self.CCPP.set_inc(index, inc)
self.CCPP.flag_success(index)