Show open reviews on gerrit for projects

When listing the status for the different projects,
also show the open reviews. This is useful to find similar
reviews for a given project.

Change-Id: Id9421148e82c27b5dbe8227f2a44e35768379532
This commit is contained in:
Thomas Bechtold 2016-12-04 18:36:06 +01:00
parent a535302317
commit 79fc3575bd
1 changed files with 51 additions and 3 deletions

View File

@ -23,9 +23,16 @@ import os
from packaging import version
from packaging.requirements import Requirement
import re
import requests
import sys
import yaml
import json
# the current 'in development' release
CURRENT_MASTER = 'ocata'
# the host where to query for open reviews
GERRIT_HOST = 'https://review.openstack.org'
# do some project name corrections if needed
projects_mapping = {
@ -36,7 +43,7 @@ projects_mapping = {
V = namedtuple('V', ['release', 'upper_constraints', 'rpm_packaging_pkg',
'obs_published'])
'reviews', 'obs_published'])
def process_args():
@ -143,7 +150,8 @@ def _pretty_table(release, projects, include_obs):
fn = ['name',
'release (%s)' % release,
'u-c (%s)' % release,
'rpm packaging (%s)' % release]
'rpm packaging (%s)' % release,
'reviews']
if include_obs:
fn += ['obs']
fn += ['comment']
@ -162,7 +170,8 @@ def _pretty_table(release, projects, include_obs):
comment = 'needs downgrade'
else:
comment = ''
row = [p_name, x.release, x.upper_constraints, x.rpm_packaging_pkg]
row = [p_name, x.release, x.upper_constraints, x.rpm_packaging_pkg,
x.reviews]
if include_obs:
row += [x.obs_published]
row += [comment]
@ -215,6 +224,35 @@ def read_upper_constraints(filename):
return uc
def _gerrit_open_reviews_per_file(release):
"""Returns a dict with filename as key and a list of review numbers
where this file is modified as value"""
# NOTE: gerrit has a strange first line in the returned data
gerrit_strip = ')]}\'\n'
data = dict()
if release == CURRENT_MASTER:
branch = 'master'
else:
branch = 'stable/%s' % release
url_reviews = GERRIT_HOST + '/changes/?q=status:open+project:openstack/rpm-packaging+branch:%s' % branch
res_reviews = requests.get(url_reviews)
if res_reviews.status_code == 200:
data_reviews = json.loads(res_reviews.text.lstrip(gerrit_strip))
for review in data_reviews:
url_files = GERRIT_HOST + '/changes/%s/revisions/current/files/' % review['change_id']
res_files = requests.get(url_files)
if res_files.status_code == 200:
data_files = json.loads(res_files.text.lstrip(gerrit_strip))
for f in data_files.keys():
# extract project name
if f.startswith('openstack/') and f.endswith('spec.j2'):
f = f.split('/')[1]
data.setdefault(f, []).append(review['_number'])
return data
def main():
args = process_args()
@ -223,6 +261,9 @@ def main():
upper_constraints = read_upper_constraints(
os.path.join(args['requirements-git-dir'], 'upper-constraints.txt'))
# open reviews for the given release
open_reviews = _gerrit_open_reviews_per_file(args['release'])
# directory which contains all yaml files from the openstack/release git dir
releases_yaml_dir = os.path.join(args['releases-git-dir'], 'deliverables',
args['release'])
@ -259,10 +300,17 @@ def main():
v_obs_published = find_openbuildservice_pkg_version(
args['obs_published_xml'], project_name)
# reviews for the given project
if project_name in open_reviews:
project_reviews = open_reviews[project_name]
else:
project_reviews = []
# add both versions to the project dict
projects[project_name] = V(v_release,
v_upper_constraints,
v_rpm_packaging_pkg,
project_reviews,
v_obs_published)
include_obs = args['obs_published_xml']