TPE-193 Append snapshot information to SR Sync data 38/145938/1
authorhyokeun <hyokeun.jeon@samsung.com>
Thu, 24 Aug 2017 07:58:13 +0000 (16:58 +0900)
committerhyokeun <hyokeun.jeon@samsung.com>
Thu, 24 Aug 2017 07:58:13 +0000 (16:58 +0900)
Change-Id: I25146bda8864e085f12edd110231884ebe1f1c2d

common/workflow.py
job_submit_request_sync.py

index 01c3c99..9bcdd12 100644 (file)
@@ -548,7 +548,11 @@ def create_project(build, obs_project, submit_list, mode=MODE_NORMAL):
     sleep(1)
     build.link_project(obs_project, src=ref_obs_target_prj, linktype="localdep")
 
-def get_obs_package_name(git, branch, target_project, tag, gerrit_env=None):
+def get_info_from_tag(git, branch, target_project, tag, gerrit_env=None):
+
+    ret_data = {}
+    ret_data['commit_id'] = None
+    ret_data['spec_name'] = None
 
     if not gerrit_env:
         gerrit_env = GerritEnv()
@@ -561,9 +565,15 @@ def get_obs_package_name(git, branch, target_project, tag, gerrit_env=None):
                             gerrit_sshport=gerrit_env.sshport, \
                             git_cache_dir=git_cache):
         print >> sys.stderr, 'Error cloning %s' % git
-        return 1
+        return ret_data
+
     mygit = Git(prjdir)
     mygit.checkout(tag)
+
+    #TODO: Find commit id
+    ret_data['commit_id'] = mygit.rev_parse('HEAD')
+    print 'commit_id: %s' % ret_data['commit_id']
+
     packagingdir = utils.parse_link('%s/%s' % (prjdir, 'packaging'))
 
     obs_target_prjs = git_obs_map(git, \
@@ -584,21 +594,21 @@ def get_obs_package_name(git, branch, target_project, tag, gerrit_env=None):
         if obs_use_specname == 'yes':
             resp = find_specfile(prjdir, packagingdir, tag, {'project': git}, None)
             if not resp['spec']:
-                return None
+                return ret_data
             resp = parse_specfile(resp['spec'], tag, git, None)
             if not resp['spec']:
-                return None
+                return ret_data
             print 'spec name = %s' %(resp['spec'].name)
-            return resp['spec'].name
+            ret_data['spec_name'] = resp['spec'].name
         else:
             if obs_pkg:
                 print 'package name from mapping = %s' % (obs_pkg)
-                return obs_pkg
+                ret_data['spec_name'] = obs_pkg
             else:
                 print 'package name from basename = %s' % (os.path.basename(git))
-                return os.path.basename(git)
+                ret_data['spec_name'] = os.path.basename(git)
 
-    return None
+    return ret_data
 
 def get_manifest_filelists_snapshot(profile, request_url, timeout=5, group=None):
         """ get manifest filelists from snapshot"""
index ddbe7d7..3908a5e 100644 (file)
@@ -36,7 +36,7 @@ from gbp.errors import GbpError
 from common.git import Git, clone_gitproject
 from common.gerrit import GerritEnv
 
-from common.workflow import get_manifest_filelists_snapshot, get_obs_package_name
+from common.workflow import get_manifest_filelists_snapshot, get_info_from_tag
 
 # set default char-set endcoding to utf-8
 reload(sys)
@@ -70,7 +70,7 @@ def request_sr_list_for_snapshot(project, snapshot, reason):
             os.system('wget %s -O myfile' % path)
             with open('myfile', 'r') as sf:
                 board_data = sf.read()
-        for line in board_data.replace('\\', '').split('\n'):
+        for line in board_data.replace('\\n', '').replace('\\', '').split('\n'):
             try:
                 sr_list_from_snapshot = ast.literal_eval(line)
             except Exception, err:
@@ -94,11 +94,18 @@ def touch_trigger_data(raw_data):
                 'requests': []
                }
     sr_list = []
-    #for snapshot in raw_data.get('snapshots'):
     if True:
+        checked_snapshots = []
+        #TODO: Split requests into each snapshots
         for sr in raw_data.get('sr'):
-            sr_list.append({sr.get('sr'): [ x.get('repo') for x in sr.get('packages') ]})
-        ret_data['requests'].append({'snapshot': 'SR-SYNC', 'submit_list': sr_list})
+            checked_snapshots.append(sr.get('snapshot'))
+            for index, item in enumerate(sr.get('packages')):
+                sr_list.append({sr.get('sr'): [ {'repo': item.get('repo'),
+                                                 'cid': item.get('cid'),
+                                                 'snapshot': sr.get('snapshot'),
+                                                 'submitter': sr.get('submitters')[index].replace('\n', '')}
+                                              ]})
+        ret_data['requests'].append({'snapshot': ','.join(list(set(checked_snapshots))), 'submit_list': sr_list})
     return ret_data
 
 def main():
@@ -117,6 +124,7 @@ def main():
 
     target_project = None
     reason = 'SR-SYNC'
+    snapshot = None
     if os.getenv('UPSTREAM_SNAPSHOT', None) and os.getenv('UPSTREAM_OBS_PROJECT', None):
         snapshot = os.getenv('UPSTREAM_SNAPSHOT')
         project = os.getenv('UPSTREAM_OBS_PROJECT')
@@ -133,7 +141,6 @@ def main():
             raise Exception('Fail to fetch snapshot info from dashboard')
     elif os.getenv('TRIGGER_INFO', None):
         manual_trigger = trigger_info(os.getenv('TRIGGER_INFO'))
-        snapshot = 'SR-SYNC'
         project = manual_trigger.get('source')
         target_project = manual_trigger.get('target')
         # Parse triggered data
@@ -159,6 +166,8 @@ def main():
     print 'requests:'
     for rq in official_data['requests']:
         print '  snapshot:%s' % rq['snapshot']
+        if snapshot is None:
+            snapshot = rq['snapshot']
         print '  submit_list:'
         for s in rq['submit_list']:
             print '    %s' % s.keys()[0]
@@ -196,6 +205,7 @@ def main():
                     repo = item.get('repo')
                     cid = item.get('cid')
                     smtr = item.get('submitter')
+                    sn = item.get('snapshot')
                     bSetHighlight = True
                     for item in mapping:
                         # We only care about defined git repositories
@@ -203,9 +213,9 @@ def main():
                             item.get('Project_name', '') == target_fork_prefix + repo:
                             bSetHighlight = False
                     if bSetHighlight:
-                        marked_repo = {'repo': HIGHLIGHT + repo, 'cid': cid, 'submitter': smtr}
+                        marked_repo = {'repo': HIGHLIGHT + repo, 'cid': cid, 'submitter': smtr, 'snapshot': sn}
                     else:
-                        marked_repo = {'repo': GREYEDOUT + repo, 'cid': cid, 'submitter': smtr}
+                        marked_repo = {'repo': GREYEDOUT + repo, 'cid': cid, 'submitter': smtr, 'snapshot': sn}
                     if marked_repo not in _sr_list[_sr_tag]:
                         _sr_list[_sr_tag].append(marked_repo)
                 if _sr_list[_sr_tag]:
@@ -224,15 +234,20 @@ def main():
                         git = item.get('repo')
                         cid = item.get('cid')
                         smtr = item.get('submitter')
+                        sn = item.get('snapshot')
                         _package = ''
-                        if git.startswith(HIGHLIGHT):
-                            _package = get_obs_package_name(git[1:], source_branch, project, \
-                                                            submit, GerritEnv('PUBLIC_'))
-                        requests_item[project_to_create].append({'package': _package, \
-                                                                 'git_tag': submit, \
-                                                                 'cid': cid, \
-                                                                 'submitter': smtr, \
-                                                                 'gerrit_project': git})
+                        if True:#git.startswith(HIGHLIGHT):
+                            _tag_info = get_info_from_tag(git[1:], source_branch, project, \
+                                                          submit, GerritEnv('PUBLIC_'))
+                            _package = _tag_info.get('spec_name', None)
+                            _commit_id = _tag_info.get('commit_id', None)
+                            if _package and _commit_id:
+                                requests_item[project_to_create].append({'package': _package, \
+                                                                         'git_tag': submit, \
+                                                                         'cid': _commit_id, \
+                                                                         'submitter': smtr, \
+                                                                         'gerrit_project': git, \
+                                                                         'snapshot': sn})
 
         if True: #os.getenv('label') == 'SR-SYNC':
             trigger_next('PRE_RELEASE_REQUEST_%s' % target['target'], \
@@ -240,7 +255,8 @@ def main():
                           'obs_target_prj': project, \
                           'url': git_url, \
                           'obs_dest_prj': target['target'], \
-                          'reason': reason})
+                          'reason': reason, \
+                          'snapshot': snapshot})
 
             bm_end_datetime = datetime.now()
             bm_sync_git_tag = project_to_create.split(':'+target['target']+':')[-1].replace(':','/')