RpmGitRepository: make version-tag methods more flexible
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Thu, 31 May 2012 06:48:50 +0000 (09:48 +0300)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Tue, 7 Jan 2014 14:21:29 +0000 (16:21 +0200)
Simplifies version_to_tag() and find_version() so that all string fields
(for the format string) are given in one dict. Now it's easier to
add support for new string fields (e.g. commitdate etc).

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com>
gbp/rpm/git.py
gbp/scripts/buildpackage_rpm.py
gbp/scripts/import_orig_rpm.py
gbp/scripts/import_srpm.py
gbp/scripts/pq_rpm.py

index 55a412b381c39f26293bfc34b53669d200fe5d6f..c81803efb7724e57338dc7dbfacc482f9d748bd3 100644 (file)
@@ -28,7 +28,7 @@ class RpmGitRepository(GitRepository):
         super(RpmGitRepository, self).__init__(path)
         self.pristine_tar = PristineTar(self)
 
-    def find_version(self, format, version, vendor="vendor"):
+    def find_version(self, format, str_fields):
         """
         Check if a certain version is stored in this repo and return the SHA1
         of the related commit. That is, an annotated tag is dereferenced to the
@@ -36,39 +36,34 @@ class RpmGitRepository(GitRepository):
 
         @param format: tag pattern
         @type format: C{str}
-        @param version: rpm version components ('epoch', 'upstreamversion', 'release',...)
-        @type version: C{dict} of C{str}
-        @param vendor: distribution vendor
-        @type vendor: C{str}
+        @param str_fields: arguments for format string ('upstreamversion', 'release', 'vendor'...)
+        @type str_fields: C{dict} of C{str}
         @return: sha1 of the commit the tag references to
         """
-        tag = self.version_to_tag(format, version, vendor)
+        tag = self. version_to_tag(format, str_fields)
         if self.has_tag(tag): # new tags are injective
             # dereference to a commit object
             return self.rev_parse("%s^0" % tag)
         return None
 
     @staticmethod
-    def version_to_tag(format, version, vendor="vendor"):
+    def version_to_tag(format, str_fields):
         """
         Generate a tag from a given format and a version
 
         @param format: tag pattern
         @type format: C{str}
-        @param version: rpm version components ('epoch', 'upstreamversion', 'release',...)
-        @type version: C{dict} of C{str}
-        @param vendor: distribution vendor
-        @type vendor: C{str}
+        @param str_fields: arguments for format string ('upstreamversion', 'release', 'vendor'...)
+        @type str_fields: C{dict} of C{str}
         @return: version tag
 
         >>> RpmGitRepository.version_to_tag("packaging/%(version)s", dict(epoch='0', upstreamversion='0~0'))
         'packaging/0%0_0'
-        >>> RpmGitRepository.version_to_tag("%(vendor)s/v%(version)s", dict(upstreamversion='1.0', release='2'), "myvendor")
+        >>> RpmGitRepository.version_to_tag("%(vendor)s/v%(version)s", dict(upstreamversion='1.0', release='2', vendor="myvendor"))
         'myvendor/v1.0-2'
         """
-        version_tag = format % dict(version,
-                                    version=RpmPkgPolicy.compose_full_version(version),
-                                    vendor=vendor)
+        version_tag = format % dict(str_fields,
+                                    version=RpmPkgPolicy.compose_full_version(str_fields))
         return RpmGitRepository._sanitize_tag(version_tag)
 
     @staticmethod
index b704529af41a41f76e6e170dffe16275788765c2..3dd171689b79cd69d1b550f4be4d688d5a6f12c2 100755 (executable)
@@ -147,7 +147,8 @@ 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.upstreamversion), "Upstream")
+        tag_str_fields = dict(upstreamversion=spec.upstreamversion, vendor="Upstream")
+        upstream_tree = repo.version_to_tag(options.upstream_tag, tag_str_fields)
     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)
@@ -472,7 +473,8 @@ def main(argv):
         # Tag (note: tags the exported version)
         if options.tag or options.tag_only:
             gbp.log.info("Tagging %s" % rpm.RpmPkgPolicy.compose_full_version(spec.version))
-            tag = repo.version_to_tag(options.packaging_tag, spec.version, options.vendor)
+            tag_str_fields = dict(spec.version, vendor=options.vendor)
+            tag = repo.version_to_tag(options.packaging_tag, tag_str_fields)
             if options.retag and repo.has_tag(tag):
                 repo.delete_tag(tag)
             repo.create_tag(name=tag, msg="%s release %s" % (options.vendor,
index 44368de05bd572f695d5f431d8df56ac9f40171f..7c8e80e71a4d1c5fa36b0068599109ac73706ed2 100755 (executable)
@@ -266,7 +266,8 @@ def main(argv):
                 gbp.log.info("Pristine-tar: commiting %s" % pristine_orig)
                 repo.pristine_tar.commit(pristine_orig, options.upstream_branch)
 
-            tag = repo.version_to_tag(options.upstream_tag, dict(upstreamversion=version), "Upstream")
+            tag_str_fields = dict(upstreamversion=version, vendor="Upstream")
+            tag = repo.version_to_tag(options.upstream_tag, tag_str_fields)
             repo.create_tag(name=tag,
                             msg="Upstream version %s" % version,
                             commit=commit,
index 8f3939e1d6d793d3e0c6848419d273eb8495de97..eba3e91321f709df03639562fed3fd6ebdeff13b 100755 (executable)
@@ -85,11 +85,11 @@ def committer_from_author(author, options):
     return committer
 
 
-def move_tag_stamp(repo, format, version, vendor):
+def move_tag_stamp(repo, format, tag_str_fields):
     "Move tag out of the way appending the current timestamp"
-    old = repo.version_to_tag(format, version, vendor)
+    old = repo.version_to_tag(format, tag_str_fields)
     new = repo.version_to_tag('%s~%d' % (format, int(time.time())),
-                              version, vendor)
+                              tag_str_fields)
     repo.move_tag(old, new)
 
 
@@ -269,13 +269,14 @@ def main(argv):
                 upstream = None
 
             format = [(options.upstream_tag, "Upstream"), (options.packaging_tag, options.vendor)][options.native]
-            tag = repo.version_to_tag(format[0], dict(upstreamversion=upstream_version), options.vendor)
+            tag_str_fields = dict(pkgver, vendor=options.vendor)
+            tag = repo.version_to_tag(format[0], tag_str_fields)
 
-            if repo.find_version(options.packaging_tag, pkgver, options.vendor):
+            if repo.find_version(options.packaging_tag, tag_str_fields):
                 gbp.log.warn("Version %s already imported." % RpmPkgPolicy.compose_full_version(pkgver))
                 if options.allow_same_version:
                     gbp.log.info("Moving tag of version '%s' since import forced" % RpmPkgPolicy.compose_full_version(pkgver))
-                    move_tag_stamp(repo, options.packaging_tag, pkgver, options.vendor)
+                    move_tag_stamp(repo, options.packaging_tag, tag_str_fields)
                 else:
                     raise SkipImport
 
@@ -296,7 +297,7 @@ def main(argv):
 
             # Import upstream sources
             if upstream:
-                upstream_commit = repo.find_version(format[0], dict(upstreamversion=upstream_version), options.vendor)
+                upstream_commit = repo.find_version(format[0], tag_str_fields)
                 if not upstream_commit:
                     gbp.log.info("Tag %s not found, importing %s tarball" % (tag, format[1]))
 
@@ -342,7 +343,8 @@ def main(argv):
                                     "\nAlso check the --create-missing-branches option.")
                         raise GbpError
 
-                tag = repo.version_to_tag(options.packaging_tag, pkgver, options.vendor)
+                tag_str_fields = dict(pkgver, vendor=options.vendor)
+                tag = repo.version_to_tag(options.packaging_tag, tag_str_fields)
                 msg = "%s release %s" % (options.vendor, RpmPkgPolicy.compose_full_version(pkgver))
 
                 if options.orphan_packaging or not upstream:
index 3756ea74ccb88ee9f8a6401c20e0437bad2fef46..07ebc7bf856ba7d27af3f7e17acaeab0ec7a805a 100755 (executable)
@@ -142,7 +142,8 @@ 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.upstreamversion), "Upstream")
+    tag_str_fields = dict(upstreamversion=spec.upstreamversion, vendor="Upstream")
+    upstream_commit = repo.find_version(options.upstream_tag, tag_str_fields)
     if not upstream_commit:
         raise GbpError, ("Couldn't find upstream version %s. Don't know on what base to import." % spec.upstreamversion)
 
@@ -233,7 +234,8 @@ 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.upstreamversion), "Upstream")
+    tag_str_fields = dict(upstreamversion=spec.upstreamversion, vendor="Upstream")
+    commit = repo.find_version(options.upstream_tag, tag_str_fields)
     if commit:
         commits=[commit]
     else:
@@ -295,7 +297,8 @@ 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.upstreamversion), "Upstream")
+    tag_str_fields = dict(upstreamversion=spec.upstreamversion, vendor="Upstream")
+    upstream_commit = repo.find_version(options.upstream_tag, tag_str_fields)
     if not upstream_commit:
         raise GbpError, ("Couldn't find upstream version %s. Don't know on what base to import." % spec.upstreamversion)