Drop prerelease if build flag is no in the mapping 34/104934/4
authorHyokeun Jeon <hyokeun.jeon@samsung.com>
Wed, 14 Dec 2016 04:11:08 +0000 (13:11 +0900)
committerhyokeun <hyokeun.jeon@samsung.com>
Mon, 26 Dec 2016 06:14:30 +0000 (15:14 +0900)
mapping.xml would be; <configure enable="true" build="no" />

Change-Id: I9f9ac38a6f40f43a49939c383355543c175f7de2

common/mapping.py
job_submit.py

index e6343e2..7e2973c 100644 (file)
@@ -143,26 +143,31 @@ class MappingV2(object):
                 dest.append(i)
         return dest
 
-    def get_submit_mapping(self, project, branch=None):
+    def get_submit_mapping(self, project, branch=None, include_config=False):
         """Get submit mapping though project or branch"""
         mapping = []
+        config_enabled = True
 
         if self.mapping_obj.configure:
             # if configure.enable is false then return []
             if self.mapping_obj.configure.enable == 'false':
-                return mapping
+                config_enabled = False
 
-        if self.mapping_obj.branch:
+        if config_enabled and self.mapping_obj.branch:
             for brch in self.mapping_obj.branch:
                 for prj in brch.project:
                     if (prj.name == project or prj.name == '/' + project) and ( branch in brch.name.split(",") ):
-                        mapping.append(self.__encode_to_ascii([brch.OBS_project, brch.OBS_staging_project, prj.OBS_package]))
-            return mapping
+                        item = self.__encode_to_ascii([brch.OBS_project, brch.OBS_staging_project, prj.OBS_package])
+                        if include_config:
+                            item.append(self.mapping_obj.configure)
+                        mapping.append(item)
 
         return mapping
 
 
-def git_obs_map(gerrit_prj, gerrit_branch=None, gitcache=None):
+def git_obs_map(gerrit_prj, gerrit_branch=None, gitcache=None, \
+                gerrit_hostname=None, gerrit_username=None, gerrit_sshport=None, \
+                include_config=False):
     """
     Find an OBS project[s correspondent to Gerrit project and branch
     by parsing git-obs-mapping.xml.
@@ -210,15 +215,15 @@ def git_obs_map(gerrit_prj, gerrit_branch=None, gitcache=None):
     # get mappings v2
     for file in mapping_v2_file_lists:
         mymapping_v2 = MappingV2(file)
-        obs_prjs.extend(mymapping_v2.get_submit_mapping(gerrit_prj,
-                                                        gerrit_branch))
+        obs_prjs.extend(mymapping_v2.get_submit_mapping(gerrit_prj, gerrit_branch,
+                                                        include_config=include_config))
 
     # remove overlapped items
     obs_prjs = remove_overlaps(obs_prjs)
 
     print 'Found git-obs-mapping: %s -> %s' % (gerrit_prj, obs_prjs)
     return obs_prjs
+
 def git_ref_map(prjdir=None, mapping_file=None, base_project=None):
     """
     Find an OBS Reference Projects correspondent to base_project
index 34093ce..ec2053f 100755 (executable)
@@ -346,7 +346,7 @@ def create_related_packages(build, obs_target_prj, obs_pre_prj, pre_package):
                                        obs_pre_prj, package)
 
 def create_project(git_url, git_project, git_tag, git_revision, build,
-                   obs_target_prj, obs_project, submitter, package):
+                   obs_target_prj, obs_project, submitter, package, build_flag=True):
     """Create prerelease OBS project and upload sources for the build."""
 
     # Create review project if it doesn't exist
@@ -368,7 +368,8 @@ def create_project(git_url, git_project, git_tag, git_revision, build,
         build.update_info(info, obs_project)
         # unlink the project to upload packages
         try:
-            build.unlink_project(obs_project)
+            if build_flag == True:
+                build.unlink_project(obs_project)
         except ObsError, error:
             print 'Modify the meta conf to unlink failed: %s' % error
     else:
@@ -382,6 +383,7 @@ def create_project(git_url, git_project, git_tag, git_revision, build,
                                  description=json.dumps(info))
         except ObsError, error:
             LocalError("Unable to create project %s: %s" % (obs_project, error))
+
     # change release name of project config in OBS
     change_release_name(build, obs_project, git_tag)
 
@@ -397,12 +399,15 @@ def create_project(git_url, git_project, git_tag, git_revision, build,
     except UploadError, err:
         raise LocalError(err)
 
-    build.link_project(obs_project, src=obs_target_prj, linktype="localdep")
-
     # copy the maintainer list from obs_target_prj meta to corresponding
     # prerelease project
     copy_person_project_meta(build, obs_target_prj, obs_project)
 
+    if build_flag != True:
+        return
+
+    build.link_project(obs_project, src=obs_target_prj, linktype="localdep")
+
     #create the 'link' package that relate the original package
     create_related_packages(build, obs_target_prj, obs_project, package)
 
@@ -411,11 +416,9 @@ def create_project(git_url, git_project, git_tag, git_revision, build,
 
     #default build flag
     build.default_build_flag(obs_project, repo = None, flag="build")
-
     #default publish flag
     build.default_build_flag(obs_project, repo = None, flag="publish")
 
-
 def get_branch_name(tag):
     """Get branch name by parsing info
        from submit tag name.
@@ -563,7 +566,7 @@ def main(build_type):
     tagger = mygit.get_tag(tag)
 
     # get list of target projects from git-obs-mapping
-    obs_target_prjs = git_obs_map(os.getenv("GERRIT_PROJECT"), git_branch)
+    obs_target_prjs = git_obs_map(os.getenv("GERRIT_PROJECT"), git_branch, include_config=True)
     build = BuildService(obs_api, obs_user, obs_passwd)
 
     # prepare submit_info
@@ -578,7 +581,11 @@ def main(build_type):
                 }
     submit_info['pre_created'] = []
 
-    for obs_target_prj, obs_stg_prj, obs_pkg in obs_target_prjs:
+    for obs_target_prj, obs_stg_prj, obs_pkg, build_cfg in obs_target_prjs:
+        enable_build = True
+        if build_cfg.build == 'no':
+            print 'Set disable build for %s' % (obs_target_prj)
+            enable_build = False
         url = 'ssh://%s:%s' % (os.getenv('GERRIT_HOSTNAME'),
                                os.getenv('GERRIT_SSHPORT'))
         # get package name from xml files.
@@ -622,7 +629,7 @@ def main(build_type):
                 while retry_count > 0:
                     try:
                         create_project(url, gerrit_project, git_tag, gerrit_newrev,
-                                build, obs_target_prj, project, submitter, package)
+                                build, obs_target_prj, project, submitter, package, build_flag=enable_build)
                         if pub_enabled:
                             rest.publish_event("pre_created", {
                                 "project": project,