rdiff-backup-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Rdiff-backup-commits] Changes to rdiff-backup/rdiff_backup/restore.py


From: Ben Escoto
Subject: [Rdiff-backup-commits] Changes to rdiff-backup/rdiff_backup/restore.py
Date: Mon, 31 Oct 2005 23:46:21 -0500

Index: rdiff-backup/rdiff_backup/restore.py
diff -u rdiff-backup/rdiff_backup/restore.py:1.51 
rdiff-backup/rdiff_backup/restore.py:1.52
--- rdiff-backup/rdiff_backup/restore.py:1.51   Mon Oct 31 04:53:31 2005
+++ rdiff-backup/rdiff_backup/restore.py        Tue Nov  1 04:46:16 2005
@@ -459,6 +459,23 @@
 
        def get_restore_fp(self):
                """Return file object of restored data"""
+               def get_fp():
+                       current_fp = self.get_first_fp()
+                       for inc_diff in self.relevant_incs[1:]:
+                               log.Log("Applying patch %s" % 
(inc_diff.get_indexpath(),), 7)
+                               assert inc_diff.getinctype() == 'diff'
+                               delta_fp = inc_diff.open("rb", 
inc_diff.isinccompressed())
+                               new_fp = tempfile.TemporaryFile()
+                               Rdiff.write_patched_fp(current_fp, delta_fp, 
new_fp)
+                               new_fp.seek(0)
+                               current_fp = new_fp
+                       return current_fp
+
+               def error_handler(exc):
+                       log.Log("Error reading %s, substituting empty file." %
+                                       (self.mirror_rp.path,), 2)
+                       return cStringIO.StringIO('')
+
                if not self.relevant_incs[-1].isreg():
                        log.Log("""Warning: Could not restore file %s!
 
@@ -469,16 +486,7 @@
 rdiff-backup destination directory, or a bug in rdiff-backup""" %
                                        (self.mirror_rp.path, 
self.relevant_incs[-1].lstat()), 2)
                        return cStringIO.StringIO('')
-               current_fp = self.get_first_fp()
-               for inc_diff in self.relevant_incs[1:]:
-                       log.Log("Applying patch %s" % 
(inc_diff.get_indexpath(),), 7)
-                       assert inc_diff.getinctype() == 'diff'
-                       delta_fp = inc_diff.open("rb", 
inc_diff.isinccompressed())
-                       new_fp = tempfile.TemporaryFile()
-                       Rdiff.write_patched_fp(current_fp, delta_fp, new_fp)
-                       new_fp.seek(0)
-                       current_fp = new_fp
-               return current_fp
+               return robust.check_common_error(error_handler, get_fp)
 
        def get_first_fp(self):
                """Return first file object from relevant inc list"""




reply via email to

[Prev in Thread] Current Thread [Next in Thread]