From 98ef1800b77fc9eb18dc32532b6e761816c7dd52 Mon Sep 17 00:00:00 2001 From: bescoto Date: Thu, 15 Dec 2005 04:57:27 +0000 Subject: Restore longname directory fix git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@708 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109 --- rdiff-backup/CHANGELOG | 6 ++++++ rdiff-backup/rdiff_backup/restore.py | 16 +++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/rdiff-backup/CHANGELOG b/rdiff-backup/CHANGELOG index faa7c09..5f15bde 100644 --- a/rdiff-backup/CHANGELOG +++ b/rdiff-backup/CHANGELOG @@ -1,3 +1,9 @@ +New in v1.1.5 (????/??/??) +-------------------------- + +Fix for restoring files in directories with really long names. + + New in v1.1.4 (2005/12/13) -------------------------- diff --git a/rdiff-backup/rdiff_backup/restore.py b/rdiff-backup/rdiff_backup/restore.py index 164e967..7f8ae6d 100644 --- a/rdiff-backup/rdiff_backup/restore.py +++ b/rdiff-backup/rdiff_backup/restore.py @@ -322,26 +322,26 @@ class CachedRF: s3 = "--------------------------" return "\n".join((s1, s2, s3)) - def get_rf(self, index): + def get_rf(self, index, mir_rorp = None): """Get a RestoreFile for given index, or None""" while 1: if not self.rf_list: - if not self.add_rfs(index): return None + if not self.add_rfs(index, mir_rorp): return None rf = self.rf_list[0] if rf.index == index: - if Globals.process_uid != 0: self.perm_changer(index) + if Globals.process_uid != 0: self.perm_changer(index, mir_rorp) return rf elif rf.index > index: # Try to add earlier indicies. But if first is # already from same directory, or we can't find any # from that directory, then we know it can't be added. if (index[:-1] == rf.index[:-1] or not - self.add_rfs(index)): return None + self.add_rfs(index, mir_rorp)): return None else: del self.rf_list[0] def get_fp(self, index, mir_rorp): """Return the file object (for reading) of given index""" - rf = longname.update_rf(self.get_rf(index), mir_rorp, + rf = longname.update_rf(self.get_rf(index, mir_rorp), mir_rorp, self.root_rf.mirror_rp) if not rf: log.Log("Error: Unable to retrieve data for file %s!\nThe " @@ -350,7 +350,7 @@ class CachedRF: return cStringIO.StringIO('') return rf.get_restore_fp() - def add_rfs(self, index): + def add_rfs(self, index, mir_rorp = None): """Given index, add the rfs in that same directory Returns false if no rfs are available, which usually indicates @@ -358,6 +358,7 @@ class CachedRF: """ if not index: return self.root_rf + if mir_rorp.has_alt_mirror_name(): return # longname alias separate parent_index = index[:-1] if Globals.process_uid != 0: self.perm_changer(parent_index) temp_rf = RestoreFile(self.root_rf.mirror_rp.new_index(parent_index), @@ -686,8 +687,9 @@ class PermissionChanger: # order that need clearing self.open_index_list = [] - def __call__(self, index): + def __call__(self, index, mir_rorp = None): """Given rpath, change permissions up to and including index""" + if mir_rorp and mir_rorp.has_alt_mirror_name(): return old_index = self.current_index self.current_index = index if not index or index <= old_index: return -- cgit v1.2.1