diff --git a/createrepo.spec b/createrepo.spec
index 0d4bbd8..57a0196 100644
--- a/createrepo.spec
+++ b/createrepo.spec
@@ -11,7 +11,7 @@ URL: http://createrepo.baseurl.org/
BuildRoot: %{_tmppath}/%{name}-%{version}root
BuildArchitectures: noarch
Requires: python >= 2.1, rpm-python, rpm >= 0:4.1.1, libxml2-python
-Requires: yum-metadata-parser, yum >= 3.2.23
+Requires: yum-metadata-parser, yum >= 3.2.23, python-deltarpm
%description
This utility will generate a common metadata repository from a directory of
diff --git a/createrepo/__init__.py b/createrepo/__init__.py
index 4601a15..0ffe6cb 100644
--- a/createrepo/__init__.py
+++ b/createrepo/__init__.py
@@ -298,8 +298,8 @@ class MetaDataGenerator:
self.callback.errorlog(_('cannot get to file: %s') % fn)
if os.path.getctime(fn) > self.conf.mdtimestamp:
return False
- else:
- return True
+
+ return True
return False
@@ -543,6 +543,17 @@ class MetaDataGenerator:
(othernode, self.otherfile)):
if node is None:
break
+
+ if self.conf.baseurl:
+ anode = node.children
+ while anode is not None:
+ if anode.type != "element":
+ anode = anode.next
+ continue
+ if anode.name == "location":
+ anode.setProp('xml:base', self.conf.baseurl)
+ anode = anode.next
+
output = node.serialize('UTF-8', self.conf.pretty)
if output:
outfile.write(output)
diff --git a/createrepo/deltarpms.py b/createrepo/deltarpms.py
index 26a6715..d14d3fa 100644
--- a/createrepo/deltarpms.py
+++ b/createrepo/deltarpms.py
@@ -18,7 +18,7 @@
import os.path
import commands
from yum import misc
-import gzip
+import deltarpm
from utils import MDError
class DeltaRPMPackage:
@@ -44,17 +44,16 @@ class DeltaRPMPackage:
os.lseek(fd, 0, 0)
fo = os.fdopen(fd, 'rb')
self.csum = misc.checksum(self.csum_type, fo)
- fo.seek(int(self.po.hdrend))
- self._getOldInfo(fo)
del fo
del fd
+ self._getDRPMInfo(os.path.join(basedir, filename))
def _stringToNEVR(self, string):
i = string.rfind("-", 0, string.rfind("-")-1)
name = string[:i]
(epoch, ver, rel) = self._stringToVersion(string[i+1:])
return (name, epoch, ver, rel)
-
+
def _getLength(self, in_data):
length = 0
for val in in_data:
@@ -62,27 +61,12 @@ class DeltaRPMPackage:
length += ord(val)
return length
- def _getOldInfo(self, fo):
- try:
- compobj = gzip.GzipFile("", "rb", 9, fo)
- except:
- raise zlibError("Data not stored in gzip format")
-
- if compobj.read(4)[:3] != "DLT":
- raise Exception("Not a deltarpm")
+ def _getDRPMInfo(self, filename):
+ d = deltarpm.readDeltaRPM(filename)
+ self.oldnevrstring = d['old_nevr']
+ self.oldnevr = self._stringToNEVR(d['old_nevr'])
+ self.sequence = d['seq']
- nevr_length = self._getLength(compobj.read(4))
- nevr = compobj.read(nevr_length).strip("\x00")
- seq_length = self._getLength(compobj.read(4))
- seq = compobj.read(seq_length)
- hex_seq = ""
- for char in seq:
- hex_seq += str("%02x" % ord(char))
- self.oldnevrstring = nevr
- self.oldnevr = self._stringToNEVR(nevr)
- self.sequence = hex_seq
- compobj.close()
-
def _stringToVersion(self, strng):
i = strng.find(':')
if i != -1:
diff --git a/createrepo/readMetadata.py b/createrepo/readMetadata.py
index 285e54d..6711d30 100644
--- a/createrepo/readMetadata.py
+++ b/createrepo/readMetadata.py
@@ -136,7 +136,7 @@ class MetadataIndex(object):
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 int(st.st_mtime) != mtime:
if self.opts.get('verbose'):
print _("Modification time changed for %s") % filepath
return