more strict check for spec file
authorLin Yang <lin.a.yang@intel.com>
Mon, 17 Dec 2012 11:06:13 +0000 (19:06 +0800)
committerLin Yang <lin.a.yang@intel.com>
Thu, 28 Feb 2013 07:23:25 +0000 (15:23 +0800)
Change-Id: If14d682a287b2bdb3b3cb2106b81c9b8f4f45454
Signed-off-by: Lin Yang <lin.a.yang@intel.com>
common/utils.py
job_policycheck.py
job_submitobs.py

index 1b164a6..eb20ede 100644 (file)
@@ -60,10 +60,8 @@ def retry(func, opts):
 
 def find_spec(workdir):
     specs = glob.glob('%s/*.spec' % workdir)
-    if len(specs) > 1:
-        print("Can't decide which spec file to use.")
-    elif len(specs) == 1:
-        return specs[0]
+    if len(specs) >= 1:
+        return specs
  
     return None
 
index 9befe36..6f13f17 100755 (executable)
@@ -135,11 +135,22 @@ if __name__ == '__main__':
         if obs_pkg:
             specfile = '%s/%s/%s.spec' % (prjdir, packagingdir, obs_pkg)
         else:
-            specfile = utils.find_spec('%s/%s' % (prjdir, packagingdir))
-            if not specfile:
-                msg = "[ERROR]: Packaging directory contains multiply spec files, backend service can not decide which spec file to use. Please use OBS_PACKAGE parameter in scm/git-obs-mapping project to specify the target spec file or contact system administrator for more details."
-                mygerrit.review(commit = GERRIT_PATCHSET_REVISION, message = msg)
-                continue
+            specs = utils.find_spec('%s/%s' % (prjdir, packagingdir))
+            if not specs:
+                # no spec exist under packaging, use default name
+                print 'Cannot find spec file under packaging directory!'
+                specfile = '%s/%s/%s.spec' % (prjdir, packagingdir, prj)
+            elif len(specs) == 1:
+                # only one spec exist under packaging
+                specfile = specs[0]
+            else:
+                # multiple specs exist under packaging, use default name
+                specfile = '%s/%s/%s.spec' % (prjdir, packagingdir, prj)
+                if not os.path.isfile(specfile):
+                    msg = "[ERROR]: Packaging directory contains multiply spec files, backend service can not decide which spec file to use. Please use OBS_PACKAGE parameter in scm/git-obs-mapping project to specify the target spec file or contact system administrator for more details."
+                    mygerrit.review(commit = GERRIT_PATCHSET_REVISION, message = msg)
+                    continue
+
         print('specfile %s' % specfile)
 
         # build the package under home project of backend service user
index d3696c1..d0d8812 100755 (executable)
@@ -383,9 +383,22 @@ def main():
 
         if obs_pkg:
             specfile = '%s/%s/%s.spec' % (prjdir, packagingdir, obs_pkg)
+            if not os.path.isfile(specfile):
+                msg = "The tag %s pushed, but backend service can not find %s under packaging directory, which is caused by mistake OBS_PACKAGE parameter in scm/git-obs-mapping project. Please correct it or contact system administrator for more details." % (tag, os.path.basename(specfile))
+                feedback(msg, tag, tagger, mygerrit)
+                end('failure')
         else:
-            specfile = utils.find_spec('%s/%s' % (prjdir, packagingdir))
-            if not specfile:
+            specs = utils.find_spec('%s/%s' % (prjdir, packagingdir))
+            if not specs:
+                # no spec exist under packaging, use default name
+                msg = "The tag %s pushed, but packaging directory doesn't contain any spec file. Please create one and re-submit it." % tag
+                feedback(msg, tag, tagger, mygerrit)
+                end('failure')
+            elif len(specs) == 1:
+                # only one spec exist under packaging
+                specfile = specs[0]
+            else:
+                # multiple specs exist under packaging, use default name
                 specfile = '%s/%s/%s.spec' % (prjdir, packagingdir, prj)
                 if not os.path.isfile(specfile):
                     msg = "The tag %s pushed, but packaging directory contains multiply spec files, backend service can not decide which spec file to use. Please use OBS_PACKAGE parameter in scm/git-obs-mapping project to specify the target spec file or contact system administrator for more details." % tag
@@ -394,12 +407,6 @@ def main():
 
         print('specfile %s' % specfile)
 
-        # check whether spec file exists
-        if not os.path.isfile(specfile):
-            msg = "The tag %s pushed, but backend service can not find %s under packaging directory, which maybe caused by OBS_PACKAGE parameter in scm/git-obs-mapping project. Please correct it or contact system administrator for more details." % (tag, os.path.basename(specfile))
-            feedback(msg, tag, tagger, mygerrit)
-            end('failure')
-
         try:
             # use gbp to parse specfile
             spec = gbp.rpm.parse_spec(specfile)
@@ -409,7 +416,7 @@ def main():
                 runner.show('gbs export --spec %s --packaging-dir %s -o %s' % (os.path.basename(specfile), packagingdir, outdir))
         except Exception, exc:
             print('gbp parse spec failed. %s' % exc)
-            msg = "The tag %s pushed, but backend service parsed %s failed. Please make sure (gbs export) can work in this project." % (tag, os.path.basename(specfile))
+            msg = "The tag %s pushed, but backend service faile to parse %s. Please make sure (gbs export) can work in this project." % (tag, os.path.basename(specfile))
             feedback(msg, tag, tagger, mygerrit)
             end('failure')