[Pymoul-svn] SF.net SVN: pymoul: [285] pymoul/trunk/src/moul/file/pak.py
Status: Alpha
Brought to you by:
tiran
From: <ti...@us...> - 2007-04-18 23:46:46
|
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. |