single open for all file operations. about a 30% time savings.
authorSeth Vidal <skvidal@linux.duke.edu>
Fri, 7 Jan 2005 21:39:47 +0000 (21:39 +0000)
committerSeth Vidal <skvidal@linux.duke.edu>
Fri, 7 Jan 2005 21:39:47 +0000 (21:39 +0000)
dumpMetadata.py
genpkgmetadata.py

index d2e51bbbc544f9fc352cacab46f5c1b011df6d29..5431455c4e55c8310a17b6aa83a7083993f0cf42 100644 (file)
@@ -29,6 +29,13 @@ import re
 import stat
 from genpkgmetadata import _gzipOpen
 
+def returnFD(filename):
+    try:
+        fdno = os.open(filename, os.O_RDONLY)
+    except OSError:
+        raise MDError, "Error opening file"
+    return fdno
+    
 def returnHdr(ts, package):
     """hand back the rpm header or raise an Error if the pkg is fubar"""
     try:
@@ -181,9 +188,12 @@ class RpmMetaData:
         
         self.localurl = url
         self.relativepath = filename
-        self.hdr = returnHdr(ts, filename)
-        self.pkgid = getChecksum(sumtype, filename)
-        (self.rangestart, self.rangeend) = byteranges(filename)
+        self.fd = returnFD(filename)
+        self.hdr = returnHdr(ts, self.fd)
+        fo = os.fdopen(self.fd)
+        self.pkgid = getChecksum(sumtype, fo)
+        fo.seek(0)
+        (self.rangestart, self.rangeend) = byteranges(fo)
 
         # setup our regex objects
         fileglobs = ['.*bin\/.*', '^\/etc\/.*', '^\/usr\/lib\/sendmail$']
index 968779e4f226b259cccccd42a89862e0b5bcec1a..608ec36871f499025a8eed488b373e753e8700b5 100755 (executable)
@@ -158,6 +158,8 @@ def parseArgs(args):
     cmds['groupfile'] = None
     cmds['sumtype'] = 'sha'
     cmds['pretty'] = 0
+    cmds['file-pattern-match'] = ['.*bin\/.*', '^\/etc\/.*', '^\/usr\/lib\/sendmail$']
+    cmds['dir-pattern-match'] = ['.*bin\/.*', '^\/etc\/.*']
 
     try:
         gopts, argsleft = getopt.getopt(args, 'phqVvg:s:x:u:', ['help', 'exclude=', 
@@ -494,8 +496,10 @@ def main(args):
 if __name__ == "__main__":
     if len(sys.argv) > 1:
         if sys.argv[1] == 'profile':
-            import profile
-            profile.run('main(sys.argv[2:])')
+            import hotshot
+            p = hotshot.Profile(os.path.expanduser("~/createrepo.prof"))
+            p.run('main(sys.argv[2:])')
+            p.close()
         else:
             main(sys.argv[1:])
     else: