job_re: implement rebuilding of submission
authorEd Bartosh <eduard.bartosh@intel.com>
Sat, 10 Jan 2015 21:06:56 +0000 (23:06 +0200)
committerZhuoX Li <zhuox.li@intel.com>
Wed, 14 Jan 2015 06:26:26 +0000 (14:26 +0800)
Implemented by triggering gbs service for specified package or
all packages found in submission.
This causes re-exporting of sources, which is detected by
OBS. OBS then rebuilds updated package(s).

Fixes: #2060

Change-Id: I05bbcadd0deee4f3a47d613b2bcb04b9e1dbd0b0
Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com>
common/buildservice.py
job_re.py

index 906b48f..2a4a772 100644 (file)
@@ -653,3 +653,7 @@ class BuildService(OSC):
         """Set SR state."""
         return core.change_request_state(self.apiurl, reqid, state,
                    message=str(message), force=force)
+
+    def runservice(self, project, package):
+        """Run remote service for the package."""
+        return core.runservice(self.apiurl, project, package)
index 58491fd..d871589 100755 (executable)
--- a/job_re.py
+++ b/job_re.py
@@ -98,13 +98,23 @@ def main():
     target_project = os.getenv("target_project")
     submission = os.getenv("submission")
     comment = os.getenv("comment")
+    package = os.getenv("package")
     if submission and comment:
         if action in ("accept", "reject"):
             state = "accepted" if action == "accept" else "declined"
             return accept_or_reject(build, submission, state,
                                     target_project, comment)
         elif action == "rebuild":
-            print "Not implemented yet"
+            prj, meta = get_project_by_name(build, submission, target_project)
+            packages = [os.path.basename(path) for path in meta['projects']]
+            if package:
+                if package not in packages:
+                    raise LocalError("Package %s doesn't exist in "
+                                     "submission %s" % (package, submission))
+                packages = [package]
+            for pkg in packages:
+                print "triggered rebuild for %s/%s" % (prj, pkg)
+                build.runservice(prj, pkg)
         elif action == "remove":
             prj = get_project_by_name(build, submission, target_project)[0]
             build.delete_project(prj, force=True, msg=comment)