Add the ability to get reviewer stats across all stable branches

This adds a special "all" stable branch value handling for the
reviewers entrypoint. This allows one to do something like:

$ reviewers --stable all --days 90 --output ~/stable-all-reviewers-90

It would be nice to be able to specify a specific project, like nova,
with --stable but that is another change for another day.

Change-Id: I045e982e587c9fb2c53a9cb587f944f09c2c5793
Matt Riedemann 6 years ago
parent 548a85d2a9
commit 73d434b28c

@ -34,3 +34,14 @@ object containing the following keys:
* core-team: A list of Gerrit usernames to consider as core reviewers across
* lp_projects: A list of Launchpad project ids to include.
#. Get reviewer stats for the last 14 days (default) in the stable/pike branch:
``$ reviewers --stable pike --output ~/reviewers-stable-pike-14``
#. Get reviewer stats for the last 90 days across all stable branches:
``$ reviewers --stable all --days 90 --output ~/reviewers-stable-all-90``

@ -136,7 +136,11 @@ def write_pretty(reviewer_data, file_obj, options, reviewers, projects,
project_name = projects[0]['name']
if options.stable:
project_name = "stable/%s" % (options.stable)
# Handle the wildcare case.
if options.stable.strip() == 'all':
project_name = 'all open stable branches'
project_name = "stable/%s" % (options.stable)
'Reviews for the last %d days in %s\n'
% (options.days, project_name))
@ -244,7 +248,8 @@ def main(argv=None):
'-s', '--stable', default='', metavar='BRANCH',
help='Generate stats for the specified stable BRANCH ("havana") '
'across all integrated projects')
'across all integrated projects. Specify "all" for all '
'open stable branches.')
'-o', '--output', default='-',
help='Where to write output. If - stdout is used and only one output '

@ -111,7 +111,8 @@ def get_changes(projects, ssh_user, ssh_key, only_open=False, stable='',
:param bool only_open: If True, get only the not closed reviews.
:param str stable:
Name of the stable branch. If empty string, the changesets are not
filtered by any branch.
filtered by any branch. The special value "all" is handled to get
changes for all open stable branches.
:return: List of de-serialized JSON changeset data as returned by gerrit.
:rtype: list
@ -189,7 +190,11 @@ def get_changes(projects, ssh_user, ssh_key, only_open=False, stable='',
if only_open:
cmd += ' status:open'
if stable:
cmd += ' branch:stable/%s' % stable
# Check for "all" to query all stable branches.
if stable.strip() == 'all':
cmd += ' branch:^stable/.*'
cmd += ' branch:stable/%s' % stable
if new_count:
cmd += ' --start %d' % new_count