Handle separate lookup file in :NonFree

This commit is contained in:
Ludwig Nussel 2016-06-09 17:30:43 +02:00
parent 23392e575a
commit bcaa610a67
4 changed files with 43 additions and 29 deletions

View File

@ -52,14 +52,12 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
self.factory = "openSUSE:Factory"
ReviewBot.ReviewBot.__init__(self, *args, **kwargs)
self.review_messages = { 'accepted' : 'ok', 'declined': 'the package needs to be accepted in Factory first' }
self.lookup = None
self.lookup = {}
def parse_lookup(self, project):
self.lookup = yaml.safe_load(self._load_lookup_file(project))
self.lookup.update(yaml.safe_load(self._load_lookup_file(project)))
def _load_lookup_file(self, prj):
if prj.endswith(':NonFree'):
prj = prj[:-len(':NonFree')]
return osc.core.http_GET(osc.core.makeurl(self.apiurl,
['source', prj, '00Meta', 'lookup.yml']))
@ -71,15 +69,19 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
# handle here to avoid crashing on the next line
self.logger.info("Could not get source info for %s/%s@%s" % (src_project, src_package, src_rev))
return False
good = self._check_factory(src_srcinfo.verifymd5, target_package)
project = self._package_get_upstream_project(target_package)
if project is None:
self.logger.error("no upstream project found for {}, can't check".format(package))
return False
good = self._check_project(project, target_package, src_srcinfo.verifymd5)
if good:
self.logger.info("%s is in Factory"%target_package)
self.logger.info("{} is in {}".format(target_package, project))
return good
good = self._check_requests(src_srcinfo.verifymd5, target_package)
good = self._check_requests(project, target_package, src_srcinfo.verifymd5)
if good:
self.logger.info("%s already reviewed for Factory"%target_package)
self.logger.info("{} already reviewed for {}".format(target_package, project))
return good
@ -91,11 +93,8 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
return self.factory
def _check_factory(self, rev, package):
def _check_project(self, project, package, rev):
"""check if factory sources contain the package and revision. check head and history"""
project = self._package_get_upstream_project(package)
if project is None:
return False
self.logger.debug("checking %s in %s"%(package, project))
try:
si = osc.core.show_package_meta(self.apiurl, project, package)
@ -131,13 +130,9 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
self.logger.debug("srcmd5 not found in history either")
return False
def _check_requests(self, rev, package):
def _check_requests(self, project, package, rev):
self.logger.debug("checking requests")
try:
project = self._package_get_upstream_project(package)
if project is None:
self.logger.error("no upstream project found for {}, can't check requests".format(package))
return None
requests = osc.core.get_request_list(self.apiurl, project, package, None, ['new', 'review'], 'submit')
except (urllib2.HTTPError, urllib2.URLError):
self.logger.debug("none request")

View File

@ -45,11 +45,16 @@ class Leaper(ReviewBot.ReviewBot):
ReviewBot.ReviewBot.__init__(self, *args, **kwargs)
self.maintbot = MaintenanceChecker(*args, **kwargs)
# for FactorySourceChecker
self.lookup_checker = FactorySourceChecker(*args, **kwargs)
self.lookup_checker.parse_lookup('openSUSE:Leap:42.2')
self.lookup_checker.parse_lookup('openSUSE:Leap:42.2:NonFree')
self.factory = FactorySourceChecker(*args, **kwargs)
self.factory.parse_lookup('openSUSE:Leap:42.2')
# XXX: FactorySourceChecker should be able to handle that itself
self.factory_nonfree = FactorySourceChecker(*args, **kwargs)
self.factory_nonfree.factory = 'openSUSE:Factory:NonFree'
def check_source_submission(self, src_project, src_package, src_rev, target_project, target_package):
return self.factory.check_source_submission(src_project, src_package, src_rev, target_project, target_package)
return self.lookup_checker.check_source_submission(src_project, src_package, src_rev, target_project, target_package)
def check_one_request(self, req):
self.review_messages = self.DEFAULT_REVIEW_MESSAGES.copy()
@ -77,6 +82,14 @@ class Leaper(ReviewBot.ReviewBot):
if has_upstream_sources != True or has_correct_maintainer != True:
if has_upstream_sources != True:
self.review_messages['declined'] += '\nOrigin project changed'
pkg = req.actions[0].tgt_package
prj = self.lookup_checker._package_get_upstream_project(pkg)
if prj:
self.review_messages['declined'] += '(was {})'.format(prj)
if self.factory.check_one_request(req):
self.review_messages['declined'] += '\nsource is in Factory though'
elif self.factory_nonfree.check_one_request(req):
self.review_messages['declined'] += '\nsource is in Factory:NonFree though'
# shouldn't happen actually
if has_correct_maintainer != True:
self.review_messages['declined'] += '\nMaintainer check failed'

View File

@ -59,11 +59,14 @@ class Manager42(object):
'SUSE:SLE-12:GA',
'openSUSE:Leap:42.1:Update',
'openSUSE:Leap:42.1',
'openSUSE:Leap:42.1:NonFree:Update',
'openSUSE:Leap:42.1:NonFree',
'openSUSE:Factory',
'openSUSE:Factory:NonFree',
'openSUSE:Leap:42.2:SLE-workarounds'
]
self.parse_lookup()
self.parse_lookup(self.from_prj)
self.fill_package_meta()
self.packages = dict()
for project in [self.from_prj] + self.project_preference_order:
@ -80,24 +83,29 @@ class Manager42(object):
packages.add(title[3:].split(' ')[0])
return sorted(packages)
def parse_lookup(self):
self.lookup = yaml.safe_load(self._load_lookup_file())
def parse_lookup(self, project):
self.lookup_changes = 0
self.lookup = {}
try:
self.lookup = yaml.safe_load(self._load_lookup_file(project))
except urllib2.HTTPError, e:
if e.code != 404:
raise
def _load_lookup_file(self):
def _load_lookup_file(self, prj):
return self.cached_GET(makeurl(self.apiurl,
['source', self.from_prj, '00Meta', 'lookup.yml']))
['source', prj, '00Meta', 'lookup.yml']))
def _put_lookup_file(self, data):
def _put_lookup_file(self, prj, data):
return http_PUT(makeurl(self.apiurl,
['source', self.from_prj, '00Meta', 'lookup.yml']), data=data)
['source', prj, '00Meta', 'lookup.yml']), data=data)
def store_lookup(self):
if self.lookup_changes == 0:
logger.info('no change to lookup.yml')
return
data = yaml.dump(self.lookup, default_flow_style=False, explicit_start=True)
self._put_lookup_file(data)
self._put_lookup_file(self.from_prj, data)
self.lookup_changes = 0
@memoize()

View File

@ -199,8 +199,6 @@ class UpdateCrawler(object):
def _load_lookup_file(self):
prj = self.to_prj
if prj.endswith(':NonFree'):
prj = prj[:-len(':NonFree')]
return self.cached_GET(makeurl(self.apiurl,
['source', prj, '00Meta', 'lookup.yml']))