Пример #1
0
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