Fix the bug about accepting muliple packages.
authorZhuoX Li <zhuox.li@intel.com>
Sun, 4 Jan 2015 07:30:11 +0000 (15:30 +0800)
committerXu Chang <changx.xu@intel.com>
Mon, 19 Jan 2015 06:44:26 +0000 (14:44 +0800)
When accept/reject group submission, jenkins will accepts/rejects
muliple packages. There are the different sourcepackages and targetpackages.
we shouldn't use the same sourcepackage and targetpackage to work,
when accept/reject. So add them into the matched project.

Change-Id: Ie2e17897a3548f750e12dd79fb8f75e11138c3bd

common/buildservice.py
job_request.py

index 71391e0..3b09569 100644 (file)
@@ -117,7 +117,7 @@ class BuildService(OSC):
 
     def get_sr_info(self, reqid):
         """Get some info of SR by reqid
-           Currently, We need 'sourcepackage', 'sourceproject', 'targetpackage',
+           Currently, We need 'sourceproject',
            'targetproject', 'comment', 'sender'
            If need more, can add other data from the xml_root
            into the function in future.
@@ -142,9 +142,7 @@ class BuildService(OSC):
             'sender': 'Admin',
            }
         """
-        NODES = {'sourcepackage':['action', 'source', 'package'], \
-            'sourceproject':['action', 'source', 'project'], \
-            'targetpackage':['action', 'target', 'package'], \
+        NODES = {'sourceproject':['action', 'source', 'project'], \
             'targetproject':['action', 'target', 'project'],
             'comment': ['state', 'comment'],
             'sender': ['state', 'who'],
@@ -155,9 +153,12 @@ class BuildService(OSC):
             """
             try:
                 data = xml_info[nodes[0]]
+                _data = data
+                if isinstance(_data, list):
+                    _data = data[0]
                 for node in nodes[1:]:
-                    data = data[node]
-                return data
+                    _data = _data[node]
+                return _data
             except (AttributeError, ValueError):
                 return ''
 
index f614407..184d7c6 100755 (executable)
@@ -78,11 +78,9 @@ def obs_git_data(event_fields):
                           'person': 'OBS_REQ_PERSON',
                           'role': 'OBS_REQ_ROLE',
                           'sender': 'OBS_REQ_SENDER',
-                          'sourcepackage': 'OBS_REQ_PKG_SRC',
                           'sourceproject': 'OBS_REQ_PRJ_SRC',
                           'sourcerevision': 'OBS_REQ_SRCREV',
                           'state': 'OBS_REQ_STATE',
-                          'targetpackage': 'OBS_REQ_PKG',
                           'targetproject': 'OBS_REQ_PRJ',
                           'time': 'OBS_REQ_TIME',
                           'event_type': 'OBS_REQ_TYPE',
@@ -133,7 +131,9 @@ def obs_git_data(event_fields):
                 projects.append(entry['GIT_PROJECTS'])
             for project in projects:
                 tag = tag_info(project, entry['GIT_TAG'])
-                tag.update({'GIT_PROJECT': project})
+                tag.update({'GIT_PROJECT': project,
+                            'OBS_REQ_PKG_SRC': os.path.basename(project),
+                            'OBS_REQ_PKG': os.path.basename(project),})
                 projects_list.append(tag)
         else:
             print '-------------------------------------'
@@ -340,8 +340,7 @@ def main():
     build = BuildService(os.getenv('OBS_API_URL'), \
             os.getenv('OBS_API_USERNAME'), os.getenv('OBS_API_PASSWD'))
     reqinfo = build.get_sr_info(event_fields.get('id'))
-    for var in ['targetproject', 'targetpackage', \
-                 'sourceproject', 'sourcepackage',
+    for var in ['targetproject', 'sourceproject',
                   'comment', 'sender']:
         if var not in event_fields:
             event_fields.update({var: reqinfo.get(var)})
@@ -386,6 +385,10 @@ def main():
         data.update({'GIT_AUTHOR_EMAIL': '%s <%s>' % \
                                     (project_data['author'],
                                     project_data['email'])})
+        # Update sourcepackage and targetpackage into event_fields,
+        # becuase the multiple project have the different packages.
+        event_fields.update({'sourcepackage': project_data['OBS_REQ_PKG_SRC'],
+                             'targetpackage': project_data['OBS_REQ_PKG']})
         if not (event_type == 'OBS_SRCSRV_REQUEST_REVOKED' or \
                 (event_type == 'OBS_SRCSRV_REQUEST_STATECHANGE' and \
                  event_fields['state'] == 'revoked')):