[PATCH] createrepo openSUSE patches
Duncan Mac-Vicar Prett <[email protected]>
| Newsgroups | gmane.linux.rpm.metadata |
|---|---|
| Message-ID | <[email protected]> |
Attached. I guess the license-to-confirm patch can be ignored as that should go in the distribution specific data in the future. Duncan _______________________________________________ Rpm-metadata mailing list [email protected] https://lists.dulug.duke.edu/mailman/listinfo/rpm-metadata
createrepo-0.4.8-cache_utime.patch
(text/x-patch, 350 B)
--- dumpMetadata.py
+++ dumpMetadata.py
@@ -614,7 +614,7 @@
csumo = open(csumfile, 'r')
checksum = csumo.readline()
csumo.close()
-
+ os.path.os.utime(csumfile, None)
else:
checksum = getChecksum(self.options['sumtype'], fo)
csumo = open(csumfile, 'w')
createrepo-0.4.10-cachefix.patch
(text/x-patch, 565 B)
--- dumpMetadata.py
+++ dumpMetadata.py
@@ -603,8 +603,8 @@
t.append("".join(self.hdr[rpm.RPMTAG_SIGGPG]))
if type(self.hdr[rpm.RPMTAG_SIGPGP]) is not types.NoneType:
t.append("".join(self.hdr[rpm.RPMTAG_SIGPGP]))
- if type(self.hdr[rpm.RPMTAG_HDRID]) is not types.NoneType:
- t.append("".join(self.hdr[rpm.RPMTAG_HDRID]))
+ if type(self.hdr[rpm.RPMTAG_SHA1HEADER]) is not types.NoneType:
+ t.append("".join(self.hdr[rpm.RPMTAG_SHA1HEADER]))
key = md5.new("".join(t)).hexdigest()
createrepo-0.4.10-fixsymlinks.patch
(text/x-patch, 1.9 KB)
--- createrepo/genpkgmetadata.py.20070803 2007-06-07 06:33:34.000000000 -0400
+++ createrepo/genpkgmetadata.py 2007-08-03 15:36:17.000000000 -0400
@@ -83,11 +83,15 @@
def extension_visitor(filelist, dirname, names):
for fn in names:
- if os.path.isdir(fn):
+ if os.path.islink(dirname + '/' + fn):
+ if self.cmds['skip-symlinks']:
+ continue
+ elif os.path.isdir(dirname + '/' + fn):
+ os.path.walk(dirname + '/' + fn, extension_visitor, filelist)
+ continue
+ elif os.path.isdir(dirname + '/' + fn):
continue
- if self.cmds['skip-symlinks'] and os.path.islink(fn):
- continue
- elif fn[-extlen:].lower() == '%s' % (ext):
+ if fn[-extlen:].lower() == '%s' % (ext):
relativepath = dirname.replace(startdir, "", 1)
relativepath = relativepath.lstrip("/")
filelist.append(os.path.join(relativepath,fn))
@@ -325,9 +329,15 @@
def extension_visitor(arg, dirname, names):
for fn in names:
- if os.path.isdir(fn):
+ if os.path.islink(dirname + '/' + fn):
+ if self.cmds['skip-symlinks']:
+ continue
+ elif os.path.isdir(dirname + '/' + fn):
+ os.path.walk(dirname + '/' + fn, extension_visitor, arg)
+ continue
+ elif os.path.isdir(dirname + '/' + fn):
continue
- elif string.lower(fn[-extlen:]) == '%s' % (ext):
+ if string.lower(fn[-extlen:]) == '%s' % (ext):
reldir = os.path.basename(dirname)
if reldir == os.path.basename(directory):
reldir = ""
createrepo-license-to-confirm.patch
(text/x-patch, 3.1 KB)
--- dumpMetadata.py
+++ dumpMetadata.py
@@ -18,6 +18,7 @@
# $Id$
+import glob
import os
import rpm
import exceptions
@@ -629,7 +630,7 @@
-def generateXML(doc, node, formatns, rpmObj, sumtype):
+def generateXML(doc, node, formatns, susens, rpmObj, sumtype):
"""takes an xml doc object and a package metadata entry node, populates a
package node with the md information"""
ns = node.ns()
@@ -663,6 +664,27 @@
if rpmObj.localurl is not None:
location.newProp('xml:base', rpmObj.localurl)
location.newProp('href', rpmObj.relativepath)
+
+ eulas = glob.glob("%s.eula.*" % os.path.join(rpmObj.options['basedir'], rpmObj.relativepath))
+ if eulas is not None:
+ for eula in eulas:
+ match = re.match("(.*eula)\.(.*)", eula)
+ lang = match.group(2)
+
+ eulaContent = None
+
+ try:
+ fd = open(eula, "r")
+ eulaContent = fd.read()
+ fd.close()
+ except IOError:
+ raise MDError, "Failed read contents of %s" % eula
+
+ if eulaContent is not None:
+ eulaNode = pkgNode.newChild(susens, 'license-to-confirm', None)
+ eulaNode.newProp('lang', lang)
+ eulaNode.addContent(utf8String(eulaContent))
+
format = pkgNode.newChild(ns, 'format', None)
for tag in ['license', 'vendor', 'group', 'buildhost', 'sourcerpm']:
value = rpmObj.tagByName(tag)
--- genpkgmetadata.py
+++ genpkgmetadata.py
@@ -181,11 +181,12 @@
self.baseroot = self.basedoc.newChild(None, "metadata", None)
basens = self.baseroot.newNs('http://linux.duke.edu/metadata/common', None)
self.formatns = self.baseroot.newNs('http://linux.duke.edu/metadata/rpm', 'rpm')
+ self.susens = self.baseroot.newNs('http://novell.com/package/metadata/suse/common', 'suse')
self.baseroot.setNs(basens)
basefilepath = os.path.join(self.cmds['outputdir'], self.cmds['tempdir'], self.cmds['primaryfile'])
self.basefile = _gzipOpen(basefilepath, 'w')
self.basefile.write('<?xml version="1.0" encoding="UTF-8"?>\n')
- self.basefile.write('<metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="%s">\n' %
+ self.basefile.write('<metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" xmlns:suse="http://novell.com/package/metadata/suse/common" packages="%s">\n' %
self.pkgcount)
def _setupFilelists(self):
@@ -223,7 +224,7 @@
errorprint('\n%s - %s' % (e, file))
return None
try:
- basenode = dumpMetadata.generateXML(self.basedoc, self.baseroot, self.formatns, mdobj, self.cmds['sumtype'])
+ basenode = dumpMetadata.generateXML(self.basedoc, self.baseroot, self.formatns, self.susens, mdobj, self.cmds['sumtype'])
except dumpMetadata.MDError, e:
errorprint(_('\nAn error occurred creating primary metadata: %s') % e)
return None
createrepo-missing-tags.patch
(text/x-patch, 4.8 KB)
--- dumpMetadata.py
+++ dumpMetadata.py
@@ -267,14 +267,10 @@
return returnflags
if type(flags) is not types.ListType:
- newflag = flags & 0xf
- returnflags.append(newflag)
+ returnflags.append(flags)
else:
for flag in flags:
- newflag = flag
- if flag is not None:
- newflag = flag & 0xf
- returnflags.append(newflag)
+ returnflags.append(flag)
return returnflags
def _checkPreReq(self, flags):
@@ -516,36 +512,48 @@
lst = zip(names, flags, ver, prereq)
return self._uniq(lst)
- def obsoletesList(self):
+ def tagsList(self, name, flags, version):
lst = []
- names = self.hdr[rpm.RPMTAG_OBSOLETENAME]
- tmpflags = self.hdr[rpm.RPMTAG_OBSOLETEFLAGS]
+ names = self.hdr[name]
+ tmpflags = self.hdr[flags]
flags = self._correctFlags(tmpflags)
- ver = self._correctVersion(self.hdr[rpm.RPMTAG_OBSOLETEVERSION])
+ ver = self._correctVersion(self.hdr[version])
if names is not None:
lst = zip(names, flags, ver)
return self._uniq(lst)
+ def obsoletesList(self):
+ return self.tagsList(rpm.RPMTAG_OBSOLETENAME, rpm.RPMTAG_OBSOLETEFLAGS,
+ rpm.RPMTAG_OBSOLETEVERSION)
+
def conflictsList(self):
- lst = []
- names = self.hdr[rpm.RPMTAG_CONFLICTNAME]
- tmpflags = self.hdr[rpm.RPMTAG_CONFLICTFLAGS]
- flags = self._correctFlags(tmpflags)
- ver = self._correctVersion(self.hdr[rpm.RPMTAG_CONFLICTVERSION])
- if names is not None:
- lst = zip(names, flags, ver)
- return self._uniq(lst)
+ return self.tagsList(rpm.RPMTAG_CONFLICTNAME, rpm.RPMTAG_CONFLICTFLAGS,
+ rpm.RPMTAG_CONFLICTVERSION)
def providesList(self):
- lst = []
- names = self.hdr[rpm.RPMTAG_PROVIDENAME]
- tmpflags = self.hdr[rpm.RPMTAG_PROVIDEFLAGS]
- flags = self._correctFlags(tmpflags)
- ver = self._correctVersion(self.hdr[rpm.RPMTAG_PROVIDEVERSION])
- if names is not None:
- lst = zip(names, flags, ver)
- return self._uniq(lst)
+ return self.tagsList(rpm.RPMTAG_PROVIDENAME, rpm.RPMTAG_PROVIDEFLAGS,
+ rpm.RPMTAG_PROVIDEVERSION)
+ def enhancesList(self):
+ lst = self.tagsList(rpm.RPMTAG_ENHANCESNAME, rpm.RPMTAG_ENHANCESFLAGS,
+ rpm.RPMTAG_ENHANCESVERSION)
+ return [ l for l in lst if not l[1] & rpm.RPMSENSE_STRONG ]
+
+ def supplementsList(self):
+ lst = self.tagsList(rpm.RPMTAG_ENHANCESNAME, rpm.RPMTAG_ENHANCESFLAGS,
+ rpm.RPMTAG_ENHANCESVERSION)
+ return [ l for l in lst if l[1] & rpm.RPMSENSE_STRONG ]
+
+ def suggestsList(self):
+ lst = self.tagsList(rpm.RPMTAG_SUGGESTSNAME, rpm.RPMTAG_SUGGESTSFLAGS,
+ rpm.RPMTAG_SUGGESTSVERSION)
+ return [ l for l in lst if not l[1] & rpm.RPMSENSE_STRONG ]
+
+ def recommendsList(self):
+ lst = self.tagsList(rpm.RPMTAG_SUGGESTSNAME, rpm.RPMTAG_SUGGESTSFLAGS,
+ rpm.RPMTAG_SUGGESTSVERSION)
+ return [ l for l in lst if l[1] & rpm.RPMSENSE_STRONG ]
+
def changelogLists(self):
lst = []
names = self.listTagByName('changelogname')
@@ -629,12 +637,18 @@
hr.newProp('end', str(rpmObj.rangeend))
for (lst, nodename) in [(rpmObj.providesList(), 'provides'),
(rpmObj.conflictsList(), 'conflicts'),
- (rpmObj.obsoletesList(), 'obsoletes')]:
+ (rpmObj.obsoletesList(), 'obsoletes'),
+ (rpmObj.enhancesList(), 'enhances'),
+ (rpmObj.supplementsList(), 'supplements'),
+ (rpmObj.suggestsList(), 'suggests'),
+ (rpmObj.recommendsList(), 'recommends')]:
if len(lst) > 0:
rpconode = format.newChild(formatns, nodename, None)
for (name, flags, (e,v,r)) in lst:
entry = rpconode.newChild(formatns, 'entry', None)
entry.newProp('name', name)
+ if flags is not None:
+ flags = flags & 0xf
if flags != 0:
if flags == 2: arg = 'LT'
if flags == 4: arg = 'GT'
@@ -656,6 +670,8 @@
for (name, flags, (e,v,r), prereq) in depsList:
entry = rpconode.newChild(formatns, 'entry', None)
entry.newProp('name', name)
+ if flags is not None:
+ flags = flags & 0xf
if flags != 0:
if flags == 2: arg = 'LT'
if flags == 4: arg = 'GT'
createrepo-suse-changelogs.patch
(text/x-patch, 474 B)
--- dumpMetadata.py
+++ dumpMetadata.py
@@ -744,7 +744,10 @@
for (name, time, text) in clogs:
clog = pkg.newChild(None, 'changelog', None)
clog.addContent(utf8String(text))
- clog.newProp('author', utf8String(name))
+ if name == '' or name[0] != '-':
+ clog.newProp('author', utf8String(name))
+ else:
+ clog.newProp('author', utf8String(name[2:]))
clog.newProp('date', str(time))
return pkg
modifyrepo-prettyxml.patch
(text/x-patch, 1.5 KB)
--- modifyrepo.py
+++ modifyrepo.py
@@ -92,16 +92,25 @@
## Build the metadata
root = self.doc.firstChild
+ root.appendChild(self.doc.createTextNode(" "))
data = self._insert_element(root, 'data', attrs={ 'type' : mdtype })
+ data.appendChild(self.doc.createTextNode("\n "))
+
self._insert_element(data, 'location',
attrs={ 'href' : 'repodata/' + mdname })
+ data.appendChild(self.doc.createTextNode("\n "))
self._insert_element(data, 'checksum', attrs={ 'type' : 'sha' },
text=sha.new(newmd).hexdigest())
+ data.appendChild(self.doc.createTextNode("\n "))
self._insert_element(data, 'timestamp',
text=str(os.stat(destmd).st_mtime))
+ data.appendChild(self.doc.createTextNode("\n "))
self._insert_element(data, 'open-checksum', attrs={ 'type' : 'sha' },
text=sha.new(md).hexdigest())
+ data.appendChild(self.doc.createTextNode("\n "))
+ root.appendChild(self.doc.createTextNode("\n"))
+
print " type =", mdtype
print " location =", 'repodata/' + mdname
print " checksum =", sha.new(newmd).hexdigest()
@@ -111,6 +120,7 @@
## Write the updated repomd.xml
outmd = file(self.repomdxml, 'w')
self.doc.writexml(outmd)
+ outmd.write("\n")
outmd.close()
print "Wrote:", self.repomdxml