Refactor _check_project into ReviewBot
This commit is contained in:
parent
432237a2a8
commit
a471c0b9e8
46
ReviewBot.py
46
ReviewBot.py
@ -45,6 +45,8 @@ except ImportError:
|
||||
from osc import conf
|
||||
import osc.core
|
||||
import urllib2
|
||||
from itertools import count
|
||||
|
||||
|
||||
class ReviewBot(object):
|
||||
"""
|
||||
@ -574,6 +576,50 @@ class ReviewBot(object):
|
||||
|
||||
self.comment_handler_remove()
|
||||
|
||||
def _check_matching_srcmd5(self, project, package, rev, history_limit = 5):
|
||||
"""check if factory sources contain the package and revision. check head and history"""
|
||||
self.logger.debug("checking %s in %s"%(package, project))
|
||||
try:
|
||||
si = osc.core.show_package_meta(self.apiurl, project, package)
|
||||
except (urllib2.HTTPError, urllib2.URLError):
|
||||
si = None
|
||||
if si is None:
|
||||
self.logger.debug("new package")
|
||||
return None
|
||||
else:
|
||||
si = self.get_sourceinfo(project, package)
|
||||
if rev == si.verifymd5:
|
||||
self.logger.debug("srcmd5 matches")
|
||||
return True
|
||||
|
||||
if history_limit:
|
||||
self.logger.debug("%s not the latest version, checking history", rev)
|
||||
u = osc.core.makeurl(self.apiurl, [ 'source', project, package, '_history' ], { 'limit': history_limit })
|
||||
try:
|
||||
r = osc.core.http_GET(u)
|
||||
except urllib2.HTTPError as e:
|
||||
self.logger.debug("package has no history!?")
|
||||
return None
|
||||
|
||||
root = ET.parse(r).getroot()
|
||||
# we need this complicated construct as obs doesn't honor
|
||||
# the 'limit' parameter use above for obs interconnect:
|
||||
# https://github.com/openSUSE/open-build-service/issues/2545
|
||||
for revision, i in zip(reversed(root.findall('revision')), count()):
|
||||
node = revision.find('srcmd5')
|
||||
if node is None:
|
||||
continue
|
||||
self.logger.debug("checking %s"%node.text)
|
||||
if node.text == rev:
|
||||
self.logger.debug("got it, rev %s"%revision.get('rev'))
|
||||
return True
|
||||
if i == history_limit:
|
||||
break
|
||||
|
||||
self.logger.debug("srcmd5 not found in history either")
|
||||
|
||||
return False
|
||||
|
||||
|
||||
class CommentFromLogHandler(logging.Handler):
|
||||
def __init__(self, level=logging.INFO):
|
||||
|
@ -35,7 +35,6 @@ import osc.core
|
||||
import urllib2
|
||||
import yaml
|
||||
import ReviewBot
|
||||
from itertools import count
|
||||
|
||||
|
||||
class FactorySourceChecker(ReviewBot.ReviewBot):
|
||||
@ -77,7 +76,7 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
|
||||
self.review_messages['declined'] = 'the package needs to be accepted in {} first'.format(' or '.join(projects))
|
||||
for project in projects:
|
||||
self.logger.info("Checking in project %s" % project)
|
||||
good = self._check_project(project, target_package, src_srcinfo.verifymd5)
|
||||
good = self._check_matching_srcmd5(project, target_package, src_srcinfo.verifymd5, self.history_limit)
|
||||
if good:
|
||||
self.logger.info("{} is in {}".format(target_package, project))
|
||||
return good
|
||||
@ -103,48 +102,6 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
|
||||
|
||||
return projects
|
||||
|
||||
def _check_project(self, project, package, rev):
|
||||
"""check if factory sources contain the package and revision. check head and history"""
|
||||
self.logger.debug("checking %s in %s"%(package, project))
|
||||
try:
|
||||
si = osc.core.show_package_meta(self.apiurl, project, package)
|
||||
except (urllib2.HTTPError, urllib2.URLError):
|
||||
si = None
|
||||
if si is None:
|
||||
self.logger.debug("new package")
|
||||
return None
|
||||
else:
|
||||
si = self.get_sourceinfo(project, package)
|
||||
if rev == si.verifymd5:
|
||||
self.logger.debug("srcmd5 matches")
|
||||
return True
|
||||
|
||||
self.logger.debug("%s not the latest version, checking history", rev)
|
||||
u = osc.core.makeurl(self.apiurl, [ 'source', project, package, '_history' ], { 'limit': self.history_limit })
|
||||
try:
|
||||
r = osc.core.http_GET(u)
|
||||
except urllib2.HTTPError as e:
|
||||
self.logger.debug("package has no history!?")
|
||||
return None
|
||||
|
||||
root = ET.parse(r).getroot()
|
||||
# we need this complicated construct as obs doesn't honor
|
||||
# the 'limit' parameter use above for obs interconnect:
|
||||
# https://github.com/openSUSE/open-build-service/issues/2545
|
||||
for revision, i in zip(reversed(root.findall('revision')), count()):
|
||||
node = revision.find('srcmd5')
|
||||
if node is None:
|
||||
continue
|
||||
self.logger.debug("checking %s"%node.text)
|
||||
if node.text == rev:
|
||||
self.logger.debug("got it, rev %s"%revision.get('rev'))
|
||||
return True
|
||||
if i == self.history_limit:
|
||||
break
|
||||
|
||||
self.logger.debug("srcmd5 not found in history either")
|
||||
return False
|
||||
|
||||
def _check_requests(self, project, package, rev):
|
||||
self.logger.debug("checking requests")
|
||||
prjprefix = ''
|
||||
|
12
leaper.py
12
leaper.py
@ -186,7 +186,7 @@ class Leaper(ReviewBot.ReviewBot):
|
||||
if devel_package is None:
|
||||
devel_package = package
|
||||
if self.is_package_in_project(devel_project, devel_package):
|
||||
if self.factory._check_project(devel_project, devel_package, src_srcinfo.verifymd5) == True:
|
||||
if self._check_matching_srcmd5(devel_project, devel_package, src_srcinfo.verifymd5) == True:
|
||||
self.logger.info('matching sources in {}/{}'.format(devel_project, devel_package))
|
||||
return True
|
||||
else:
|
||||
@ -266,7 +266,7 @@ class Leaper(ReviewBot.ReviewBot):
|
||||
return True
|
||||
# submitted from elsewhere but is in :Update
|
||||
else:
|
||||
good = self.factory._check_project('openSUSE:Leap:15.0:Update', target_package, src_srcinfo.verifymd5)
|
||||
good = self._check_matching_srcmd5('openSUSE:Leap:15.0:Update', target_package, src_srcinfo.verifymd5)
|
||||
if good:
|
||||
self.logger.info("submission found in 15.0")
|
||||
return good
|
||||
@ -285,7 +285,7 @@ class Leaper(ReviewBot.ReviewBot):
|
||||
if oldorigin.startswith('openSUSE:Factory'):
|
||||
# check if an attempt to switch to SLE package is made
|
||||
for sp in ('SP1:GA', 'SP1:Update'):
|
||||
good = self.factory._check_project('SUSE:SLE-15-{}'.format(sp), target_package, src_srcinfo.verifymd5)
|
||||
good = self._check_matching_srcmd5('SUSE:SLE-15-{}'.format(sp), target_package, src_srcinfo.verifymd5)
|
||||
if good:
|
||||
self.logger.info("request sources come from SLE")
|
||||
self.needs_release_manager = True
|
||||
@ -305,7 +305,7 @@ class Leaper(ReviewBot.ReviewBot):
|
||||
prj = 'openSUSE:Leap:{}:SLE-workarounds'.format(v)
|
||||
if self.is_package_in_project( prj, target_package):
|
||||
self.logger.info("found package in %s", prj)
|
||||
if not self.factory._check_project(prj,
|
||||
if not self._check_matching_srcmd5(prj,
|
||||
target_package,
|
||||
src_srcinfo.verifymd5):
|
||||
self.logger.info("sources in %s are NOT identical",
|
||||
@ -413,7 +413,7 @@ class Leaper(ReviewBot.ReviewBot):
|
||||
def _check_factory(self, target_package, src_srcinfo, target_project='openSUSE:Factory'):
|
||||
for subprj in ('', ':NonFree', ':Live'):
|
||||
prj = ''.join((target_project, subprj))
|
||||
good = self.factory._check_project(prj, target_package, src_srcinfo.verifymd5)
|
||||
good = self._check_matching_srcmd5(prj, target_package, src_srcinfo.verifymd5)
|
||||
if good:
|
||||
return good
|
||||
good = self.factory._check_requests(prj, target_package, src_srcinfo.verifymd5)
|
||||
@ -424,7 +424,7 @@ class Leaper(ReviewBot.ReviewBot):
|
||||
return False
|
||||
|
||||
def _check_project_and_request(self, project, target_package, src_srcinfo):
|
||||
good = self.factory._check_project(project, target_package, src_srcinfo.verifymd5)
|
||||
good = self._check_matching_srcmd5(project, target_package, src_srcinfo.verifymd5)
|
||||
if good:
|
||||
return good
|
||||
good = self.factory._check_requests(project, target_package, src_srcinfo.verifymd5)
|
||||
|
Loading…
x
Reference in New Issue
Block a user