From 699dff9b9a8053966eb79c6e7d7fec175ad4e4d7 Mon Sep 17 00:00:00 2001 From: owsla Date: Wed, 17 Dec 2008 23:07:11 +0000 Subject: Fix for crash when deleting read-only files on Windows. (Patch from Josh Nisly) git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@966 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109 --- rdiff-backup/CHANGELOG | 2 ++ rdiff-backup/rdiff_backup/rpath.py | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/rdiff-backup/CHANGELOG b/rdiff-backup/CHANGELOG index f2a47da..e600968 100644 --- a/rdiff-backup/CHANGELOG +++ b/rdiff-backup/CHANGELOG @@ -1,6 +1,8 @@ New in v1.2.3 (????/??/??) --------------------------- +Fix for crash when deleting read-only files on Windows. (Patch from Josh Nisly) + Fix for Python 2.2 in win_acls.py (Closes Savannah bug #24922). Throttle verbosity of listattr() warning messages from 3 to 4. (Andrew Ferguson) diff --git a/rdiff-backup/rdiff_backup/rpath.py b/rdiff-backup/rdiff_backup/rpath.py index e5e19fa..08b63b7 100644 --- a/rdiff-backup/rdiff_backup/rpath.py +++ b/rdiff-backup/rdiff_backup/rpath.py @@ -261,6 +261,7 @@ def rename(rp_source, rp_dest): raise # On Windows, files can't be renamed on top of an existing file + rp_source.conn.os.chmod(rp_dest.path, 0700) rp_source.conn.os.unlink(rp_dest.path) rp_source.conn.os.rename(rp_source.path, rp_dest.path) @@ -1055,7 +1056,17 @@ class RPath(RORPath): except os.error: if Globals.fsync_directories: self.fsync() self.conn.shutil.rmtree(self.path) - else: self.conn.os.unlink(self.path) + else: + try: self.conn.os.unlink(self.path) + except OSError, error: + if error.errno == errno.EPERM: + # On Windows, read-only files cannot be deleted. + # Remove the read-only attribute and try again. + self.chmod(0700) + self.conn.os.unlink(self.path) + else: + raise + self.setdata() def contains_files(self): -- cgit v1.2.1