Hello community,
here is the log from the commit of package createrepo
checked in at Sat Aug 12 19:01:14 CEST 2006.
--------
--- createrepo/createrepo.changes 2006-05-24 00:49:09.000000000 +0200
+++ createrepo/createrepo.changes 2006-08-11 22:52:32.000000000 +0200
@@ -1,0 +2,23 @@
+Fri Aug 11 22:46:27 CEST 2006 - cthiel@suse.de
+
+- update to version 0.4.6
+ * Patch from Hans-Peter Jansen -C, --checkts option added
+ to avoid metadata generation, if ctime filestamps are up to date. It's
+ currently mutually exclusive with the --split option.
+ * Fix cache output dir to 0.4.5 behaviour
+ * Fix filtering out path from file list and passing correct path to
+ writeMetaData
+ * Make splitmetadata handler do it' own getFileList to correctly
+ manipulate paths.
+ * Set outputdir correctly
+ * Move to split basedir and directory everywhere to preserve command line
+ paths. Use os.path.walk rather than our own implementation Improve
+ error messages
+ * Consistent directory handling and errors
+ * Patch from Hans-Peter Jansen to use a more robust rpm header signature
+ retrieval method for cache files, as recommended by Jeff Johnson.
+ * Tolerate unknown files in repodata dirs
+ * patch to support --noepoch for use with old versions of rpm
+- remove python-urlgrabber dependency
+
+-------------------------------------------------------------------
Old:
----
createrepo-0.4.4.tar.bz2
New:
----
createrepo-0.4.6.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ createrepo.spec ++++++
--- /var/tmp/diff_new_pack.RA723V/_old 2006-08-12 19:01:00.000000000 +0200
+++ /var/tmp/diff_new_pack.RA723V/_new 2006-08-12 19:01:00.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package createrepo (Version 0.4.4)
+# spec file for package createrepo (Version 0.4.6)
#
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -12,14 +12,14 @@
Name: createrepo
BuildRequires: python
-Version: 0.4.4
-Release: 9
+Version: 0.4.6
+Release: 1
License: GPL
Summary: Creates a Common Metadata Repository
Group: System/Packages
Source: %{name}-%{version}.tar.bz2
Patch: missing-tags.patch
-Patch1: %{name}-%{version}-suse-changelogs.patch
+Patch1: %{name}-0.4.4-suse-changelogs.patch
Patch2: license-to-confirm.patch
URL: http://linux.duke.edu/metadata/
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -27,7 +27,6 @@
Requires: rpm >= 4.1.1
Requires: rpm-python
Requires: libxml2-python
-Requires: python-urlgrabber
%py_requires
@@ -62,6 +61,26 @@
%{_datadir}/%{name}/*
%changelog -n createrepo
+* Fri Aug 11 2006 - cthiel@suse.de
+- update to version 0.4.6
+ * Patch from Hans-Peter Jansen -C, --checkts option added
+ to avoid metadata generation, if ctime filestamps are up to date. It's
+ currently mutually exclusive with the --split option.
+ * Fix cache output dir to 0.4.5 behaviour
+ * Fix filtering out path from file list and passing correct path to
+ writeMetaData
+ * Make splitmetadata handler do it' own getFileList to correctly
+ manipulate paths.
+ * Set outputdir correctly
+ * Move to split basedir and directory everywhere to preserve command line
+ paths. Use os.path.walk rather than our own implementation Improve
+ error messages
+ * Consistent directory handling and errors
+ * Patch from Hans-Peter Jansen to use a more robust rpm header signature
+ retrieval method for cache files, as recommended by Jeff Johnson.
+ * Tolerate unknown files in repodata dirs
+ * patch to support --noepoch for use with old versions of rpm
+- remove python-urlgrabber dependency
* Wed May 24 2006 - cthiel@suse.de
- added license-to-confirm.patch (by Jose Mercado )
* adds license-to-confirm element for packages which have EULAs
++++++ createrepo-0.4.4.tar.bz2 -> createrepo-0.4.6.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/createrepo-0.4.4/ChangeLog new/createrepo-0.4.6/ChangeLog
--- old/createrepo-0.4.4/ChangeLog 2006-03-04 07:30:50.000000000 +0100
+++ new/createrepo-0.4.6/ChangeLog 2006-08-11 22:17:26.000000000 +0200
@@ -1,3 +1,140 @@
+2006-08-11 16:03 pnasrat
+
+ * createrepo.spec: update date
+
+2006-08-11 16:01 pnasrat
+
+ * genpkgmetadata.py, docs/createrepo.8: Patch from Hans-Peter
+ Jansen -C, --checkts option added to avoid
+ metadata generation, if ctime filestamps are up to date. It's
+ currently mutually exclusive with the --split option.
+
+2006-07-28 15:49 pnasrat
+
+ * genpkgmetadata.py: Fix cache output dir to 0.4.5 behaviour
+
+2006-07-28 15:42 pnasrat
+
+ * genpkgmetadata.py: Fix filtering out path from file list and
+ passing correct path to writeMetaData
+
+2006-07-28 15:35 pnasrat
+
+ * test/: testMetaDataGenerator.py, testSplitMetaDataGenerator.py:
+ nuke tests for now
+
+2006-07-21 13:16 pnasrat
+
+ * Makefile: Bump
+
+2006-07-20 18:27 pnasrat
+
+ * genpkgmetadata.py: Make splitmetadata handler do it' own
+ getFileList to correctly manipulate paths.
+
+2006-07-20 18:22 pnasrat
+
+ * test/testSplitMetaDataGenerator.py: Improve tests for split cases
+
+2006-07-20 17:15 pnasrat
+
+ * test/testSplitMetaDataGenerator.py: duplicate for split tests
+
+2006-07-20 17:02 pnasrat
+
+ * test/testMetaDataGenerator.py: More consistent naming Relative
+ and parallel dir testing
+
+2006-07-20 16:34 pnasrat
+
+ * test/testMetaDataGenerator.py: Refactor tests, add additional
+ tests
+
+2006-07-20 16:09 pnasrat
+
+ * test/testMetaDataGenerator.py: Start unit testing so we don't
+ regress behaviour
+
+2006-07-20 13:33 pnasrat
+
+ * genpkgmetadata.py: Set outputdir correctly
+
+2006-07-20 13:20 pnasrat
+
+ * genpkgmetadata.py: Move to split basedir and directory everywhere
+ to preserve command line paths. Use os.path.walk rather than our
+ own implementation Improve error messages
+
+2006-07-19 15:43 pnasrat
+
+ * genpkgmetadata.py: Consistent directory handling and errors
+
+2006-07-19 15:43 pnasrat
+
+ * createrepo.spec: genpkgmetadata.py
+
+2006-07-19 15:25 pnasrat
+
+ * dumpMetadata.py: Patch from hpj@urpla.net to use a more robust
+ rpm header signature retrieval method for cache files, as
+ recommended by Jeff Johnson.
+
+2006-07-19 14:26 lmacken
+
+ * ChangeLog, createrepo.spec: 2006-07-19 14:23 lmacken
+
+ * createrepo.spec: remove python-urlgrabber dependency
+
+2006-07-19 08:29 pnasrat
+
+ * genpkgmetadata.py: Tolerate unknown files in repodata dirs -
+ Ville Skyttä
+
+2006-07-19 07:44 pnasrat
+
+ * genpkgmetadata.py: fix up relative paths (#199228)
+
+2006-06-30 08:53 pnasrat
+
+ * dumpMetadata.py: Fix srpm detection for rpm-4.4.6 and later
+
+2006-06-26 11:03 skvidal
+
+ * ChangeLog:
+ overwrite changelog
+
+2006-06-15 11:39 lmacken
+
+ * ChangeLog, genpkgmetadata.py, docs/createrepo.8: 2006-06-15 11:40
+ lmacken
+
+ * genpkgmetadata.py, docs/createrepo.8:
+ Revert --update-info-location patch, since yum now supports
+ arbitrary
+ metadata via YumRepository::retrieveMD()
+
+2006-06-09 09:49 skvidal
+
+ * dumpMetadata.py, genpkgmetadata.py:
+ include Panu's patch to support --noepoch for use with old
+ versions of rpm
+
+2006-06-09 09:47 skvidal
+
+ * createrepo.spec:
+ fix the dep
+
+2006-06-09 09:46 skvidal
+
+ * createrepo.spec, genpkgmetadata.py:
+ fix versions and bump by one.
+
+ Thanks to Gareth Armstrong for noticing this.
+
+2006-03-04 01:30 pnasrat
+
+ * ChangeLog: add changelog
+
2006-03-04 01:28 pnasrat
* createrepo.spec: release
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/createrepo-0.4.4/Makefile new/createrepo-0.4.6/Makefile
--- old/createrepo-0.4.4/Makefile 2006-03-04 07:30:50.000000000 +0100
+++ new/createrepo-0.4.6/Makefile 2006-08-11 22:17:26.000000000 +0200
@@ -1,5 +1,5 @@
PACKAGE = createrepo
-VERSION = 0.4.4
+VERSION = 0.4.6
SHELL = /bin/sh
top_srcdir = .
srcdir = .
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/createrepo-0.4.4/createrepo.spec new/createrepo-0.4.6/createrepo.spec
--- old/createrepo-0.4.4/createrepo.spec 2006-03-04 07:30:50.000000000 +0100
+++ new/createrepo-0.4.6/createrepo.spec 2006-08-11 22:17:26.000000000 +0200
@@ -1,6 +1,6 @@
Summary: Creates a common metadata repository
Name: createrepo
-Version: 0.4.4
+Version: 0.4.6
Release: 1
License: GPL
Group: System Environment/Base
@@ -34,6 +34,15 @@
%{_mandir}/man8/createrepo.8*
%changelog
+* Fri Aug 11 2006 Paul Nasrat
+- 0.4.6
+
+* Wed Jul 19 2006 Luke Macken
+- Remove python-urlgrabber dependency
+
+* Fri Jun 9 2006 Seth Vidal <skvidal at linux.duke.edu>
+- 0.4.5
+
* Sat Mar 04 2006 Paul Nasrat
- 0.4.4
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/createrepo-0.4.4/docs/createrepo.8 new/createrepo-0.4.6/docs/createrepo.8
--- old/createrepo-0.4.4/docs/createrepo.8 2006-03-04 07:30:50.000000000 +0100
+++ new/createrepo-0.4.6/docs/createrepo.8 2006-08-11 22:17:27.000000000 +0200
@@ -32,13 +32,16 @@
createrepo over the same repository of files that do not have a complete
change out of all packages this decreases the processing time dramatically.
.br
+.IP "\fB\-C --checkts\fP"
+Don't generate repo metadata, if their timestamps are newer than its rpms.
+This option decreases the processing time drastically again, if you happen
+to run it on an unmodified repo, but it is (currently) mutual exclusive
+with the --split option.
+.br
.IP "\fB\--split\fP"
Run in split media mode. Rather than pass a single directory, take a set of
directories corresponding to different volumes in a media set.
.br
-.IP "\fB\-U --update-info-location\fP <url>"
-Query a specified server for package update metadata.
-.br
.IP "\fB\-p --pretty\fP"
Output xml files in pretty format.
.IP "\fB\-V --version\fP"
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/createrepo-0.4.4/dumpMetadata.py new/createrepo-0.4.6/dumpMetadata.py
--- old/createrepo-0.4.4/dumpMetadata.py 2006-03-04 07:30:50.000000000 +0100
+++ new/createrepo-0.4.6/dumpMetadata.py 2006-08-11 22:17:26.000000000 +0200
@@ -16,7 +16,7 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Copyright 2004 Duke University
-# $Id: dumpMetadata.py,v 1.36 2006/02/21 20:10:08 pnasrat Exp $
+# $Id: dumpMetadata.py,v 1.39 2006/07/19 19:25:08 pnasrat Exp $
import os
import rpm
@@ -225,6 +225,10 @@
raise MDError, "Error Stat'ing file %s %s" % (basedir, filename)
self.options = options
self.localurl = options['baseurl']
+ if options['noepoch']:
+ self.noepoch = ""
+ else:
+ self.noepoch = 0
self.relativepath = filename
fd = returnFD(os.path.join(basedir, filename))
self.hdr = returnHdr(ts, fd)
@@ -256,7 +260,7 @@
self.genFileLists()
def arch(self):
- if self.tagByName('sourcepackage') == 1:
+ if self.tagByName('sourcepackage') == 1 or not self.tagByName('sourcerpm'):
return 'src'
else:
return self.tagByName('arch')
@@ -323,7 +327,7 @@
if i != -1:
epoch = strng[:i]
else:
- epoch = '0'
+ epoch = self.noepoch
j = strng.find('-')
if j != -1:
if strng[i + 1:j] == '':
@@ -438,7 +442,7 @@
def epoch(self):
if self.hdr['epoch'] is None:
- return 0
+ return self.noepoch
else:
return self.tagByName('epoch')
@@ -565,8 +569,11 @@
"""
if not self.options['cache']:
return getChecksum(self.options['sumtype'], fo)
-
- csumtag = '%s-%s' % (self.hdr['name'] , self.hdr[rpm.RPMTAG_SHA1HEADER])
+
+ key = "".join([hex(ord(x))[2:].zfill(2)
+ for x in tuple(self.hdr[rpm.RPMTAG_SIGMD5])])
+
+ csumtag = '%s-%s' % (self.hdr['name'] , key)
csumfile = '%s/%s' % (self.options['cachedir'], csumtag)
if os.path.exists(csumfile) and self.mtime <= os.stat(csumfile)[8]:
csumo = open(csumfile, 'r')
@@ -592,7 +599,8 @@
pkgNode.newChild(None, 'name', rpmObj.tagByName('name'))
pkgNode.newChild(None, 'arch', rpmObj.arch())
version = pkgNode.newChild(None, 'version', None)
- version.newProp('epoch', str(rpmObj.epoch()))
+ if str(rpmObj.epoch()):
+ version.newProp('epoch', str(rpmObj.epoch()))
version.newProp('ver', str(rpmObj.tagByName('version')))
version.newProp('rel', str(rpmObj.tagByName('release')))
csum = pkgNode.newChild(None, 'checksum', rpmObj.pkgid)
@@ -643,7 +651,7 @@
if flags == 12: arg = 'GE'
entry.newProp('flags', arg)
# if we've got a flag we've got a version, I hope :)
- if e:
+ if str(e):
entry.newProp('epoch', str(e))
if v:
entry.newProp('ver', str(v))
@@ -664,7 +672,7 @@
if flags == 12: arg = 'GE'
entry.newProp('flags', arg)
# if we've got a flag we've got a version, I hope :)
- if e:
+ if str(e):
entry.newProp('epoch', str(e))
if v:
entry.newProp('ver', str(v))
@@ -696,7 +704,8 @@
pkg.newProp('name', rpmObj.tagByName('name'))
pkg.newProp('arch', rpmObj.arch())
version = pkg.newChild(None, 'version', None)
- version.newProp('epoch', str(rpmObj.epoch()))
+ if str(rpmObj.epoch()):
+ version.newProp('epoch', str(rpmObj.epoch()))
version.newProp('ver', str(rpmObj.tagByName('version')))
version.newProp('rel', str(rpmObj.tagByName('release')))
for file in rpmObj.filenames:
@@ -721,7 +730,8 @@
pkg.newProp('name', rpmObj.tagByName('name'))
pkg.newProp('arch', rpmObj.arch())
version = pkg.newChild(None, 'version', None)
- version.newProp('epoch', str(rpmObj.epoch()))
+ if str(rpmObj.epoch()):
+ version.newProp('epoch', str(rpmObj.epoch()))
version.newProp('ver', str(rpmObj.tagByName('version')))
version.newProp('rel', str(rpmObj.tagByName('release')))
clogs = rpmObj.changelogLists()
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/createrepo-0.4.4/genpkgmetadata.py new/createrepo-0.4.6/genpkgmetadata.py
--- old/createrepo-0.4.4/genpkgmetadata.py 2006-03-04 07:30:50.000000000 +0100
+++ new/createrepo-0.4.6/genpkgmetadata.py 2006-08-11 22:17:26.000000000 +0200
@@ -17,7 +17,7 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Copyright 2004 Duke University
-# $Id: genpkgmetadata.py,v 1.51 2006/02/21 23:30:26 pnasrat Exp $
+# $Id: genpkgmetadata.py,v 1.63 2006/08/11 20:01:38 pnasrat Exp $
import os
@@ -27,11 +27,11 @@
import libxml2
import string
import fnmatch
-import urlgrabber
+import shutil
import dumpMetadata
from dumpMetadata import _gzipOpen
-__version__ = '0.4.3'
+__version__ = '0.4.6'
def errorprint(stuff):
print >> sys.stderr, stuff
@@ -49,11 +49,15 @@
-o, --outputdir <dir> = optional directory to output to
-x, --exclude = files globs to exclude, can be specified multiple times
-q, --quiet = run quietly
+ -n, --noepoch = don't add zero epochs for non-existent epochs
+ (incompatible with yum and smart but required for
+ systems with rpm < 4.2.1)
-g, --groupfile <filename> to point to for group information (precreated)
(<filename> relative to directory-of-packages)
-v, --verbose = run verbosely
-c, --cachedir <dir> = specify which dir to use for the checksum cache
- -U, --update-info-location <url> = acquire package update metadata
+ -C, --checkts = don't generate repo metadata, if their ctimes are newer
+ than the rpm ctimes.
-h, --help = show this help
-V, --version = output version
-p, --pretty = output xml files in pretty format.
@@ -68,32 +72,37 @@
self.pkgcount = 0
self.files = []
- def getFileList(self, basepath, path, ext, filelist):
+ def getFileList(self, basepath, directory, ext):
"""Return all files in path matching ext, store them in filelist,
recurse dirs. Returns a list object"""
extlen = len(ext)
- totalpath = os.path.normpath(os.path.join(basepath, path))
- try:
- dir_list = os.listdir(totalpath)
- except OSError, e:
- errorprint(_('Error accessing directory %s, %s') % (totalpath, e))
- sys.exit(1)
-
- for d in dir_list:
- if os.path.isdir(totalpath + '/' + d):
- filelist = self.getFileList(basepath, os.path.join(path, d), ext, filelist)
- else:
- if string.lower(d[-extlen:]) == '%s' % (ext):
- if totalpath.find(basepath) == 0:
- relativepath = totalpath.replace(basepath, "", 1)
- relativepath = relativepath.lstrip("/")
- filelist.append(os.path.join(relativepath, d))
- else:
- raise "basepath '%s' not found in path '%s'" % (basepath, totalpath)
+ def extension_visitor(filelist, dirname, names):
+ for fn in names:
+ if os.path.isdir(fn):
+ continue
+ elif fn[-extlen:].lower() == '%s' % (ext):
+ relativepath = dirname.replace(startdir, "", 1)
+ relativepath = relativepath.lstrip("/")
+ filelist.append(os.path.join(relativepath,fn))
+
+ filelist = []
+ startdir = os.path.join(basepath, directory) + '/'
+ os.path.walk(startdir, extension_visitor, filelist)
return filelist
+ def checkTimeStamps(self, directory):
+ if self.cmds['checkts']:
+ files = self.getFileList(self.cmds['basedir'], directory, '.rpm')
+ files = self.trimRpms(files)
+ for f in files:
+ fn = os.path.join(self.cmds['basedir'], directory, f)
+ if not os.path.exists(fn):
+ errorprint(_('cannot get to file: %s') % fn)
+ if os.path.getctime(fn) > self.cmds['mdtimestamp']:
+ return False
+ return True
def trimRpms(self, files):
badrpms = []
@@ -112,11 +121,11 @@
"""all the heavy lifting for the package metadata"""
# rpms we're going to be dealing with
- files = self.getFileList(self.cmds['basedir'], directory, '.rpm', [])
+ files = self.getFileList(self.cmds['basedir'], directory, '.rpm')
files = self.trimRpms(files)
self.pkgcount = len(files)
self.openMetadataDocs()
- self.writeMetadataDocs(files)
+ self.writeMetadataDocs(files, directory)
self.closeMetadataDocs()
@@ -162,11 +171,12 @@
self.otherfile.write('<otherdata xmlns="http://linux.duke.edu/metadata/other" packages="%s">\n' %
self.pkgcount)
- def writeMetadataDocs(self, files, current=0):
+ def writeMetadataDocs(self, files, directory, current=0):
for file in files:
current+=1
try:
- mdobj = dumpMetadata.RpmMetaData(self.ts, self.cmds['basedir'], file, self.cmds)
+ rpmdir= os.path.join(self.cmds['basedir'], directory)
+ mdobj = dumpMetadata.RpmMetaData(self.ts, rpmdir, file, self.cmds)
if not self.cmds['quiet']:
if self.cmds['verbose']:
print '%d/%d - %s' % (current, len(files), file)
@@ -184,29 +194,6 @@
errorprint(_('\nAn error occurred creating primary metadata: %s') % e)
continue
else:
- try:
- # Fetch the update metadata for this package
- if self.cmds['update-info-location']:
- metadata = urlgrabber.urlopen(
- self.cmds['update-info-location'] +
- '?pkg=%s' % file)
- filename = file.replace('.rpm', '.xml')
- metadata.filename = os.path.join(
- self.cmds['basedir'], self.cmds['tempdir'],
- self.cmds['update-info-dir'], filename)
- metadata._do_grab()
- metadata.close()
-
- # Get the update ID from the metadata
- md = libxml2.parseFile(metadata.filename)
- update_root = md.children
- update = node.newChild(None, 'update', None)
- update.newProp('id', update_root.prop('id'))
- update.newProp('location', os.path.join(
- self.cmds['update-info-dir'], filename))
- del md, metadata
- except Exception, e:
- pass
output = node.serialize('UTF-8', self.cmds['pretty'])
self.basefile.write(output)
self.basefile.write('\n')
@@ -291,7 +278,6 @@
def __init__(self, cmds):
MetaDataGenerator.__init__(self, cmds)
- self.initialdir = self.cmds['basedir']
def _getFragmentUrl(self, url, fragment):
import urlparse
@@ -301,6 +287,25 @@
(scheme, netloc, path, query, fragid) = urlparse.urlsplit(url)
return urlparse.urlunsplit((scheme, netloc, path, query, str(fragment)))
+ def getFileList(self, basepath, directory, ext):
+
+ extlen = len(ext)
+
+ def extension_visitor(arg, dirname, names):
+ for fn in names:
+ if os.path.isdir(fn):
+ continue
+ elif string.lower(fn[-extlen:]) == '%s' % (ext):
+ reldir = os.path.basename(dirname)
+ if reldir == os.path.basename(directory):
+ reldir = ""
+ arg.append(os.path.join(reldir,fn))
+
+ rpmlist = []
+ startdir = os.path.join(basepath, directory)
+ os.path.walk(startdir, extension_visitor, rpmlist)
+ return rpmlist
+
def doPkgMetadata(self, directories):
"""all the heavy lifting for the package metadata"""
import types
@@ -309,21 +314,19 @@
return
filematrix = {}
for mydir in directories:
- filematrix[mydir] = self.getFileList(os.path.join(self.initialdir, mydir), '.', '.rpm', [])
+ filematrix[mydir] = self.getFileList(self.cmds['basedir'], mydir, '.rpm')
self.trimRpms(filematrix[mydir])
self.pkgcount += len(filematrix[mydir])
mediano = 1
current = 0
self.cmds['baseurl'] = self._getFragmentUrl(self.cmds['baseurl'], mediano)
- self.cmds['basedir'] = os.path.join(self.initialdir, directories[0])
self.openMetadataDocs()
+ original_basedir = self.cmds['basedir']
for mydir in directories:
- self.cmds['basedir'] = os.path.join(self.initialdir, mydir)
self.cmds['baseurl'] = self._getFragmentUrl(self.cmds['baseurl'], mediano)
- current = self.writeMetadataDocs(filematrix[mydir], current)
+ current = self.writeMetadataDocs(filematrix[mydir], mydir, current)
mediano += 1
- self.cmds['basedir'] = os.path.join(self.initialdir, directories[0])
self.cmds['baseurl'] = self._getFragmentUrl(self.cmds['baseurl'], 1)
self.closeMetadataDocs()
@@ -364,22 +367,25 @@
cmds['baseurl'] = None
cmds['groupfile'] = None
cmds['sumtype'] = 'sha'
+ cmds['noepoch'] = False
cmds['pretty'] = 0
# cmds['updategroupsonly'] = 0
cmds['cachedir'] = None
cmds['basedir'] = os.getcwd()
cmds['cache'] = False
+ cmds['checkts'] = False
+ cmds['mdtimestamp'] = 0
cmds['split'] = False
cmds['outputdir'] = ""
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:c:U:o:', ['help', 'exclude=',
+ gopts, argsleft = getopt.getopt(args, 'phqVvng:s:x:u:c:o:C', ['help', 'exclude=',
'quiet', 'verbose', 'cachedir=', 'basedir=',
'baseurl=', 'groupfile=', 'checksum=',
'version', 'pretty', 'split', 'outputdir=',
- 'update-info-location='])
+ 'noepoch', 'checkts'])
except getopt.error, e:
errorprint(_('Options Error: %s.') % e)
usage()
@@ -437,30 +443,35 @@
elif arg in ['-c', '--cachedir']:
cmds['cache'] = True
cmds['cachedir'] = a
- elif arg in ['-U', '--update-info-location']:
- cmds['update-info-location'] = a
+ elif arg in ['-C', '--checkts']:
+ cmds['checkts'] = True
elif arg == '--basedir':
cmds['basedir'] = a
elif arg in ['-o','--outputdir']:
cmds['outputdir'] = a
+ elif arg in ['-n', '--noepoch']:
+ cmds['noepoch'] = True
except ValueError, e:
errorprint(_('Options Error: %s') % e)
usage()
+ if cmds['split'] and cmds['checkts']:
+ errorprint(_('--split and --checkts options are mutually exclusive'))
+ sys.exit(1)
+
directory = directories[0]
-# Fix paths
+#
directory = os.path.normpath(directory)
if cmds['split']:
pass
elif os.path.isabs(directory):
- cmds['basedir'] = directory
- directory = '.'
+ cmds['basedir'] = os.path.dirname(directory)
+ directory = os.path.basename(directory)
else:
- cmds['basedir'] = os.path.realpath(os.path.join(cmds['basedir'], directory))
- directory = '.'
+ cmds['basedir'] = os.path.realpath(cmds['basedir'])
if not cmds['outputdir']:
- cmds['outputdir'] = cmds['basedir']
+ cmds['outputdir'] = os.path.join(cmds['basedir'], directory)
if cmds['groupfile']:
a = cmds['groupfile']
if cmds['split']:
@@ -474,7 +485,7 @@
if cmds['cachedir']:
a = cmds ['cachedir']
if not os.path.isabs(a):
- a = os.path.join(cmds['basedir'] ,a)
+ a = os.path.join(cmds['outputdir'] ,a)
if not checkAndMakeDir(a):
errorprint(_('Error: cannot open/write to cache dir %s' % a))
usage()
@@ -488,24 +499,27 @@
cmds['tempdir'] = '.repodata'
cmds['finaldir'] = 'repodata'
cmds['olddir'] = '.olddata'
- cmds['update-info-dir'] = 'update-info'
+ # Fixup first directory
+ directories[0] = directory
return cmds, directories
def main(args):
cmds, directories = parseArgs(args)
directory = directories[0]
+ testdir = os.path.realpath(os.path.join(cmds['basedir'], directory))
# start the sanity/stupidity checks
- if not os.path.exists(os.path.join(cmds['basedir'], directory)):
- errorprint(_('Directory must exist'))
+ if not os.path.exists(testdir):
+ errorprint(_('Directory %s must exist') % (directory,))
sys.exit(1)
- if not os.path.isdir(os.path.join(cmds['basedir'], directory)):
- errorprint(_('Directory of packages must be a directory.'))
+ if not os.path.isdir(testdir):
+ errorprint(_('%s - must be a directory')
+ % (directory,))
sys.exit(1)
if not os.access(cmds['outputdir'], os.W_OK):
- errorprint(_('Directory must be writable.'))
+ errorprint(_('Directory %s must be writable.') % (cmds['outputdir'],))
sys.exit(1)
if cmds['split']:
@@ -521,12 +535,6 @@
errorprint(_('Old data directory exists, please remove: %s') % cmds['olddir'])
sys.exit(1)
- if cmds.has_key('update-info-location'):
- if not checkAndMakeDir(os.path.join(cmds['basedir'],
- cmds['tempdir'], cmds['update-info-dir'])):
- errorprint(_('Error: cannot open/write to update info dir %s' % a))
- usage()
-
# make sure we can write to where we want to write to:
for direc in ['tempdir', 'finaldir']:
for file in ['primaryfile', 'filelistsfile', 'otherfile', 'repomdfile']:
@@ -535,13 +543,21 @@
if not os.access(filepath, os.W_OK):
errorprint(_('error in must be able to write to metadata files:\n -> %s') % filepath)
usage()
-
+ if cmds['checkts']:
+ ts = os.path.getctime(filepath)
+ if ts > cmds['mdtimestamp']:
+ cmds['mdtimestamp'] = ts
+
if cmds['split']:
cmds['basedir'] = oldbase
mdgen = SplitMetaDataGenerator(cmds)
mdgen.doPkgMetadata(directories)
else:
mdgen = MetaDataGenerator(cmds)
+ if cmds['checkts'] and mdgen.checkTimeStamps(directory):
+ if cmds['verbose']:
+ print _('repo is up to date')
+ sys.exit(0)
mdgen.doPkgMetadata(directory)
mdgen.doRepoMetadata()
@@ -578,13 +594,30 @@
errorprint(_('Error was %s') % e)
sys.exit(1)
- # Clean up any update metadata
- mdpath = os.path.join(cmds['basedir'], cmds['olddir'], cmds['update-info-dir'])
- if os.path.isdir(mdpath):
- for file in os.listdir(mdpath):
- os.remove(os.path.join(mdpath, file))
- os.rmdir(mdpath)
-
+ # Move everything else back from olddir (eg. repoview files)
+ olddir = os.path.join(cmds['outputdir'], cmds['olddir'])
+ finaldir = os.path.join(cmds['outputdir'], cmds['finaldir'])
+ for file in os.listdir(olddir):
+ oldfile = os.path.join(olddir, file)
+ finalfile = os.path.join(finaldir, file)
+ if os.path.exists(finalfile):
+ # Hmph? Just leave it alone, then.
+ try:
+ if os.path.isdir(oldfile):
+ shutil.rmtree(oldfile)
+ else:
+ os.remove(oldfile)
+ except OSError, e:
+ errorprint(_('Could not remove old non-metadata file: %s') % oldfile)
+ errorprint(_('Error was %s') % e)
+ sys.exit(1)
+ else:
+ try:
+ os.rename(oldfile, finalfile)
+ except OSError, e:
+ errorprint(_('Could not restore old non-metadata file: %s -> %s') % (oldfile, finalfile))
+ errorprint(_('Error was %s') % e)
+ sys.exit(1)
#XXX: fix to remove tree as we mung basedir
try:
++++++ license-to-confirm.patch ++++++
--- /var/tmp/diff_new_pack.RA723V/_old 2006-08-12 19:01:01.000000000 +0200
+++ /var/tmp/diff_new_pack.RA723V/_new 2006-08-12 19:01:01.000000000 +0200
@@ -1,13 +1,3 @@
---- ChangeLog 2006-05-19 15:54:09.000000000 -0500
-+++ ChangeLog 2006-05-19 15:54:14.000000000 -0500
-@@ -1,3 +1,7 @@
-+2006-05-17 23:31 Jose Mercado
-+ * dumpMetadata.py, getpkgmetadata.py:
-+ added license-to-confirm element for packages which have EULAs
-+
- 2006-03-04 01:28 pnasrat
-
- * createrepo.spec: release
--- dumpMetadata.py 2006-05-19 15:54:08.000000000 -0500
+++ dumpMetadata.py 2006-05-19 17:39:36.000000000 -0500
@@ -18,6 +18,7 @@
@@ -57,14 +47,6 @@
value = rpmObj.tagByName(tag)
--- genpkgmetadata.py 2006-05-19 15:54:11.000000000 -0500
+++ genpkgmetadata.py 2006-05-19 17:32:58.000000000 -0500
-@@ -88,6 +88,7 @@
- if totalpath.find(basepath) == 0:
- relativepath = totalpath.replace(basepath, "", 1)
- relativepath = relativepath.lstrip("/")
-+ print os.path.join(relativepath, d)
- filelist.append(os.path.join(relativepath, d))
- else:
- raise "basepath '%s' not found in path '%s'" % (basepath, totalpath)
@@ -131,11 +132,12 @@
self.baseroot = self.basedoc.newChild(None, "metadata", None)
basens = self.baseroot.newNs('http://linux.duke.edu/metadata/common', None)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...