Revision: 285
http://pymoul.svn.sourceforge.net/pymoul/?rev=285&view=rev
Author: tiran
Date: 2007-04-18 16:46:47 -0700 (Wed, 18 Apr 2007)
Log Message:
-----------
Skip dump of pyc file if the same file is already in the directory - uses md5 hash
Modified Paths:
--------------
pymoul/trunk/src/moul/file/pak.py
Modified: pymoul/trunk/src/moul/file/pak.py
===================================================================
--- pymoul/trunk/src/moul/file/pak.py 2007-04-18 21:43:14 UTC (rev 284)
+++ pymoul/trunk/src/moul/file/pak.py 2007-04-18 23:46:47 UTC (rev 285)
@@ -22,6 +22,7 @@
__revision__ = "$Revision: 187 $"
import os
+from hashlib import md5
from moul.crypt.binary import BinaryFile
@@ -48,9 +49,13 @@
self._files[name] = offset
def names():
+ """List all pyc file names
+ """
return self._files.keys()
def getPycFile(self, name):
+ """Extract pyc file
+ """
fd = self._fd
offset = self._files[name]
fd.seek(offset)
@@ -58,15 +63,26 @@
data = fd.read(size)
return self.magic + data
- def dump(self, path, create=False):
- if create:
+ def dump(self, path, create=False, overwrite=True):
+ """Dump all pyc to a directory
+ """
+ if create and not os.path.isdir(path):
os.mkdir(path)
for name in self._files:
- fd = open(os.path.join(path, name), 'wb')
- fd.write(self.getPycFile(name))
+ pyc = self.getPycFile(name)
+ pathname = os.path.join(path, name)
+ if not overwrite and os.path.isfile(pathname):
+ pycmd5 = md5()
+ pycmd5.update(pyc)
+ fmd5 = md5()
+ fmd5.update(open(pathname, 'rb').read())
+ if pycmd5.digest() == fmd5.digest():
+ #print "Equal: %s" % name
+ continue
+ fd = open(pathname, 'wb')
+ fd.write(pyc)
fd.close()
if __name__ == '__main__':
pak = PAKReader('python.pak')
- pak.dump('pyc', True)
-
+ pak.dump('pyc', create=True, overwrite=False)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|