Handle separate lookup file in :NonFree
This commit is contained in:
parent
23392e575a
commit
bcaa610a67
@ -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")
|
||||
|
17
leaper.py
17
leaper.py
@ -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'
|
||||
|
@ -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()
|
||||
|
@ -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']))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user