From cfeac60edc3e6275796ddde5e928b3f4151d2aca Mon Sep 17 00:00:00 2001 From: hyokeun Date: Mon, 28 Aug 2017 19:59:09 +0900 Subject: [PATCH] TPE-262 Option to copy inherited packages Change-Id: I6b3b086f76631273bdd3582419a340ac477e9214 --- job_ref_create_prj_obs.py | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/job_ref_create_prj_obs.py b/job_ref_create_prj_obs.py index 19ce4ce..4c4a870 100644 --- a/job_ref_create_prj_obs.py +++ b/job_ref_create_prj_obs.py @@ -277,7 +277,12 @@ class ref_create_project_obs(object): 'meta': meta} else: service_file_name = "_service" - remote_build.get_source_file(profile, package, service_file_name) + try: + remote_build.get_source_file(profile, package, service_file_name) + except Exception as err: + print "WARN(double linked package?) %s: %s" % (package, repr(err)) + continue + content = "" with open(service_file_name, 'r') as f: content = f.read() @@ -321,6 +326,8 @@ class ref_create_project_obs(object): def _update_packages(self, remote_build, build, profile, target, upload_packages): dbg_idx = 0 for package in upload_packages: + print 'UPDATE %s' % package + sys.stdout.flush() dbg_idx += 1 _update_type = upload_packages[package]['type'] raw = upload_packages[package]['content'] @@ -369,11 +376,14 @@ class ref_create_project_obs(object): target is the target project """ sourceinfo = remote_build.get_sourceinfo_list(profile) + sys.stdout.flush() for package in sourceinfo: if sourceinfo[package]: link_prj, link_pkg = sourceinfo[package][-1].split('/') if link_prj and link_pkg: - if build.exists(target, package): + if package in build.get_package_list(target): + print 'Trying to delete %s/%s' % (target, package) + sys.stdout.flush() build.delete_package(target, package) build.create_link_pac(target, link_pkg, \ target, package) @@ -677,6 +687,18 @@ class ref_create_project_obs(object): replace_gerrit_url = fields['REPLACE_GERRIT_URL'] importrpm = fields['IMPORT_RPM'] + copy_inherited_packages = os.getenv('COPY_INHERITED_PACKAGES', 'false') + if copy_inherited_packages == 'true': + # Check if link project is the same as source project + my_meta = build.get_meta(target) + xml_my_meta = ElementTree.fromstringlist(my_meta) + _link_prj = xml_my_meta.find('link').get('project') + if (fields['SRC_PROJECT'] != fields['DEST_PROJECT']) and \ + (fields['SRC_PROJECT'] != _link_prj): + print 'COPY_INHERITED_PACKAGES only works for matched link project' + assert False + print 'We have %d own packages' % len(build.get_package_list(target)) + build_src = build print "src = %s , target = %s" %(src, target) @@ -714,17 +736,30 @@ class ref_create_project_obs(object): for pkgname in packages: del todo_dict[pkgname] if build.exists(target, pkgname): - build.delete_package(target, pkgname) + if copy_inherited_packages != 'true': + print 'Deleting %s' % pkgname + build.delete_package(target, pkgname) packages = self.remove_duplicates(remote_package_list, package_list) print "\n********" print " 3) add packages %s" %(packages) + sys.stdout.flush() if packages: + print 'Checking %s' % packages ret_dict_add = self.list_packages_from_remote(\ remote_build, build, profile, target, packages=packages, replace_gerrit_url=replace_gerrit_url) if ret_dict_add: todo_dict.update(ret_dict_add) + + if copy_inherited_packages == 'true': + print " 3-1) Handling inherited packages" + own_packages = build.get_package_list(target) + print ' We have %d own packages' % len(own_packages) + for op in own_packages: + if op in todo_dict: + del todo_dict[op] + print '\nAdd Remove Done at %s' % (str(datetime.now())) print '\n 4-1) Final packages to be updated %d' % len(todo_dict) -- 2.7.4