rpm helpers: make SpecFile and SrcRpmFile give (full) version as dict.
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Wed, 30 May 2012 17:02:39 +0000 (20:02 +0300)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Tue, 7 Jan 2014 14:21:28 +0000 (16:21 +0200)
The Dictionary contains different "version components", such as
upstreamversion, release and epoch. Makes e.g. tag creation consistent,
now.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
gbp/config.py
gbp/rpm/__init__.py
gbp/scripts/buildpackage_rpm.py
gbp/scripts/import_srpm.py
gbp/scripts/pq_rpm.py

index 3df0fdd80d0f57c800636bfc2403a5557797b0ca..c301c20f92bc8a14467c42000b8a7e7afea6ef0d 100644 (file)
@@ -538,6 +538,7 @@ class GbpOptionParserRpm(GbpOptionParser):
                        'cleaner'                : '/bin/true',
                        'packaging-dir'          : '',
                        'packaging-tag'          : '%(vendor)s/%(version)s',
+                       'upstream-tag'           : 'upstream/%(upstreamversion)s',
                        'pq-branch'              : 'development/%(branch)s',
                        'spec-file'              : 'auto',
                        'export-dir'             : 'rpmbuild',
index 16a9043ce9977037431bb392aa31a25266e6c012..81597da776a51e880e9eac5c98f38a397f5fbfc1 100644 (file)
@@ -71,10 +71,11 @@ class SrcRpmFile(object):
         """
         Get the (downstream) version of the RPM
         """
-        version = self.rpmhdr[rpm.RPMTAG_EPOCH] + ":" if self.rpmhdr[rpm.RPMTAG_EPOCH] else ""
-        version += self.rpmhdr[rpm.RPMTAG_VERSION]+"-"+self.rpmhdr[rpm.RPMTAG_RELEASE]
+        version = dict(upstreamversion = self.rpmhdr[rpm.RPMTAG_VERSION],
+                       release = self.rpmhdr[rpm.RPMTAG_RELEASE])
+        if self.rpmhdr[rpm.RPMTAG_EPOCH] is not None:
+            version['epoch'] = str(self.rpmhdr[rpm.RPMTAG_EPOCH])
         return version
-
     version = property(_get_version)
 
     def _get_name(self):
@@ -89,7 +90,7 @@ class SrcRpmFile(object):
         Get the upstream version of the package
         """
         return self.rpmhdr[rpm.RPMTAG_VERSION]
-    upstream_version = property(_get_upstream_version)
+    upstreamversion = property(_get_upstream_version)
 
     def _get_packager(self):
         """
@@ -169,7 +170,7 @@ class SpecFile(object):
 
         source_header = self.specinfo.packages[0].header
         self.name = source_header[rpm.RPMTAG_NAME]
-        self.version = source_header[rpm.RPMTAG_VERSION]
+        self.upstreamversion = source_header[rpm.RPMTAG_VERSION]
         self.release = source_header[rpm.RPMTAG_RELEASE]
         # rpm-python returns epoch as 'long', convert that to string
         self.epoch = str(source_header[rpm.RPMTAG_EPOCH]) \
@@ -205,6 +206,19 @@ class SpecFile(object):
 
         (self.orig_file, self.orig_base, self.orig_archive_fmt, self.orig_comp) = self.guess_orig_file()
 
+
+    def _get_version(self):
+        """
+        Get the (downstream) version
+        """
+        version = dict(upstreamversion = self.upstreamversion,
+                       release = self.release)
+        if self.epoch != None:
+            version['epoch'] = self.epoch
+        return version
+    version = property(_get_version)
+
+
     def write_spec_file(self):
         """
         Write, possibly updated, spec to disk
index 4994559220dc8ac94fb5dd30ae5b3b9d295d5ac1..b704529af41a41f76e6e170dffe16275788765c2 100755 (executable)
@@ -147,7 +147,7 @@ def pristine_tar_build_orig(repo, orig_file, output_dir, options):
 def get_upstream_tree(repo, spec, options):
     """Determine the upstream tree from the given options"""
     if options.upstream_tree.upper() == 'TAG':
-        upstream_tree = repo.version_to_tag(options.upstream_tag, dict(upstreamversion=spec.version), "Upstream")
+        upstream_tree = repo.version_to_tag(options.upstream_tag, dict(upstreamversion=spec.upstreamversion), "Upstream")
     elif options.upstream_tree.upper() == 'BRANCH':
         if not repo.has_branch(options.upstream_branch):
             raise GbpError("%s is not a valid branch" % options.upstream_branch)
@@ -471,11 +471,12 @@ def main(argv):
 
         # Tag (note: tags the exported version)
         if options.tag or options.tag_only:
-            gbp.log.info("Tagging %s" % spec.version)
-            tag = repo.version_to_tag(options.packaging_tag, dict(upstreamversion=spec.version), options.vendor)
+            gbp.log.info("Tagging %s" % rpm.RpmPkgPolicy.compose_full_version(spec.version))
+            tag = repo.version_to_tag(options.packaging_tag, spec.version, options.vendor)
             if options.retag and repo.has_tag(tag):
                 repo.delete_tag(tag)
-            repo.create_tag(name=tag, msg="%s release %s" % (options.vendor, spec.version),
+            repo.create_tag(name=tag, msg="%s release %s" % (options.vendor,
+                                rpm.RpmPkgPolicy.compose_full_version(spec.version)),
                             sign=options.sign_tags, keyid=options.keyid, commit=tree)
             if options.posttag:
                 sha = repo.rev_parse("%s^{}" % tag)
index a3f40b4e296b31a25086e2003d7ad8b87d651716..8f3939e1d6d793d3e0c6848419d273eb8495de97 100755 (executable)
@@ -194,8 +194,8 @@ def main(argv):
                     spec = parse_spec(pkg)
 
                 pkgname = spec.name
-                pkgver = dict(upstreamversion=spec.version, release=spec.release)
-                upstream_version = spec.version
+                pkgver = spec.version
+                upstream_version = spec.upstreamversion
                 packager = spec.packager
                 unpacked = True
             else:
@@ -203,8 +203,8 @@ def main(argv):
                 dirs['src'] = os.path.abspath(os.path.dirname(pkg))
                 src = parse_srpm(srpm)
                 pkgname = src.name
-                pkgver = dict(upstreamversion=src.version)
-                upstream_version = src.upstream_version
+                pkgver = src.version
+                upstream_version = src.upstreamversion
                 packager = src.packager
                 unpacked = False
 
index ff70c49f8d0d3866efc2f417f096bf766360d879..3756ea74ccb88ee9f8a6401c20e0437bad2fef46 100755 (executable)
@@ -142,9 +142,9 @@ def export_patches(repo, branch, options):
         raise GbpError, "Can't parse spec"
 
     # Find upstream version
-    upstream_commit = repo.find_version(options.upstream_tag, dict(upstreamversion=spec.version), "Upstream")
+    upstream_commit = repo.find_version(options.upstream_tag, dict(upstreamversion=spec.upstreamversion), "Upstream")
     if not upstream_commit:
-        raise GbpError, ("Couldn't find upstream version %s. Don't know on what base to import." % spec.version)
+        raise GbpError, ("Couldn't find upstream version %s. Don't know on what base to import." % spec.upstreamversion)
 
     export_treeish = options.export_rev if options.export_rev else pq_branch
     if not repo.has_treeish(export_treeish):
@@ -233,11 +233,11 @@ def import_spec_patches(repo, branch, options):
         raise GbpError, "Can't parse spec"
 
     # Find upstream version
-    commit = repo.find_version(options.upstream_tag, dict(upstreamversion=spec.version), "Upstream")
+    commit = repo.find_version(options.upstream_tag, dict(upstreamversion=spec.upstreamversion), "Upstream")
     if commit:
         commits=[commit]
     else:
-        raise GbpError, ("Couldn't find upstream version %s. Don't know on what base to import." % spec.version)
+        raise GbpError, ("Couldn't find upstream version %s. Don't know on what base to import." % spec.upstreamversion)
 
     queue = spec.patchseries()
     packager = get_packager(spec)
@@ -295,9 +295,9 @@ def rebase_pq(repo, branch, options):
         raise GbpError, "Can't parse spec"
 
     # Find upstream version
-    upstream_commit = repo.find_version(options.upstream_tag, dict(upstreamversion=spec.version), "Upstream")
+    upstream_commit = repo.find_version(options.upstream_tag, dict(upstreamversion=spec.upstreamversion), "Upstream")
     if not upstream_commit:
-        raise GbpError, ("Couldn't find upstream version %s. Don't know on what base to import." % spec.version)
+        raise GbpError, ("Couldn't find upstream version %s. Don't know on what base to import." % spec.upstreamversion)
 
     switch_to_pq_branch(repo, branch, options)
     GitCommand("rebase")([upstream_commit])