refactor _get_verifymd5 to get_sourceinfo

This commit is contained in:
Ludwig Nussel 2015-03-31 11:33:39 +02:00
parent b542b2f78f
commit a4bf2657d4
2 changed files with 22 additions and 21 deletions

View File

@ -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):

View File

@ -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