예제 #1
0
 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
예제 #3
0
    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))
예제 #4
0
    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()
예제 #6
0
def main():
    """
    See module docstring.
    """

    conf = Config()
    gerrit = Gerrit(Cache(conf.cache_filename), conf.gerrit_url)
    gerrit.update()
예제 #7
0
 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
     }
예제 #8
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)
예제 #9
0
 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
     }
예제 #10
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()
예제 #11
0
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
예제 #12
0
    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)
예제 #13
0
파일: bruv.py 프로젝트: dimakuz/bruv
 def __init__(self, host, port, username, pkey):
     self._gerrit = Gerrit(host, port, username, pkey)
     self._flow = _IDENTITY_FLOW