diff --git a/plugins/builder/kiwi.py b/plugins/builder/kiwi.py index 2ac5cb3b..f222dec1 100644 --- a/plugins/builder/kiwi.py +++ b/plugins/builder/kiwi.py @@ -103,6 +103,8 @@ class KiwiBuildTask(BuildImageTask): name = "%s-%s" % (name, opts.get('profile', default_profile)) bld_info = {} + if opts.get('version'): + version = opts['version'] if opts.get('release'): release = opts['release'] else: @@ -188,7 +190,7 @@ class KiwiCreateImageTask(BaseBuildTask): Methods = ['createKiwiImage'] _taskWeight = 2.0 - def prepareDescription(self, desc_path, name, version, repos, arch): + def prepareDescription(self, desc_path, name, version, repos, repo_releasever, arch): # XML errors should have already been caught by parent task newxml = xml.dom.minidom.parse(desc_path) # nosec image = newxml.getElementsByTagName('image')[0] @@ -229,11 +231,15 @@ class KiwiCreateImageTask(BaseBuildTask): image.setAttribute('name', name) preferences = image.getElementsByTagName('preferences')[0] + + # Handle version and release-version + preferences.getElementsByTagName('version')[0].childNodes[0].data = version try: - preferences.getElementsByTagName('release-version')[0].childNodes[0].data = version + preferences.getElementsByTagName('release-version')[0].childNodes[0].data \ + = repo_releasever except IndexError: releasever_node = newxml.createElement('release-version') - text = newxml.createTextNode(version) + text = newxml.createTextNode(repo_releasever) releasever_node.appendChild(text) preferences.appendChild(releasever_node) @@ -357,6 +363,7 @@ class KiwiCreateImageTask(BaseBuildTask): baseurl = '%s/%s' % (repopath, arch) self.logger.debug('BASEURL: %s' % baseurl) repos.append(baseurl) + repo_releasever = self.opts.get('repo_releasever', version) base_path = os.path.dirname(desc_path) if opts.get('make_prep'): @@ -368,7 +375,7 @@ class KiwiCreateImageTask(BaseBuildTask): raise koji.GenericError("Preparation step failed") path = os.path.join(scmsrcdir, desc_path) - desc, types = self.prepareDescription(path, name, version, repos, arch) + desc, types = self.prepareDescription(path, name, version, repos, repo_releasever, arch) self.uploadFile(desc) target_dir = '/builddir/result/image' diff --git a/plugins/cli/kiwi.py b/plugins/cli/kiwi.py index 02958373..9d177ac9 100644 --- a/plugins/cli/kiwi.py +++ b/plugins/cli/kiwi.py @@ -19,11 +19,13 @@ def handle_kiwi_build(goptions, session, args): parser = OptionParser(usage=usage) parser.add_option("--scratch", action="store_true", default=False, help="Perform a scratch build") + parser.add_option("--version", help="Override default version of the output image") parser.add_option("--release", help="Release of the output image") parser.add_option("--repo", action="append", help="Specify a repo that will override the repo used to install " "RPMs in the image. May be used multiple times. The " "build tag repo associated with the target is the default.") + parser.add_option("--repo-releasever", help="Override default releasever of the output image") parser.add_option("--noprogress", action="store_true", help="Do not display progress of the upload") parser.add_option("--kiwi-profile", action="store", default=None, @@ -71,6 +73,8 @@ def handle_kiwi_build(goptions, session, args): if arch] if options.kiwi_profile: kwargs['profile'] = options.kiwi_profile + if options.version: + kwargs['version'] = options.version if options.release: kwargs['release'] = options.release if options.make_prep: @@ -85,6 +89,8 @@ def handle_kiwi_build(goptions, session, args): kwargs['arches'] = [canonArch(arch) for arch in options.arches] if options.repo: kwargs['repos'] = options.repo + if options.repo_releasever: + kwargs['repo_releasever'] = options.repo_releasever if session.hub_version < (1, 35, 0): warn("hub version is < 1.35, buildroot repo is always used in addition to specified repos") diff --git a/plugins/hub/kiwi.py b/plugins/hub/kiwi.py index 81852e52..4aeb1048 100644 --- a/plugins/hub/kiwi.py +++ b/plugins/hub/kiwi.py @@ -17,9 +17,10 @@ koji.tasks.LEGACY_SIGNATURES['createKiwiImage'] = [ @export def kiwiBuild(target, arches, desc_url, desc_path, optional_arches=None, profile=None, scratch=False, priority=None, make_prep=False, repos=None, release=None, - type=None, type_attr=None, result_bundle_name_format=None, use_buildroot_repo=True): + type=None, type_attr=None, result_bundle_name_format=None, use_buildroot_repo=True, + version=None, repo_releasever=None): context.session.assertPerm('image') - for i in [desc_url, desc_path, profile, release]: + for i in [desc_url, desc_path, profile, version, release, repo_releasever]: if i is not None: kojihub.convert_value(i, cast=str, check_only=True) if repos: @@ -52,12 +53,16 @@ def kiwiBuild(target, arches, desc_url, desc_path, optional_arches=None, profile opts['scratch'] = True if profile: opts['profile'] = profile + if version: + opts['version'] = version if release: opts['release'] = release if optional_arches: opts['optional_arches'] = optional_arches if repos: opts['repos'] = repos + if repo_releasever: + opts['repo_releasever'] = repo_releasever if make_prep: opts['make_prep'] = True if type: