From a4bf2657d4659a41bae650d3c946f05ac83e6f90 Mon Sep 17 00:00:00 2001 From: Ludwig Nussel Date: Tue, 31 Mar 2015 11:33:39 +0200 Subject: [PATCH] refactor _get_verifymd5 to get_sourceinfo --- ReviewBot.py | 26 +++++++++++++------------- check_source_in_factory.py | 17 +++++++++-------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/ReviewBot.py b/ReviewBot.py index 1070c854..22d6d334 100644 --- a/ReviewBot.py +++ b/ReviewBot.py @@ -24,6 +24,7 @@ import os, sys, re import logging from optparse import OptionParser import cmdln +from collections import namedtuple try: from xml.etree import cElementTree as ET @@ -146,8 +147,7 @@ class ReviewBot(object): return overall def check_action_maintenance_incident(self, req, a): - rev = self._get_verifymd5(a.src_project, a.src_package, a.src_rev) - return self.check_source_submission(a.src_project, a.src_package, rev, a.tgt_releaseproject, a.src_package) + return self.check_source_submission(a.src_project, a.src_package, a.src_rev, a.tgt_releaseproject, a.src_package) def check_action_maintenance_release(self, req, a): pkgname = a.src_package @@ -164,32 +164,32 @@ class ReviewBot(object): return False else: pkgname = linkpkg - src_rev = self._get_verifymd5(a.src_project, a.src_package) - return self.check_source_submission(a.src_project, a.src_package, src_rev, a.tgt_project, pkgname) + return self.check_source_submission(a.src_project, a.src_package, None, a.tgt_project, pkgname) def check_action_submit(self, req, a): - rev = self._get_verifymd5(a.src_project, a.src_package, a.src_rev) - return self.check_source_submission(a.src_project, a.src_package, rev, a.tgt_project, a.tgt_package) + return self.check_source_submission(a.src_project, a.src_package, a.src_rev, a.tgt_project, a.tgt_package) def check_source_submission(self, src_project, src_package, src_rev, target_project, target_package): """ default implemention does nothing """ self.logger.info("%s/%s@%s -> %s/%s"%(src_project, src_package, src_rev, target_project, target_package)) return None - # XXX used in other modules - def _get_verifymd5(self, src_project, src_package, rev=None): + # TODO: cache? + def get_sourceinfo(self, project, package, rev=None): query = { 'view': 'info' } - if rev: + if rev is not None: query['rev'] = rev - url = osc.core.makeurl(self.apiurl, ('source', src_project, src_package), query=query) + url = osc.core.makeurl(self.apiurl, ('source', project, package), query=query) try: root = ET.parse(osc.core.http_GET(url)).getroot() except urllib2.HTTPError: return None - if root is not None: - srcmd5 = root.get('verifymd5') - return srcmd5 + if root is None: + return None + + props = ('package', 'rev', 'vrev', 'srcmd5', 'lsrcmd5', 'verifymd5') + return namedtuple('SourceInfo', props)(*[ root.get(p) for p in props ]) # TODO: what if there is more than _link? def _get_linktarget_self(self, src_project, src_package): diff --git a/check_source_in_factory.py b/check_source_in_factory.py index 6f7c2638..ea2c31e5 100755 --- a/check_source_in_factory.py +++ b/check_source_in_factory.py @@ -53,13 +53,14 @@ class FactorySourceChecker(ReviewBot.ReviewBot): def check_source_submission(self, src_project, src_package, src_rev, target_project, target_package): self.logger.info("%s/%s@%s -> %s/%s"%(src_project, src_package, src_rev, target_project, target_package)) - good = self._check_factory(src_rev, target_package) + src_srcinfo = self.get_sourceinfo(src_project, src_package, src_rev) + good = self._check_factory(src_srcinfo.verifymd5, target_package) if good: self.logger.info("%s is in Factory"%target_package) return good - good = self._check_requests(src_rev, target_package) + good = self._check_requests(src_srcinfo.verifymd5, target_package) if good: self.logger.info("%s already reviewed for Factory"%target_package) @@ -68,11 +69,11 @@ class FactorySourceChecker(ReviewBot.ReviewBot): def _check_factory(self, rev, package): """check if factory sources contain the package and revision. check head and history""" self.logger.debug("checking %s in %s"%(package, self.factory)) - srcmd5 = self._get_verifymd5(self.factory, package) - if srcmd5 is None: + si = self.get_sourceinfo(self.factory, package) + if si is None: self.logger.debug("new package") return None - elif rev == srcmd5: + elif rev == si.verifymd5: self.logger.debug("srcmd5 matches") return True @@ -102,9 +103,9 @@ class FactorySourceChecker(ReviewBot.ReviewBot): requests = osc.core.get_request_list(self.apiurl, self.factory, package, None, ['new', 'review'], 'submit') for req in requests: for a in req.actions: - rqrev = self._get_verifymd5(a.src_project, a.src_package, a.src_rev) - self.logger.debug("rq %s: %s/%s@%s"%(req.reqid, a.src_project, a.src_package, rqrev)) - if rqrev == rev: + si = self.get_sourceinfo(a.src_project, a.src_package, a.src_rev) + self.logger.debug("rq %s: %s/%s@%s"%(req.reqid, a.src_project, a.src_package, si.verifymd5)) + if si.verifymd5 == rev: if req.state.name == 'new': self.logger.debug("request ok") return True