Support no particular project setting
authorLin Yang <lin.a.yang@intel.com>
Fri, 12 Sep 2014 06:48:06 +0000 (14:48 +0800)
committerLin Yang <lin.a.yang@intel.com>
Thu, 18 Sep 2014 08:07:06 +0000 (16:07 +0800)
In special case, git-obs-mapping.xml doesn't contain the setting section for
particular projects. The script will crash when query mapping on such file.
It should check whether this section exists at first.

Fixes: #2111

Change-Id: Ib9a80ca135e311b8f8b103298ec300a3a7ba9e42
Signed-off-by: Lin Yang <lin.a.yang@intel.com>
common/mapping.py

index 34d1c57..ec919a6 100644 (file)
@@ -65,32 +65,35 @@ class Mapping(object):
 
     def get_submit_mapping(self, project, branch=None):
         """Get submit mapping though project or branch"""
-        for prj in self.mapping_obj.project:
-            if prj.name == project or prj.name == '/' + project:
-                # submission is blocked, return empty list, otherwise
-                # return matched OBS target project
-                return self.__get_mapping(prj, branch) or []
+        if self.mapping_obj.project:
+            for prj in self.mapping_obj.project:
+                if prj.name == project or prj.name == '/' + project:
+                    # submission is blocked, return empty list, otherwise
+                    # return matched OBS target project
+                    return self.__get_mapping(prj, branch) or []
+        elif self.mapping_obj.default:
+            # Search in path list
+            prj_path = project
+            while True:
+                # parent directory of project/directory
+                prj_path = os.path.dirname(os.path.join('/', prj_path))
 
-        # Search in path list
-        prj_path = project
-        while True:
-            # parent directory of project/directory
-            prj_path = os.path.dirname(os.path.join('/', prj_path))
+                if prj_path == '/':
+                    for path in self.mapping_obj.default.path:
+                        if path.name == '/':
+                            return self.__get_mapping(path, branch) or []
+                    # No branch match, return NULL
+                    return []
 
-            if prj_path == '/':
+                # Search path
                 for path in self.mapping_obj.default.path:
-                    if path.name == '/':
+                    # path match
+                    if os.path.dirname(path.name+'/') == prj_path:
+                        # path pattern match projects blocked
+                        #   <path name="/test/" submission="N"/>
+                        #   <path name="/apps/">
+                        #      <branch name="master" submission="N"/>
+                        #   </path>
                         return self.__get_mapping(path, branch) or []
-                # No branch match, return NULL
-                return []
-
-            # Search path
-            for path in self.mapping_obj.default.path:
-                # path match
-                if os.path.dirname(path.name+'/') == prj_path:
-                    # path pattern match projects blocked
-                    #   <path name="/test/" submission="N"/>
-                    #   <path name="/apps/">
-                    #      <branch name="master" submission="N"/>
-                    #   </path>
-                    return self.__get_mapping(path, branch) or []
+        else:
+            return []