From 0cc064af0bb38cb791c41cd621af0711788f0f8c Mon Sep 17 00:00:00 2001 From: ZhuoX Li Date: Fri, 21 Nov 2014 18:50:48 +0800 Subject: [PATCH] Fix the aggregate packages are always broken state. In a prerelease project (not related to aggregate packages), the aggregate packages linked from the main project are always in broken state.Keep the meta of aggregate packages are the same as the main project to solve it. Change-Id: Iad5e7365150701fa832ed0b3f2de2d47c8acd927 Fixes: #2188 --- common/buildservice.py | 14 ++++++++++++++ job_submit.py | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/common/buildservice.py b/common/buildservice.py index 2935c08..6f270bf 100644 --- a/common/buildservice.py +++ b/common/buildservice.py @@ -347,6 +347,20 @@ class BuildService(OSC): self.apiurl, False) self.core_http(core.http_PUT, url, data=''.join(config)) + def copy_package_meta(self, obs_source_project, package, \ + obs_target_project): + """ + Copy xml metadata of target package to + the meta of source package + """ + meta_xml = self.get_meta(obs_target_project, package) + xml_root = ElementTree.fromstringlist(meta_xml) + project_name = xml_root.attrib.get('project') + if project_name != obs_source_project: + xml_root.attrib['project'] = obs_source_project + self.set_meta(ElementTree.tostring(xml_root), \ + obs_source_project, package) + def get_package_meta(self, project, package): """ get_package_meta(project, package) -> string diff --git a/job_submit.py b/job_submit.py index d333287..f9a413a 100755 --- a/job_submit.py +++ b/job_submit.py @@ -90,6 +90,27 @@ def change_release_name(build, project, git_tag): # set project config build.set_project_config(project, config) +def set_aggregate_package_meta(build, obs_source_prj, obs_target_prj): + """Set package metadata that include 'aggregate' from obs_source_prj. + Keep the metadata of aggregate packages are the same as + the obs_target_prj project + """ + for package in build.get_package_list(obs_target_prj): + if 'aggregate' in package: + # get real project name in metadata of the package + realprj = build.get_package_real_project_name(obs_source_prj, \ + package) + # If real project name is not equal obs_source_prj, + # should branch the package from obs_target_prj to + # obs_source_prj, and copy the package metadata + # of obs_target_prj to obs_source_prj + if realprj != obs_source_prj: + print "branch package %s from %s" % (package, realprj) + build.branch_pkg(realprj, package, \ + target_project = obs_source_prj) + # copy package metadata of obs_source_prj to realprj + build.copy_package_meta(obs_source_prj, package, realprj) + def create_project(git_url, git_project, git_tag, git_revision, build, obs_target_prj, obs_project, submitter, package): """Create prerelease OBS project and upload sources for the build.""" @@ -132,6 +153,8 @@ def create_project(git_url, git_project, git_tag, git_revision, build, raise LocalError(err) build.link_project(obs_project, src=obs_target_prj, linktype="localdep") + #change the aggregate package metadata of obs_project + set_aggregate_package_meta(build, obs_project, obs_target_prj) def main(build_type): """ -- 2.7.4