[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Rdiff-backup-commits] rdiff-backup/rdiff_backup fs_abilities.py
From: |
dean gaudet |
Subject: |
[Rdiff-backup-commits] rdiff-backup/rdiff_backup fs_abilities.py |
Date: |
Sun, 28 Jan 2007 02:55:10 +0000 |
CVSROOT: /cvsroot/rdiff-backup
Module name: rdiff-backup
Changes by: dean gaudet <dgaudet> 07/01/28 02:55:10
Modified files:
rdiff_backup : fs_abilities.py
Log message:
Escape DOS device filenames when necessary. [Marc Dyksterhouse]
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/rdiff-backup/rdiff_backup/fs_abilities.py?cvsroot=rdiff-backup&r1=1.29&r2=1.30
Patches:
Index: fs_abilities.py
===================================================================
RCS file: /cvsroot/rdiff-backup/rdiff-backup/rdiff_backup/fs_abilities.py,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- fs_abilities.py 29 Dec 2006 16:10:15 -0000 1.29
+++ fs_abilities.py 28 Jan 2007 02:55:10 -0000 1.30
@@ -46,6 +46,8 @@
name = None # Short string, not used for any technical purpose
read_only = None # True if capabilities were determined
non-destructively
high_perms = None # True if suid etc perms are (read/write) supported
+ escape_dos_devices = None # True if dos device files can't be created
(e.g.,
+ # aux, con, com1, etc)
symlink_perms = None # True if symlink perms are affected by umask
def __init__(self, name = None):
@@ -93,6 +95,7 @@
add_boolean_list([('Access control lists', self.acls),
('Extended attributes',
self.eas),
('Case sensitivity',
self.case_sensitive),
+ ('Escape DOS devices',
self.escape_dos_devices),
('Mac OS X style resource
forks',
self.resource_forks),
('Mac OS X Finder
information', self.carbonfile)])
@@ -117,6 +120,7 @@
self.set_resource_fork_readonly(rp)
self.set_carbonfile()
self.set_case_sensitive_readonly(rp)
+ self.set_escape_dos_devices(rp)
return self
def init_readwrite(self, rbdir):
@@ -148,6 +152,7 @@
self.set_carbonfile()
self.set_high_perms_readwrite(subdir)
self.set_symlink_perms(subdir)
+ self.set_escape_dos_devices(subdir)
subdir.delete()
return self
@@ -413,6 +418,20 @@
sym_dest.delete()
sym_source.delete()
+ def set_escape_dos_devices(self, subdir):
+ """If special file aux can be stat'd, escape special files"""
+ device_rp = subdir.append("aux")
+ if device_rp.lstat():
+ assert device_rp.lstat()
+ log.Log("escape_dos_devices required by filesystem at
%s" \
+ % (subdir.path), 4)
+ self.escape_dos_devices = 1
+ else:
+ assert not device_rp.lstat()
+ log.Log("escape_dos_devices not required by filesystem
at %s" \
+ % (subdir.path), 4)
+ self.escape_dos_devices = 0
+
def get_readonly_fsa(desc_string, rp):
"""Return an fsa with given description_string
@@ -423,6 +442,9 @@
"""
return FSAbilities(desc_string).init_readonly(rp)
+ def set_escape_dos_devices(self):
+ SetConnections.UpdateGlobal('escape_dos_devices', \
+
self.dest_fsa.escape_dos_devices)
class SetGlobals:
"""Various functions for setting Globals vars given FSAbilities above
@@ -491,6 +513,16 @@
SetConnections.UpdateGlobal(write_attr, 1)
self.out_conn.Globals.set_local(conn_attr, 1)
+ def set_must_escape_dos_devices(self, rbdir):
+ """If local edd or src edd, then must escape """
+ device_rp = rbdir.append("aux")
+ if device_rp.lstat(): local_edd = 1
+ else: local_edd = 0
+ SetConnections.UpdateGlobal('must_escape_dos_devices', \
+ self.src_fsa.escape_dos_devices or local_edd)
+ log.Log("Backup: must_escape_dos_devices = %d" % \
+ (self.src_fsa.escape_dos_devices or local_edd),
4)
+
def set_chars_to_quote(self, rbdir):
"""Set chars_to_quote setting for backup session
@@ -509,11 +541,11 @@
if self.src_fsa.case_sensitive and not
self.dest_fsa.case_sensitive:
if self.dest_fsa.extended_filenames:
return "A-Z;" # Quote upper case and quoting
char
- else: return "^a-z0-9_ -." # quote everything but basic
chars
+ else: return "^a-z0-9_ .-" # quote everything but basic
chars
if self.dest_fsa.extended_filenames:
return "" # Don't quote anything
- else: return "^A-Za-z0-9_ -."
+ else: return "^A-Za-z0-9_ .-"
def compare_ctq_file(self, rbdir, suggested_ctq):
"""Compare ctq file with suggested result, return actual ctq"""
@@ -567,6 +599,16 @@
self.out_conn.Globals.set_local(write_attr, 1)
if src_support: self.in_conn.Globals.set_local(conn_attr, 1)
+ def set_must_escape_dos_devices(self, rbdir):
+ """If local edd or src edd, then must escape """
+ device_rp = rbdir.append("aux")
+ if device_rp.lstat(): local_edd = 1
+ else: local_edd = 0
+ SetConnections.UpdateGlobal('must_escape_dos_devices', \
+ self.src_fsa.escape_dos_devices or local_edd)
+ log.Log("Restore: must_escape_dos_devices = %d" % \
+ (self.src_fsa.escape_dos_devices or local_edd),
4)
+
def set_chars_to_quote(self, rbdir):
"""Set chars_to_quote from rdiff-backup-data dir"""
if Globals.chars_to_quote is not None: return # already
overridden
@@ -635,6 +677,8 @@
bsg.set_high_perms()
bsg.set_symlink_perms()
bsg.set_chars_to_quote(Globals.rbdir)
+ bsg.set_escape_dos_devices()
+ bsg.set_must_escape_dos_devices(Globals.rbdir)
def restore_set_globals(rpout):
"""Set fsa related globals for restore session, given in/out rps"""
@@ -656,6 +700,8 @@
rsg.set_high_perms()
rsg.set_symlink_perms()
rsg.set_chars_to_quote(Globals.rbdir)
+ rsg.set_escape_dos_devices()
+ rsg.set_must_escape_dos_devices(Globals.rbdir)
def single_set_globals(rp, read_only = None):
"""Set fsa related globals for operation on single filesystem"""
@@ -675,4 +721,6 @@
ssg.set_high_perms()
ssg.set_symlink_perms()
ssg.set_chars_to_quote(Globals.rbdir)
+ ssg.set_escape_dos_devices()
+ ssg.set_must_escape_dos_devices(Globals.rbdir)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Rdiff-backup-commits] rdiff-backup/rdiff_backup fs_abilities.py,
dean gaudet <=