From 6aa17908455fead6fb70c5bb9a637bc507e542d1 Mon Sep 17 00:00:00 2001 From: Yonghee Han Date: Wed, 30 May 2018 21:55:32 +0900 Subject: [PATCH] Add new feature add a base_id and a ref_id in build.xml Find information about the project meta. Change-Id: Ieff23224121377e971a27e95df8435e35ecf1d89 --- common/builddata.py | 17 ++++++++++++++ common/buildservice.py | 11 +++++++++ common/repomaker.py | 21 +++++++++++++++++ job_create_snapshot.py | 61 +++++++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/common/builddata.py b/common/builddata.py index 0594e6b..ded14e5 100644 --- a/common/builddata.py +++ b/common/builddata.py @@ -36,12 +36,22 @@ class BuildData(object): def __init__(self, build_id=None): self.build_id = build_id + self.base_id = None + self.ref_id = None self.targets = OrderedDict() def add_target(self, target): """Add (or update) target to the list of targets.""" self.targets[target["name"]] = target + def set_base_id(self, base_id): + """ Set Base id """ + self.base_id = base_id + + def set_ref_id(self, ref_id): + """ Set Ref id """ + self.ref_id = ref_id + def load(self, xml): """Load build data from string.""" @@ -99,6 +109,13 @@ class BuildData(object): """Format build data as xml.""" content = ''\ '%s' % self.build_id + # set base id + if self.base_id: + content += '%s' % self.base_id + + # set ref id + if self.ref_id: + content += '%s' % self.ref_id # build targets content += '' diff --git a/common/buildservice.py b/common/buildservice.py index b18c041..3f41f53 100755 --- a/common/buildservice.py +++ b/common/buildservice.py @@ -1483,4 +1483,15 @@ class BuildService(OSC): return None + def get_path_project(self, project): + """Get arch though project and repo name""" + + path_project = [] + meta_xml = self.get_meta(project) + xml_root = ElementTree.fromstringlist(meta_xml) + for repo_element in xml_root.findall('repository'): + for element in repo_element.findall('path'): + if element.get('project'): + path_project.append(element.get('project')) + return list(set(path_project)) diff --git a/common/repomaker.py b/common/repomaker.py index ebfe364..85698f7 100644 --- a/common/repomaker.py +++ b/common/repomaker.py @@ -307,6 +307,27 @@ class RepoMaker(object): except BuildDataError, err: raise RepoMakerError("Unable to generate build.xml: %s" % err) + def update_extend_builddata(self, base_id=None, ref_id=None): + """ + Update or create build.xml + Args: + base id : id of Base snapshot + ref id : id of Ref Project + """ + try: + bdata = BuildData(self.build_id) + # Create or update build.xml + outf = os.path.join(self.outdir, 'build.xml') + if os.path.exists(outf): + bdata.load(open(outf).read()) + if base_id: + bdata.set_base_id(base_id) + if ref_id: + bdata.set_ref_id(ref_id) + bdata.save(outf) + except BuildDataError, err: + raise RepoMakerError("Unable to generate build.xml: %s" % err) + def gen_manifest_info(self, name, gerrit_fetch_url, gerrit_review_url): """ Generate manifest for repo diff --git a/job_create_snapshot.py b/job_create_snapshot.py index 86e71ef..b5b253f 100755 --- a/job_create_snapshot.py +++ b/job_create_snapshot.py @@ -107,7 +107,7 @@ def trigger_image_creation(trigger_data): "PURPOSE": "JENKINS_IMAGER", \ "REQUESTED_NUM_EXECUTORS": "%d" % count}) -def make_repo(project, backenddb, base_path, live_repo_base): +def make_repo(project, backenddb, base_path, live_repo_base, base_id=None, ref_id=None): """ make repo. @@ -192,7 +192,7 @@ def make_repo(project, backenddb, base_path, live_repo_base): } trigger_next("BUILD-MONITOR-5-%s" % bm_stage, bm_data) raise LocalError("Image configuration not found in %s" % - local_path) + local_path) repos.update(repomaker.repos) imagedatas[repo['Name']] = repomaker.imagedata @@ -213,7 +213,6 @@ def make_repo(project, backenddb, base_path, live_repo_base): bm_pkg_url = bm_repo_dir.replace(base_path, bm_base_url) #print '[%s] bm_base_url(%s), base_path(%s), bm_pkg_url(%s)\n' \ # % (__file__, bm_base_url, base_path, bm_pkg_url) - # get rpm files bm_pkg_name_lst = [] bm_pkg_mdate_lst = [] @@ -317,6 +316,14 @@ def make_repo(project, backenddb, base_path, live_repo_base): # os.getenv('NOREPLY_EMAIL_SENDER'), \ # os.getenv('MAILINGLIST_SYSTEM').split(',')) + # Update base id and ref id of the builddata. + if base_id or ref_id: + try: + repomaker = RepoMaker(local_build_id, local_path) + repomaker.update_extend_builddata(base_id, ref_id) + except Exception as err: + print err + return {'project': project, 'repo': repos, 'repo_path': os.path.join(local_dir, local_build_id), @@ -383,12 +390,56 @@ def main(): } trigger_next("BUILD-MONITOR-1-%s" % bm_stage, bm_data) + # Get link project + ref_project_id = None + try: + ref_project_id = build.get_link_project_info(project) + if ref_project_id: + l_project = ref_project_id + loop_count = 10 + while loop_count >= 0: + l_project = build.get_link_project_info(l_project) + if l_project == None: + break; + else: + ref_project_id = l_project + loop_count -= 1 + print "ref Project:",ref_project_id + except Exception as err: + ref_project_id = None + print "ref Project is None" + # Init backend database redis_host = os.getenv("REDIS_HOST") redis_port = int(os.getenv("REDIS_PORT")) backenddb = BackendDB(redis_host, redis_port) - repo_data = make_repo(project, backenddb, base_path, live_repo_base) + # Find base project or base release id + base_release_id = None + try: + base_projects = build.get_path_project(project) + if base_projects: + base_project = base_projects[0] + repo_name = backenddb.get_obs_repo_map()[base_project] + release_name = backenddb.get_repos()[repo_name]['Release'] + release_id = backenddb.get_release_ids()[repo_name] + base_release_id = "%s_%s" %(release_name, release_id) + print 'base release id:',base_release_id + except Exception as err: + loop_count = 10 + while loop_count >= 0: + base_projects = build.get_path_project(base_project) + if base_projects: + old_base_project = base_project = base_projects[0] + print base_project + loop_count -= 1 + else: + base_release_id = old_base_project + break + print 'base release id is',base_release_id + + repo_data = make_repo(project, backenddb, base_path, live_repo_base, \ + base_release_id, ref_project_id) # update/create the latest repo link make_latest_link(os.path.join(base_path, repo_data['repo_path'])) @@ -413,7 +464,7 @@ def main(): # remove unused item data.pop('imagedata') - #INSERT MANIFEST DATA TO BUILDMONITOR + #INSERT MANIFEST DATA TO BUILDMONITOR if buildmonitor_enabled: if data.get('manifestdata'): bm_stage = 'Update_Manifest' -- 2.7.4