[Rpm-metadata] createrepo/__init__.py createrepo/readMetadata.py genpkgmetadata.py
Seth Vidal
skvidal at linux.duke.edu
Tue Jan 15 15:25:26 UTC 2008
createrepo/__init__.py | 4 +++
createrepo/readMetadata.py | 38 +++++++++++++++++++------------------
genpkgmetadata.py | 46 +++++++++++++++++++++++++++++++--------------
3 files changed, 56 insertions(+), 32 deletions(-)
New commits:
commit d9aae1d5ba72694ea97dc87e20e52561f0fbf6f8
Author: Seth Vidal <skvidal at fedoraproject.org>
Date: Tue Jan 15 10:21:35 2008 -0500
- add --skip-stat to skip the stat() call on updates - this is mostly
b/c the fedora createrepo call is done over nfs and that is VERY VERY
slow for 20K stat() calls :(
- fix --pkglist - patch from jesse keating
- document options in --help output
diff --git a/createrepo/__init__.py b/createrepo/__init__.py
index f57e06b..4fc6c58 100644
--- a/createrepo/__init__.py
+++ b/createrepo/__init__.py
@@ -67,6 +67,7 @@ class MetaDataConfig(object):
self.checkts = False
self.split = False
self.update = False
+ self.skip_stat = False
self.database = False
self.outputdir = None
self.file_patterns = ['.*bin\/.*', '^\/etc\/.*', '^\/usr\/lib\/sendmail$']
@@ -211,6 +212,9 @@ class MetaDataGenerator:
'verbose' : self.conf.verbose,
'pkgdir' : os.path.normpath(os.path.join(self.conf.basedir, directory))
}
+ if self.conf.skip_stat:
+ opts['do_stat'] = False
+
#and scan the old repo
self.oldData = readMetadata.MetadataIndex(self.conf.outputdir,
primaryfile, flfile, otherfile, opts)
diff --git a/createrepo/readMetadata.py b/createrepo/readMetadata.py
index 2b0713b..72ac845 100644
--- a/createrepo/readMetadata.py
+++ b/createrepo/readMetadata.py
@@ -81,6 +81,7 @@ 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
@@ -106,24 +107,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
diff --git a/genpkgmetadata.py b/genpkgmetadata.py
index 22d7931..38cd151 100755
--- a/genpkgmetadata.py
+++ b/genpkgmetadata.py
@@ -46,21 +46,39 @@ def parseArgs(args, conf):
help="output more debugging info.")
parser.add_option("-x", "--excludes", default=[], action="append",
help="files to exclude")
- parser.add_option("-u", "--baseurl", default=None)
- parser.add_option("-g", "--groupfile", default=None)
- parser.add_option("-s", "--checksum", default="sha", dest='sumtype')
- parser.add_option("-n", "--noepoch", default=False, action="store_true")
- parser.add_option("-p", "--pretty", default=False, action="store_true")
- parser.add_option("-c", "--cachedir", default=None)
- parser.add_option("--basedir", default=os.getcwd())
- parser.add_option("-C", "--checkts", default=False, action="store_true")
- parser.add_option("-d", "--database", default=False, action="store_true")
- parser.add_option("--update", default=False, action="store_true")
- parser.add_option("--split", default=False, action="store_true")
- parser.add_option("-i", "--pkglist", default=False, action="store_true")
- parser.add_option("-o", "--outputdir", default="")
+ parser.add_option("-u", "--baseurl", default=None,
+ help="baseurl to append on all files")
+ parser.add_option("-g", "--groupfile", default=None,
+ help="path to groupfile to include in metadata")
+ parser.add_option("-s", "--checksum", default="sha", dest='sumtype',
+ help="Deprecated, ignore")
+ parser.add_option("-n", "--noepoch", default=False, action="store_true",
+ help="don't add zero epochs for non-existent epochs"\
+ "(incompatible with yum and smart but required for" \
+ "systems with rpm < 4.2.1)")
+ parser.add_option("-p", "--pretty", default=False, action="store_true",
+ help="make sure all xml generated is formatted")
+ parser.add_option("-c", "--cachedir", default=None,
+ help="set path to cache dir")
+ parser.add_option("-C", "--checkts", default=False, action="store_true",
+ help="check timestamps on files vs the metadata to see if we need to update")
+ parser.add_option("-d", "--database", default=False, action="store_true",
+ help="create sqlite database files")
+ parser.add_option("--update", default=False, action="store_true",
+ help="use the existing repodata to speed up creation of new")
+ parser.add_option("--skip-stat", dest='skip_stat', default=False, action="store_true",
+ help="skip the stat() call on a --update, assumes if the file" \
+ "name is the same then the file is still the same" \
+ "(only use this if you're fairly trusting or gullible)" )
+ parser.add_option("--split", default=False, action="store_true",
+ help="generate split media")
+ parser.add_option("-i", "--pkglist", default=None,
+ help="use only the files listed in this file from the directory specified")
+ parser.add_option("-o", "--outputdir", default=None,
+ help="<dir> = optional directory to output to")
parser.add_option("-S", "--skip-symlinks", dest="skip_symlinks",
- default=False, action="store_true")
+ default=False, action="store_true",
+ help="ignore symlinks of packages")
(opts, argsleft) = parser.parse_args()
if len(argsleft) > 1 and not opts.split:
More information about the Rpm-metadata
mailing list