def __init__(self, config): self.config = config self.gerrit = Gerrit(config.gerrit_url, netrc=config.netrc) self.gerrit_admin = Gerrit(config.gerrit_url, netrc=config.netrc_admin) self.tag = 'autogenerated:review-o-matic' self.ignore_list = {} self.stats = TrollStats('{}'.format(self.config.stats_file))
def __init__(self, scheduler: JobScheduler, config=Dict[str, str]): """ Initialize a Gerrit based event source Args: @scheduler: scheduler to which job must be added @config: dictionary configuring the connection to gerrit. Allowed keys are 'hostname', 'username', 'port', 'keyfile' and 'clone_url' """ # Create connection to gerrit command line cfg = subdict(config, ['hostname', 'username', 'port', 'keyfile']) gerrit = Gerrit(**cfg) # determine settings for git clone when a project must be build clone_opts = {} clone_url = config.get('clone_url') if not clone_url: clone_url = 'ssh://{}@{}:{:d}'.format(gerrit.username, gerrit.hostname, int(gerrit.port)) if gerrit.keyfile: clone_opts['git_ssh_cmd'] = 'ssh -i ' + gerrit.keyfile super().__init__(scheduler) self.gerrit_instance = gerrit self.clone_url = clone_url self.clone_opts = clone_opts
def main(self): """ Send emails to requested users filed in the users folder (use '-a' for all users, or '-u user.address' for specific user) -- OR -- create a dump for specified users for debugging purposes. """ conf = Config() if conf.smtp.authentication and not self._gpg_recipient: logging.error("Cannot send email. SMTP authentication missing.") return cache = Cache(conf.cache_filename) cache.read() gerrit = Gerrit(cache, conf.gerrit_url) gerrit.get_cached_today() for user in self._users: try: user.add_content(gerrit.cache, conf.project, conf.gerrit_url) user.send_email( conf.project, conf.smtp, self._gpg_recipient, self._dry_run ) except IOError as err: logging.error("Could not send email for user %s: %s", user, str(err))
def test_add_project(self): """ Test that a project can be successfully managed """ # Felix wants to add a project, he uses the gerrit module to do this gerrit = Gerrit( url=self._url, auth_type='http', auth_id=self._admin_username, auth_pw=self._admin_password, ) created_project = gerrit.create_project( self._project, options={ 'description': 'my description', 'branches': ['master'], 'create_empty_commit': True, }, ) gotten_project = gerrit.get_project(self._project) # Using the same module he can get his project self.assertEqual(created_project, gotten_project) self.assertEqual(gotten_project.description, 'my description') # Felix uploads a new change change = gerrit.create_change(created_project, 'My change') # Wanting Mary to review the change, he adds her as a reviewer self.assertTrue(change.add_reviewer('mary')) # He can now see that Mary is a reviewer reviewers = change.list_reviewers() self.assertEqual(reviewers, [{ 'username': '******', 'approvals': { 'Code-Review': ' 0' }, 'name': 'Mary', '_account_id': 1000001 }]) # Felix made a mistake, Mary shouldn't be a reviewer. # He removes her. self.assertTrue(change.delete_reviewer('mary')) # He can now see that Mary is no longer a reviewer reviewers = change.list_reviewers() self.assertEqual(reviewers, []) # Happy with the change, Felix reviews and submits it change.set_review(labels={'Code-Review': '+2'}) change.submit_change() self.assertEqual(change.status, 'MERGED') # Not needing the repo anymore Felix removes it self.assertTrue(created_project.delete({'force': True})) # Felix can no longer get the project with self.assertRaises(ValueError): gerrit.get_project(self._project)
def start(self): self.gerrit = Gerrit(['zuul']) self.omqtt = OpenstackMqtt() self.omqtt.on_connect = self.on_connect self.omqtt.on_message = self.on_message self.omqtt.connect() self.omqtt.client.loop_forever()
def main(): """ See module docstring. """ conf = Config() gerrit = Gerrit(Cache(conf.cache_filename), conf.gerrit_url) gerrit.update()
def __init__(self, url, args): self.url = url self.args = args self.gerrit = Gerrit(url) self.tag = 'autogenerated:review-o-matic' self.blacklist = [] self.stats = { ReviewType.SUCCESS: 0, ReviewType.BACKPORT: 0, ReviewType.ALTERED_UPSTREAM: 0, ReviewType.MISSING_FIELDS: 0, ReviewType.MISSING_HASH: 0, ReviewType.INCORRECT_PREFIX: 0, ReviewType.FIXES_REF: 0 }
def add_gerrit_remote(self, name, location, project_name, fetch=True, fetch_changes=True): repo = Gerrit(name, location, project_name) self.addremote(repo, fetch=fetch) repo.local_track = TrackedRepo(name, self.directory, project_name) if fetch_changes: shell('git fetch %s +refs/changes/*:refs/remotes/%s/changes/*' % (name, name)) try: os.stat(".git/hooks/commit-msg") except OSError: shell('scp -p %s:hooks/commit-msg .git/hooks/' % location)
def __init__(self, url, args): self.url = url self.args = args self.gerrit = Gerrit(url) self.tag = 'autogenerated:review-o-matic' self.blacklist = {} self.stats = { str(ReviewType.SUCCESS): 0, str(ReviewType.BACKPORT): 0, str(ReviewType.ALTERED_UPSTREAM): 0, str(ReviewType.MISSING_FIELDS): 0, str(ReviewType.MISSING_HASH): 0, str(ReviewType.INVALID_HASH): 0, str(ReviewType.MISSING_AM): 0, str(ReviewType.INCORRECT_PREFIX): 0, str(ReviewType.FIXES_REF): 0 }
def __init__(self, last_cid, review, verify, ready): self.vote_review = 2 if review else None self.vote_verify = 1 if verify else None self.vote_trybot_ready = 1 if ready else None self.vote_cq_ready = 1 if ready else None self.tag = 'autogenerated:submit-o-matic' self.max_in_flight = 100 # 50 for the cq, 50 for the pre-cq self.in_flight = [] self.changes = [] self.gerrit = Gerrit('https://chromium-review.googlesource.com') last_change = self.gerrit.get_change(last_cid) self.changes = self.gerrit.get_related_changes(last_change) if not self.changes: self.changes = [last_change] else: self.changes.reverse()
def set_objects(config): """ Sets bugzilla and gerrit objects :param config: dict of configuration keys and values :return: bugzilla and gerrit objects """ # set bugzilla object bz_obj = Bugzilla( user=config['BZ_USER'], passwd=config['BZ_PASS'], url=config['BZ_URL'], ) # set gerrit object gerrit_obj = Gerrit(config['GERRIT_SRV']) return bz_obj, gerrit_obj
def __init__(self, last_cid, review, verify, ready, abandon, force_review, dry_run): self.abandon = abandon self.vote_review = 2 if review else None self.vote_verify = 1 if verify else None self.vote_cq_ready = ready self.force_review = force_review self.dry_run = dry_run self.tag = 'autogenerated:submit-o-matic' self.max_in_flight = 100 # 50 for the cq, 50 for the pre-cq self.in_flight = [] self.changes = [] self.gerrit = Gerrit('https://chromium-review.googlesource.com', use_internal=False) last_change = self.gerrit.get_change(last_cid) ancestor_changes = self.gerrit.get_ancestor_changes(last_change) for c in reversed(ancestor_changes): if c.status == 'NEW': self.changes.append(c) self.changes.append(last_change)
def __init__(self, host, port, username, pkey): self._gerrit = Gerrit(host, port, username, pkey) self._flow = _IDENTITY_FLOW