diff --git a/ReviewBot.py b/ReviewBot.py index 9a7a29fe..ffab227c 100644 --- a/ReviewBot.py +++ b/ReviewBot.py @@ -28,6 +28,7 @@ from collections import namedtuple from osclib.memoize import memoize import signal import datetime +from collections import namedtuple try: from xml.etree import cElementTree as ET @@ -62,6 +63,31 @@ class ReviewBot(object): self.fallback_user = None self.fallback_group = None + # map of default config entries + self.config_defaults = { + # list of tuples (prefix, apiurl) + # set this if the obs instance maps another instance into it's + # namespace + 'project_namespace_api_map' : [ + ('openSUSE.org:', 'https://api.opensuse.org'), + ], + } + + self.load_config() + + def _load_config(self, handle = None): + d = self.config_defaults + y = yaml.safe_load(handle) if handle is not None else {} + return namedtuple('BotConfig', sorted(d.keys()))(*[ y.get(p, d[p]) for p in sorted(d.keys()) ]) + + def load_config(self, filename = None): + if filename: + fh = open(filename, 'r') + self.config = self._load_config(fh) + close(fh) + else: + self.config = self._load_config() + @property def review_mode(self): return self._review_mode @@ -364,6 +390,7 @@ class CommandLineInterface(cmdln.Cmdln): parser.add_option("--review-mode", dest='review_mode', choices=ReviewBot.REVIEW_CHOICES, help="review behavior") parser.add_option("--fallback-user", dest='fallback_user', metavar='USER', help="fallback review user") parser.add_option("--fallback-group", dest='fallback_group', metavar='GROUP', help="fallback review group") + parser.add_option('-c', '--config', dest='config', metavar='FILE', help='read config file FILE') return parser @@ -383,6 +410,8 @@ class CommandLineInterface(cmdln.Cmdln): osc.conf.config['debug'] = 1 self.checker = self.setup_checker() + if self.options.config: + self.checker.load_config(self.options.config) if self.options.review_mode: self.checker.review_mode = self.options.review_mode diff --git a/check_source_in_factory.py b/check_source_in_factory.py index 7024e406..7a9514a9 100755 --- a/check_source_in_factory.py +++ b/check_source_in_factory.py @@ -130,16 +130,25 @@ class FactorySourceChecker(ReviewBot.ReviewBot): def _check_requests(self, project, package, rev): self.logger.debug("checking requests") + prjprefix = '' try: - requests = osc.core.get_request_list(self.apiurl, project, package, None, ['new', 'review'], 'submit') + apiurl = self.apiurl + if self.config.project_namespace_api_map: + for prefix, url in self.config.project_namespace_api_map: + if project.startswith(prefix): + apiurl = url + prjprefix = prefix + project = project[len(prefix):] + break + requests = osc.core.get_request_list(apiurl, project, package, None, ['new', 'review'], 'submit') except (urllib2.HTTPError, urllib2.URLError): self.logger.error("caught exception while checking %s/%s", project, package) return None for req in requests: for a in req.actions: - si = self.get_sourceinfo(a.src_project, a.src_package, a.src_rev) - self.logger.debug("rq %s: %s/%s@%s"%(req.reqid, a.src_project, a.src_package, si.verifymd5)) + si = self.get_sourceinfo(prjprefix + a.src_project, a.src_package, a.src_rev) + self.logger.debug("rq %s: %s/%s@%s"%(req.reqid, prjprefix + a.src_project, a.src_package, si.verifymd5)) if si.verifymd5 == rev: if req.state.name == 'new': self.logger.info("sr#%s ok", req.reqid)