class Leaper(ReviewBot.ReviewBot): def __init__(self, *args, **kwargs): 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) # 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.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() if len(req.actions) != 1: msg = "only one action per request please" self.review_messages['declined'] = msg return False # if the fallback reviewer created the request she probably # knows what she does :-) if self.fallback_user and req.get_creator() == self.fallback_user: self.logger.debug("skip fallback review") return True has_upstream_sources = ReviewBot.ReviewBot.check_one_request(self, req) has_correct_maintainer = self.maintbot.check_one_request(req) # not reviewed yet? if has_upstream_sources is None: return None self.logger.debug("upstream sources: {}, maintainer ok: {}".format(has_upstream_sources, has_correct_maintainer)) 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) r = self.factory.check_one_request(req) if r == True: self.review_messages['declined'] += '\nsource is in Factory though' elif r == None: self.logger.info("waiting for review") return None else: r = self.factory_nonfree.check_one_request(req) if r == True: self.review_messages['declined'] += '\nsource is in Factory:NonFree though' elif r == None: self.logger.info("waiting for review") return None # shouldn't happen actually if has_correct_maintainer != True: self.review_messages['declined'] += '\nMaintainer check failed' return False return True