mirror of https://github.com/python/cpython
Implemented FSCatalogInfo structure support, and used this to implement
FSSpec.SetDates() and GetDates(). Closes #662836.
This commit is contained in:
parent
a5caa6fcd9
commit
2d0909b9cb
|
@ -21,6 +21,23 @@ READ = 1
|
||||||
WRITE = 2
|
WRITE = 2
|
||||||
smAllScripts = -3
|
smAllScripts = -3
|
||||||
|
|
||||||
|
#
|
||||||
|
# Find the epoch conversion for file dates in a way that works on OS9 and OSX
|
||||||
|
import time
|
||||||
|
if time.gmtime(0)[0] == 1970:
|
||||||
|
_EPOCHCONVERT = -((1970-1904)*365 + 17) * (24*60*60) + 0x100000000L
|
||||||
|
def _utc2time(utc):
|
||||||
|
t = utc[1] + _EPOCHCONVERT
|
||||||
|
return int(t)
|
||||||
|
def _time2utc(t):
|
||||||
|
t = t - _EPOCHCONVERT
|
||||||
|
if t < -0x7fffffff:
|
||||||
|
t = t + 0x10000000L
|
||||||
|
return (0, int(t), 0)
|
||||||
|
else:
|
||||||
|
def _utc2time(utc): return utc[1]
|
||||||
|
def _time2utc(t): return (0, t, 0)
|
||||||
|
|
||||||
# The old name of the error object:
|
# The old name of the error object:
|
||||||
error = Carbon.File.Error
|
error = Carbon.File.Error
|
||||||
|
|
||||||
|
@ -52,12 +69,20 @@ class FSSpec(Carbon.File.FSSpec):
|
||||||
return self.FSpSetFInfo(info)
|
return self.FSpSetFInfo(info)
|
||||||
|
|
||||||
def GetDates(self):
|
def GetDates(self):
|
||||||
import os
|
catInfoFlags = kFSCatInfoCreateDate|kFSCatInfoContentMod|kFSCatInfoBackupDate
|
||||||
statb = os.stat(self.as_pathname())
|
catinfo, d1, d2, d3 = FSRef(self).FSGetCatalogInfo(catInfoFlags)
|
||||||
return statb.st_ctime, statb.st_mtime, 0
|
cdate = catinfo.createDate
|
||||||
|
mdate = catinfo.contentModDate
|
||||||
|
bdate = catinfo.backupDate
|
||||||
|
return _utc2time(cdate), _utc2time(mdate), _utc2time(bdate)
|
||||||
|
|
||||||
def SetDates(self, *dates):
|
def SetDates(self, cdate, mdate, bdate):
|
||||||
pass # print "FSSpec.SetDates not yet implemented"
|
catInfoFlags = kFSCatInfoCreateDate|kFSCatInfoContentMod|kFSCatInfoBackupDate
|
||||||
|
catinfo = Carbon.File.FSCatalogInfo(
|
||||||
|
createDate = _time2utc(cdate),
|
||||||
|
contentModDate = _time2utc(mdate),
|
||||||
|
backupDate = _time2utc(bdate))
|
||||||
|
FSRef(self).FSSetCatalogInfo(catInfoFlags, catinfo)
|
||||||
|
|
||||||
class FSRef(Carbon.File.FSRef):
|
class FSRef(Carbon.File.FSRef):
|
||||||
def as_fsspec(self):
|
def as_fsspec(self):
|
||||||
|
|
|
@ -370,7 +370,6 @@ static int FSCatalogInfo_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
|
||||||
"atributeModDate",
|
"atributeModDate",
|
||||||
"accessDate",
|
"accessDate",
|
||||||
"backupDate",
|
"backupDate",
|
||||||
"permissions",
|
|
||||||
"valence",
|
"valence",
|
||||||
"dataLogicalSize",
|
"dataLogicalSize",
|
||||||
"dataPhysicalSize",
|
"dataPhysicalSize",
|
||||||
|
@ -380,7 +379,7 @@ static int FSCatalogInfo_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
|
||||||
"userPrivileges"
|
"userPrivileges"
|
||||||
, 0};
|
, 0};
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|HhllO&O&O&O&O&(llll)llllllb", kw, &((FSCatalogInfoObject *)self)->ob_itself.nodeFlags,
|
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|HhllO&O&O&O&O&llllllb", kw, &((FSCatalogInfoObject *)self)->ob_itself.nodeFlags,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.volume,
|
&((FSCatalogInfoObject *)self)->ob_itself.volume,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.parentDirID,
|
&((FSCatalogInfoObject *)self)->ob_itself.parentDirID,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.nodeID,
|
&((FSCatalogInfoObject *)self)->ob_itself.nodeID,
|
||||||
|
@ -389,10 +388,6 @@ static int FSCatalogInfo_tp_init(PyObject *self, PyObject *args, PyObject *kwds)
|
||||||
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.attributeModDate,
|
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.attributeModDate,
|
||||||
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate,
|
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate,
|
||||||
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.backupDate,
|
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.backupDate,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.permissions[0],
|
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.permissions[1],
|
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.permissions[2],
|
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.permissions[3],
|
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.valence,
|
&((FSCatalogInfoObject *)self)->ob_itself.valence,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize,
|
&((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize,
|
&((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize,
|
||||||
|
|
|
@ -413,7 +413,7 @@ class FSCatalogInfoDefinition(PEP253Mixin, ObjectDefinition):
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
# The same info, but in a different form
|
# The same info, but in a different form
|
||||||
INITFORMAT = "HhllO&O&O&O&O&(llll)llllllb"
|
INITFORMAT = "HhllO&O&O&O&O&llllllb"
|
||||||
INITARGS = """&((FSCatalogInfoObject *)self)->ob_itself.nodeFlags,
|
INITARGS = """&((FSCatalogInfoObject *)self)->ob_itself.nodeFlags,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.volume,
|
&((FSCatalogInfoObject *)self)->ob_itself.volume,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.parentDirID,
|
&((FSCatalogInfoObject *)self)->ob_itself.parentDirID,
|
||||||
|
@ -423,10 +423,6 @@ class FSCatalogInfoDefinition(PEP253Mixin, ObjectDefinition):
|
||||||
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.attributeModDate,
|
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.attributeModDate,
|
||||||
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate,
|
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.accessDate,
|
||||||
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.backupDate,
|
UTCDateTime_Convert, &((FSCatalogInfoObject *)self)->ob_itself.backupDate,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.permissions[0],
|
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.permissions[1],
|
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.permissions[2],
|
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.permissions[3],
|
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.valence,
|
&((FSCatalogInfoObject *)self)->ob_itself.valence,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize,
|
&((FSCatalogInfoObject *)self)->ob_itself.dataLogicalSize,
|
||||||
&((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize,
|
&((FSCatalogInfoObject *)self)->ob_itself.dataPhysicalSize,
|
||||||
|
@ -444,7 +440,6 @@ class FSCatalogInfoDefinition(PEP253Mixin, ObjectDefinition):
|
||||||
"atributeModDate",
|
"atributeModDate",
|
||||||
"accessDate",
|
"accessDate",
|
||||||
"backupDate",
|
"backupDate",
|
||||||
"permissions",
|
|
||||||
"valence",
|
"valence",
|
||||||
"dataLogicalSize",
|
"dataLogicalSize",
|
||||||
"dataPhysicalSize",
|
"dataPhysicalSize",
|
||||||
|
|
Loading…
Reference in New Issue