rpms/createrepo/F-8 createrepo-skip-stat.patch, NONE, 1.1 createrepo.spec, 1.31, 1.32

Luke Macken (lmacken) fedora-extras-commits at redhat.com
Mon Jan 21 21:05:47 UTC 2008


Author: lmacken

Update of /cvs/pkgs/rpms/createrepo/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv15500

Modified Files:
	createrepo.spec 
Added Files:
	createrepo-skip-stat.patch 
Log Message:
* Mon Jan 21 2008 Luke Macken <lmacken at redhat.com> - 0.4.11-2
- Apply createrepo-skip-stat.patch to add a '--skip-stat' option that can
  drastically speed up repository creation when used in conjunction with '--update'



createrepo-skip-stat.patch:

--- NEW FILE createrepo-skip-stat.patch ---
From: Seth Vidal <skvidal at fedoraproject.org>
Date: Fri, 18 Jan 2008 20:41:32 +0000 (-0500)
Subject: add --skip-stat to maintenance version of createrepo
X-Git-Url: http://devel.linux.duke.edu/gitweb/?p=createrepo.git;a=commitdiff_plain;h=cb9dfcb56f8190ffc440c7c841c969ab31d1bd91

add --skip-stat to maintenance version of createrepo
---

diff --git a/genpkgmetadata.py b/genpkgmetadata.py
index bef0225..631f95f 100755
--- a/genpkgmetadata.py
+++ b/genpkgmetadata.py
@@ -65,6 +65,8 @@ def usage(retval=1):
      -p, --pretty = output xml files in pretty format.
      --update = update existing metadata (if present)
      -d, --database = generate the sqlite databases.
+     --skip-stat = skip the stat() call on a --update, assumes if the name
+                   is the same then the file is the same.
     """)
 
     sys.exit(retval)
@@ -151,6 +153,9 @@ class MetaDataGenerator:
                 'verbose' : self.cmds['verbose'],
                 'pkgdir' : os.path.normpath(os.path.join(self.cmds['basedir'], directory))
             }
+            if self.cmds['skip_stat']:
+                opts['do_stat'] = False
+                
             #and scan the old repo
             self.oldData = readMetadata.MetadataIndex(self.cmds['outputdir'],
                                                       basefile, flfile, otherfile, opts)
@@ -434,6 +439,7 @@ def parseArgs(args):
     cmds['file-pattern-match'] = ['.*bin\/.*', '^\/etc\/.*', '^\/usr\/lib\/sendmail$']
     cmds['dir-pattern-match'] = ['.*bin\/.*', '^\/etc\/.*']
     cmds['skip-symlinks'] = False
+    cmds['skip_stat'] = False
     cmds['pkglist'] = []
 
     try:
@@ -442,7 +448,8 @@ def parseArgs(args):
                                                                   'baseurl=', 'groupfile=', 'checksum=',
                                                                   'version', 'pretty', 'split', 'outputdir=',
                                                                   'noepoch', 'checkts', 'database', 'update',
-                                                                  'skip-symlinks', 'pkglist='])
+                                                                  'skip-symlinks', 'pkglist=',
+                                                                  'skip-stat'])
     except getopt.error, e:
         errorprint(_('Options Error: %s.') % e)
         usage()
@@ -514,6 +521,8 @@ def parseArgs(args):
                 cmds['database'] = True
             elif arg in ['-S', '--skip-symlinks']:
                 cmds['skip-symlinks'] = True
+            elif arg == '--skip-stat':
+                cmds['skip_stat'] = True
             elif arg in ['-i', '--pkglist']:
                 cmds['pkglist'] = a
                                 
diff --git a/readMetadata.py b/readMetadata.py
index 60e6129..3aaa891 100644
--- a/readMetadata.py
+++ b/readMetadata.py
@@ -87,6 +87,8 @@ class MetadataIndex(object):
         mtime = None
         size = None
         relpath = None
+        do_stat = self.opts.get('do_stat', True)
+
         while node is not None:
             if node.type != "element":
                 node = node.next
@@ -112,24 +114,25 @@ class MetadataIndex(object):
         if size is None:
             print _("size missing for %s") % relpath
             return
-        filepath = os.path.join(self.opts['pkgdir'], relpath)
-        try:
-            st = os.stat(filepath)
-        except OSError:
-            #file missing -- ignore
-            return
-        if not stat.S_ISREG(st.st_mode):
-            #ignore non files
-            return
-        #check size and mtime
-        if st.st_size != size:
-            if self.opts.get('verbose'):
-                print _("Size (%i -> %i) changed for file %s") % (size,st.st_size,filepath)
-            return
-        if st.st_mtime != mtime:
-            if self.opts.get('verbose'):
-                print _("Modification time changed for %s") % filepath
-            return
+        if do_stat:
+            filepath = os.path.join(self.opts['pkgdir'], relpath)
+            try:
+                st = os.stat(filepath)
+            except OSError:
+                #file missing -- ignore
+                return
+            if not stat.S_ISREG(st.st_mode):
+                #ignore non files
+                return
+            #check size and mtime
+            if st.st_size != size:
+                if self.opts.get('verbose'):
+                    print _("Size (%i -> %i) changed for file %s") % (size,st.st_size,filepath)
+                return
+            if st.st_mtime != mtime:
+                if self.opts.get('verbose'):
+                    print _("Modification time changed for %s") % filepath
+                return
         #otherwise we index
         self.basenodes[relpath] = top
         self.pkg_ids[relpath] = pkgid


Index: createrepo.spec
===================================================================
RCS file: /cvs/pkgs/rpms/createrepo/F-8/createrepo.spec,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- createrepo.spec	29 Nov 2007 17:00:27 -0000	1.31
+++ createrepo.spec	21 Jan 2008 21:05:06 -0000	1.32
@@ -1,10 +1,11 @@
 Summary: Creates a common metadata repository
 Name: createrepo
 Version: 0.4.11
-Release: 1%{?dist}
+Release: 2%{?dist}
 License: GPLv2
 Group: System Environment/Base
 Source: %{name}-%{version}.tar.gz
+Patch0: %{name}-skip-stat.patch
 URL: http://linux.duke.edu/projects/metadata/
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildArchitectures: noarch
@@ -18,6 +19,7 @@
 
 %prep
 %setup -q
+%patch0 -p1 -b .skip-stat
 
 %build
 
@@ -38,6 +40,10 @@
 %{_mandir}/*/*
 
 %changelog
+* Mon Jan 21 2008 Luke Macken <lmacken at redhat.com> - 0.4.11-2
+- Apply createrepo-skip-stat.patch to add a '--skip-stat' option that can
+  drastically speed up repository creation when used in conjunction with '--update'
+
 * Mon Nov 26 2007 Luke Macken <lmacken at redhat.com> - 0.4.11-1
 - Update to 0.4.11
 - Include COPYING file and change License to GPLv2




More information about the fedora-extras-commits mailing list