From efbcd75064342040aa3aa4f4ddd3945a4b77ce04 Mon Sep 17 00:00:00 2001 From: Ludwig Nussel Date: Tue, 29 Sep 2015 08:44:04 +0200 Subject: [PATCH 1/4] move check by project function to ReviewBot --- ReviewBot.py | 38 ++++++++++++++++++++++++++++++++++---- abichecker/abichecker.py | 20 -------------------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/ReviewBot.py b/ReviewBot.py index 944e0ab7..b9a1df23 100644 --- a/ReviewBot.py +++ b/ReviewBot.py @@ -275,6 +275,18 @@ class ReviewBot(object): req.read(request) self.requests.append(req) + def set_request_ids_project(self, project, typename): + url = osc.core.makeurl(self.apiurl, ('search', 'request'), + "match=(state/@name='review'+or+state/@name='new')+and+(action/target/@project='%s'+and+action/@type='%s')&withhistory=1"%(project, typename)) + root = ET.parse(osc.core.http_GET(url)).getroot() + + self.requests = [] + + for request in root.findall('request'): + req = osc.core.Request() + req.read(request) + self.requests.append(req) + class CommandLineInterface(cmdln.Cmdln): def __init__(self, *args, **kwargs): cmdln.Cmdln.__init__(self, args, kwargs) @@ -325,7 +337,7 @@ class CommandLineInterface(cmdln.Cmdln): logger = self.logger) def do_id(self, subcmd, opts, *args): - """${cmd_name}: print the status of working copy files and directories + """${cmd_name}: check the specified request ids ${cmd_usage} ${cmd_option_list} @@ -333,8 +345,9 @@ class CommandLineInterface(cmdln.Cmdln): self.checker.set_request_ids(args) self.checker.check_requests() + @cmdln.option('-n', '--interval', metavar="minutes", type="int", help="periodic interval in minutes") def do_review(self, subcmd, opts, *args): - """${cmd_name}: print the status of working copy files and directories + """${cmd_name}: check requests that have the specified user or group as reviewer ${cmd_usage} ${cmd_option_list} @@ -342,8 +355,25 @@ class CommandLineInterface(cmdln.Cmdln): if self.checker.review_user is None and self.checker.review_group is None: raise osc.oscerr.WrongArgs("missing reviewer (user or group)") - self.checker.set_request_ids_search_review() - self.checker.check_requests() + def work(): + self.checker.set_request_ids_search_review() + self.checker.check_requests() + + self.runner(work, opts.interval) + + @cmdln.option('-n', '--interval', metavar="minutes", type="int", help="periodic interval in minutes") + def do_project(self, subcmd, opts, project, typename): + """${cmd_name}: check all requests of specified type to specified + + ${cmd_usage} + ${cmd_option_list} + """ + + def work(): + self.checker.set_request_ids_project(project, typename) + self.checker.check_requests() + + self.runner(work, opts.interval) def runner(self, workfunc, interval): """ runs the specified callback every minutes or diff --git a/abichecker/abichecker.py b/abichecker/abichecker.py index 2717c256..42726d7f 100755 --- a/abichecker/abichecker.py +++ b/abichecker/abichecker.py @@ -1055,18 +1055,6 @@ class ABIChecker(ReviewBot.ReviewBot): return fetchlist, liblist - def set_request_ids_project(self, project, typename): - url = osc.core.makeurl(self.apiurl, ('search', 'request'), - "match=(state/@name='review'+or+state/@name='new')+and+(action/target/@project='%s'+and+action/@type='%s')&withhistory=1"%(project, typename)) - root = ET.parse(osc.core.http_GET(url)).getroot() - - self.requests = [] - - for request in root.findall('request'): - req = osc.core.Request() - req.read(request) - self.requests.append(req) - class CommandLineInterface(ReviewBot.CommandLineInterface): def __init__(self, *args, **kwargs): @@ -1110,14 +1098,6 @@ class CommandLineInterface(ReviewBot.CommandLineInterface): src_rev = opts.revision print self.checker.check_source_submission(src_project, src_package, src_rev, dst_project, dst_package) - @cmdln.option('-n', '--interval', metavar="minutes", type="int", help="periodic interval in minutes") - def do_project(self, subcmd, opts, project, typename): - def work(): - self.checker.set_request_ids_project(project, typename) - self.checker.check_requests() - - self.runner(work, opts.interval) - if __name__ == "__main__": app = CommandLineInterface() sys.exit( app.main() ) From a334773cab0e6eb454115669174d520ffcce334c Mon Sep 17 00:00:00 2001 From: Ludwig Nussel Date: Tue, 29 Sep 2015 08:44:22 +0200 Subject: [PATCH 2/4] implement checking submit requests --- check_maintenance_incidents.py | 41 +++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/check_maintenance_incidents.py b/check_maintenance_incidents.py index 02526c27..b5f05bcc 100755 --- a/check_maintenance_incidents.py +++ b/check_maintenance_incidents.py @@ -78,21 +78,12 @@ class MaintenanceChecker(ReviewBot.ReviewBot): self.add_review(req, by_project = prj, by_package = pkg, msg = "Submission by someone who is not maintainer in the devel project. Please review") - def check_action_maintenance_incident(self, req, a): - known_maintainer = False - author = req.get_creator() - # check if there is a link and use that or the real package - # name as src_packge may end with something like - # .openSUSE_XX.Y_Update - pkgname = a.src_package - (linkprj, linkpkg) = self._get_linktarget(a.src_project, pkgname) - if linkpkg is not None: - pkgname = linkpkg - if pkgname == 'patchinfo': - return None - + # check if pkgname was submitted by the correct maintainer. If not, set + # self.needs_maintainer_review + def _check_maintainer_review_needed(self, req, pkgname, author): maintainers = set(self._maintainers(pkgname)) if maintainers: + known_maintainer = False for m in maintainers: if author == m: self.logger.debug("%s is maintainer"%author) @@ -109,11 +100,35 @@ class MaintenanceChecker(ReviewBot.ReviewBot): self.logger.warning("%s doesn't have maintainers"%pkgname) self.needs_maintainer_review.add(pkgname) + def check_action_maintenance_incident(self, req, a): + author = req.get_creator() + # check if there is a link and use that or the real package + # name as src_packge may end with something like + # .openSUSE_XX.Y_Update + pkgname = a.src_package + (linkprj, linkpkg) = self._get_linktarget(a.src_project, pkgname) + if linkpkg is not None: + pkgname = linkpkg + if pkgname == 'patchinfo': + return None + + self._check_maintainer_review_needed(req, pkgname, author) + if a.tgt_releaseproject == "openSUSE:Backports:SLE-12": self.add_factory_source = True return True + def check_action_submit(self, req, a): + known_maintainer = False + author = req.get_creator() + pkgname = a.tgt_package + + self._check_maintainer_review_needed(req, pkgname, author) + + return True + + def check_one_request(self, req): self.add_factory_source = False self.needs_maintainer_review = set() From 7253a060c40bf2ddd49360d70bbd725845512bdb Mon Sep 17 00:00:00 2001 From: Ludwig Nussel Date: Tue, 29 Sep 2015 09:51:23 +0200 Subject: [PATCH 3/4] avoid adding double reviews if review is by project --- check_maintenance_incidents.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check_maintenance_incidents.py b/check_maintenance_incidents.py index b5f05bcc..9dfdbde4 100755 --- a/check_maintenance_incidents.py +++ b/check_maintenance_incidents.py @@ -68,7 +68,7 @@ class MaintenanceChecker(ReviewBot.ReviewBot): url = osc.core.makeurl(self.apiurl, ('search', 'owner'), query=query) root = ET.parse(osc.core.http_GET(url)).getroot() - package_reviews = set((r.by_project, r.by_package) for r in req.reviews if r.by_package) + package_reviews = set((r.by_project, r.by_package) for r in req.reviews if r.by_project) for p in root.findall('./owner'): prj = p.get("project") pkg = p.get("package") From 2e0b8debda5f6452ca3ae75f72ca1d921aa55b36 Mon Sep 17 00:00:00 2001 From: Ludwig Nussel Date: Wed, 30 Sep 2015 11:41:36 +0200 Subject: [PATCH 4/4] remove unused variable --- check_maintenance_incidents.py | 1 - 1 file changed, 1 deletion(-) diff --git a/check_maintenance_incidents.py b/check_maintenance_incidents.py index 9dfdbde4..afa09304 100755 --- a/check_maintenance_incidents.py +++ b/check_maintenance_incidents.py @@ -120,7 +120,6 @@ class MaintenanceChecker(ReviewBot.ReviewBot): return True def check_action_submit(self, req, a): - known_maintainer = False author = req.get_creator() pkgname = a.tgt_package