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
|
from osc import conf
|
||||||
import osc.core
|
import osc.core
|
||||||
import urllib2
|
import urllib2
|
||||||
|
from itertools import count
|
||||||
|
|
||||||
|
|
||||||
class ReviewBot(object):
|
class ReviewBot(object):
|
||||||
"""
|
"""
|
||||||
@ -574,6 +576,50 @@ class ReviewBot(object):
|
|||||||
|
|
||||||
self.comment_handler_remove()
|
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):
|
class CommentFromLogHandler(logging.Handler):
|
||||||
def __init__(self, level=logging.INFO):
|
def __init__(self, level=logging.INFO):
|
||||||
|
@ -35,7 +35,6 @@ import osc.core
|
|||||||
import urllib2
|
import urllib2
|
||||||
import yaml
|
import yaml
|
||||||
import ReviewBot
|
import ReviewBot
|
||||||
from itertools import count
|
|
||||||
|
|
||||||
|
|
||||||
class FactorySourceChecker(ReviewBot.ReviewBot):
|
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))
|
self.review_messages['declined'] = 'the package needs to be accepted in {} first'.format(' or '.join(projects))
|
||||||
for project in projects:
|
for project in projects:
|
||||||
self.logger.info("Checking in project %s" % project)
|
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:
|
if good:
|
||||||
self.logger.info("{} is in {}".format(target_package, project))
|
self.logger.info("{} is in {}".format(target_package, project))
|
||||||
return good
|
return good
|
||||||
@ -103,48 +102,6 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
|
|||||||
|
|
||||||
return projects
|
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):
|
def _check_requests(self, project, package, rev):
|
||||||
self.logger.debug("checking requests")
|
self.logger.debug("checking requests")
|
||||||
prjprefix = ''
|
prjprefix = ''
|
||||||
|
12
leaper.py
12
leaper.py
@ -186,7 +186,7 @@ class Leaper(ReviewBot.ReviewBot):
|
|||||||
if devel_package is None:
|
if devel_package is None:
|
||||||
devel_package = package
|
devel_package = package
|
||||||
if self.is_package_in_project(devel_project, devel_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))
|
self.logger.info('matching sources in {}/{}'.format(devel_project, devel_package))
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
@ -266,7 +266,7 @@ class Leaper(ReviewBot.ReviewBot):
|
|||||||
return True
|
return True
|
||||||
# submitted from elsewhere but is in :Update
|
# submitted from elsewhere but is in :Update
|
||||||
else:
|
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:
|
if good:
|
||||||
self.logger.info("submission found in 15.0")
|
self.logger.info("submission found in 15.0")
|
||||||
return good
|
return good
|
||||||
@ -285,7 +285,7 @@ class Leaper(ReviewBot.ReviewBot):
|
|||||||
if oldorigin.startswith('openSUSE:Factory'):
|
if oldorigin.startswith('openSUSE:Factory'):
|
||||||
# check if an attempt to switch to SLE package is made
|
# check if an attempt to switch to SLE package is made
|
||||||
for sp in ('SP1:GA', 'SP1:Update'):
|
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:
|
if good:
|
||||||
self.logger.info("request sources come from SLE")
|
self.logger.info("request sources come from SLE")
|
||||||
self.needs_release_manager = True
|
self.needs_release_manager = True
|
||||||
@ -305,7 +305,7 @@ class Leaper(ReviewBot.ReviewBot):
|
|||||||
prj = 'openSUSE:Leap:{}:SLE-workarounds'.format(v)
|
prj = 'openSUSE:Leap:{}:SLE-workarounds'.format(v)
|
||||||
if self.is_package_in_project( prj, target_package):
|
if self.is_package_in_project( prj, target_package):
|
||||||
self.logger.info("found package in %s", prj)
|
self.logger.info("found package in %s", prj)
|
||||||
if not self.factory._check_project(prj,
|
if not self._check_matching_srcmd5(prj,
|
||||||
target_package,
|
target_package,
|
||||||
src_srcinfo.verifymd5):
|
src_srcinfo.verifymd5):
|
||||||
self.logger.info("sources in %s are NOT identical",
|
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'):
|
def _check_factory(self, target_package, src_srcinfo, target_project='openSUSE:Factory'):
|
||||||
for subprj in ('', ':NonFree', ':Live'):
|
for subprj in ('', ':NonFree', ':Live'):
|
||||||
prj = ''.join((target_project, subprj))
|
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:
|
if good:
|
||||||
return good
|
return good
|
||||||
good = self.factory._check_requests(prj, target_package, src_srcinfo.verifymd5)
|
good = self.factory._check_requests(prj, target_package, src_srcinfo.verifymd5)
|
||||||
@ -424,7 +424,7 @@ class Leaper(ReviewBot.ReviewBot):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def _check_project_and_request(self, project, target_package, src_srcinfo):
|
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:
|
if good:
|
||||||
return good
|
return good
|
||||||
good = self.factory._check_requests(project, target_package, src_srcinfo.verifymd5)
|
good = self.factory._check_requests(project, target_package, src_srcinfo.verifymd5)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user