TPE-262 Option to copy inherited packages 13/146413/1
authorhyokeun <hyokeun.jeon@samsung.com>
Mon, 28 Aug 2017 10:59:09 +0000 (19:59 +0900)
committerhyokeun <hyokeun.jeon@samsung.com>
Mon, 28 Aug 2017 10:59:09 +0000 (19:59 +0900)
Change-Id: I6b3b086f76631273bdd3582419a340ac477e9214

job_ref_create_prj_obs.py

index 19ce4ce..4c4a870 100644 (file)
@@ -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)