Hi,
The attached patch against the rdiff-backup CVS adds support for
preserving the Mac OS X 'Creation Date' field across backups.
The patch works by saving the Creation Date in the rdiff-backup metadata
and then setting it upon file restore. Like with other Mac OS X file
data, it sets the creation date on the backup copy if the underlying
filesystem supports it.
Cheers,
Andrew
--
Andrew Ferguson - [EMAIL PROTECTED]
diff -Nur rdiff-backup-cvs/rdiff_backup/metadata.py
rdiff-backup-cdates/rdiff_backup/metadata.py
--- rdiff-backup-cvs/rdiff_backup/metadata.py 2006-01-29 17:16:05.000000000
-0500
+++ rdiff-backup-cdates/rdiff_backup/metadata.py 2006-08-17
17:10:38.000000000 -0400
@@ -70,6 +70,7 @@
retvalparts.append('type:%s' % binascii.hexlify(cfile['type']))
retvalparts.append('location:%d,%d' % cfile['location'])
retvalparts.append('flags:%d' % cfile['flags'])
+ retvalparts.append('createDate:%d' % cfile['createDate'])
return '|'.join(retvalparts)
def string2carbonfile(data):
@@ -87,6 +88,8 @@
retval['location'] = (int(a), int(b))
elif key == 'flags':
retval['flags'] = int(value)
+ elif key == 'createDate':
+ retval['createDate'] = int(value)
return retval
def RORP2Record(rorpath):
diff -Nur rdiff-backup-cvs/rdiff_backup/rpath.py
rdiff-backup-cdates/rdiff_backup/rpath.py
--- rdiff-backup-cvs/rdiff_backup/rpath.py 2006-01-13 00:29:47.000000000
-0500
+++ rdiff-backup-cdates/rdiff_backup/rpath.py 2006-08-17 17:09:43.000000000
-0400
@@ -1207,6 +1207,8 @@
if not cfile: return
log.Log("Writing carbon data to %s" % (self.index,), 7)
from Carbon.File import FSSpec
+ from Carbon.File import FSRef
+ import Carbon.Files
import MacOS
fsobj = FSSpec(self.path)
finderinfo = fsobj.FSpGetFInfo()
@@ -1215,7 +1217,16 @@
finderinfo.Location = cfile['location']
finderinfo.Flags = cfile['flags']
fsobj.FSpSetFInfo(finderinfo)
- self.set_carbonfile(cfile)
+
+ """Write Creation Date to self (if stored in metadata)."""
+ try:
+ cdate = cfile['createDate']
+ fsref = FSRef(fsobj)
+ cataloginfo, d1, d2, d3 =
fsref.FSGetCatalogInfo(Carbon.Files.kFSCatInfoCreateDate)
+ cataloginfo.createDate = (0, cdate, 0)
+
fsref.FSSetCatalogInfo(Carbon.Files.kFSCatInfoCreateDate, cataloginfo)
+ self.set_carbonfile(cfile)
+ except KeyError: self.set_carbonfile(cfile)
def get_resource_fork(self):
"""Return resource fork data, setting if necessary"""
@@ -1337,14 +1348,18 @@
def carbonfile_get(rpath):
"""Return carbonfile value for local rpath"""
from Carbon.File import FSSpec
+ from Carbon.File import FSRef
+ import Carbon.Files
import MacOS
try:
fsobj = FSSpec(rpath.path)
finderinfo = fsobj.FSpGetFInfo()
+ cataloginfo, d1, d2, d3 =
FSRef(fsobj).FSGetCatalogInfo(Carbon.Files.kFSCatInfoCreateDate)
cfile = {'creator': finderinfo.Creator,
'type': finderinfo.Type,
'location': finderinfo.Location,
- 'flags': finderinfo.Flags}
+ 'flags': finderinfo.Flags,
+ 'createDate': cataloginfo.createDate[1]}
return cfile
except MacOS.Error:
log.Log("Cannot read carbonfile information from %s" %
_______________________________________________
rdiff-backup-users mailing list at [email protected]
http://lists.nongnu.org/mailman/listinfo/rdiff-backup-users
Wiki URL: http://rdiff-backup.solutionsfirst.com.au/index.php/RdiffBackupWiki