Check whether `gbs export` succeeds before remote building
authorLingchaox Xin <lingchaox.xin@intel.com>
Tue, 29 Oct 2013 08:54:04 +0000 (16:54 +0800)
committerGerrit Code Review <gerrit2@otctools.fi.intel.com>
Tue, 12 Nov 2013 17:27:24 +0000 (19:27 +0200)
Feature #1396

Change-Id: Iedfadd42d40e759dafdcb16d9d221890270b24f1

job_policycheck.py

index d3ec932..f8f90d1 100755 (executable)
@@ -16,8 +16,10 @@ from common.git import Git, clone_gitproject
 from common import gerrit
 from common import mapping
 from common.tempbuildpkg import TempPackageBuild
+from common import runner
 
 from gbp.rpm import SpecFile
+from gbp.errors import GbpError
 
 def end(tmpdir, return_code = 0):
     """Get return code"""
@@ -58,6 +60,27 @@ def specfile_chooser(prjdir, packagingdir, obs_pkg, specs, prj):
 
     return specfile
 
+def export(prjdir, packagingdir, mygit, events, mygerrit):
+    """Check a git repo whether it can be executed `gbs export` correctly"""
+    mygit.checkout('FETCH_HEAD')
+    tempd = tempfile.mkdtemp(dir=packagingdir)
+    cmd = 'gbs export --packaging-dir %s -o %s' % (packagingdir, tempd)
+
+    with utils.Workdir(prjdir):
+        rcode, outs = runner.show(cmd)
+
+    shutil.rmtree(tempd)
+
+    if rcode:
+        msg = "Use 'gbs export' to generate package on this patch failed, " \
+                "please have a check.\n\n" \
+                "gbs command: %s\n" \
+                "%s" % (cmd[:cmd.rfind(' -o ')], outs)
+        mygerrit.review(events['patchset_revision'], message=msg)
+        return False
+
+    return True
+
 def build_package(obs_dest_prj, specfile, prjdir, packagingdir, events,
             mygerrit):
     """Build package in OBS"""
@@ -149,6 +172,9 @@ def main():
     # search spec file under packaging dir
     specs = utils.find_spec('%s/%s' % (prjdir, packagingdir))
 
+    if not export(prjdir, packagingdir, mygit, events, mygerrit):
+        return end(tmpdir) # not jenkins' error, return 0
+
     rc_codes = []
 
     for target in obstargets: