neutron/tools/milestone-review-dash.py
rossella f585662a8d Neutron review tool use message instead of topics for bugs
After the upgrade of Gerrit the message field works as expected
so the review tool can use it instead of filtering using the
topic. This implies that having the bug number in the commit
message is enough for the patch to be included in the dashboard.

Change-Id: I6e61643fe862f842d731abaacfd1b18881e0c45e
2016-01-26 11:52:24 +00:00

143 lines
4.6 KiB
Python
Executable File

#!/usr/bin/env python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import argparse
import sys
from launchpadlib.launchpad import Launchpad
def is_milestone_valid(project, name):
milestone_names = []
for s in project.active_milestones:
milestone_names.append(s.name)
if name == s.name:
return True
print("No active milestone found")
print("List of active milestones %s" % milestone_names)
return False
def _search_task(project, **kwargs):
bugs = project.searchTasks(**kwargs)
if not bugs:
return
gerrit_query = "("
for b in bugs:
gerrit_query += ("message:%d OR " % b.bug.id)
gerrit_query = gerrit_query[:-4]
gerrit_query += ")\n\n"
return gerrit_query
def get_approved_rfe_query(project):
return _search_task(project, **{'tags': ['rfe-approved']})
def get_critical_bugs_query(project):
return _search_task(project,
**{'status': ["In Progress"], 'importance': ["Critical"]})
def get_high_bugs_query(project):
return _search_task(project,
**{'status': ["In Progress"], 'importance': ["High"]})
def get_specs_query(project, milestone):
query = "("
for s in project.valid_specifications:
if s.milestone is not None:
if s.milestone.name == milestone:
query += ("topic:bp/%s OR " % s.name)
if query == "(":
# no blueprint was found
return
query = query[:-4]
query += ")\n"
return query
def write_section(f, section_name, query):
print(section_name)
if query:
f.write("[section \"")
f.write(section_name)
f.write("\"]\n")
f.write("query = ")
f.write(query)
print(query)
else:
print("No result found\n")
def write_queries_for_project(f, project, milestone):
query = get_approved_rfe_query(project)
section_name = "Approved RFE %s" % project.name
write_section(f, section_name, query)
query = get_critical_bugs_query(project)
section_name = "Critical Bugs %s" % project.name
write_section(f, section_name, query)
query = get_high_bugs_query(project)
section_name = "High Bugs %s" % project.name
write_section(f, section_name, query)
query = get_specs_query(project, milestone)
section_name = "Blueprints %s" % project.name
write_section(f, section_name, query)
parser = argparse.ArgumentParser(
description='Create dashboard for critical/high bugs, approved rfe and'
' blueprints. A .dash file will be created in the current'
' folder that you can serve as input for gerrit-dash-creator.'
' The output of the script can be used to query Gerrit'
' directly.')
parser.add_argument('milestone', type=str, help='The release milestone')
parser.add_argument('-o', '--output', type=str, help='Output file')
args = parser.parse_args()
milestone = args.milestone
if args.output:
file_name = args.output
else:
file_name = milestone + '.dash'
cachedir = "~/.launchpadlib/cache/"
launchpad = Launchpad.login_anonymously('just testing', 'production', cachedir,
version="devel")
neutron = launchpad.projects['neutron']
neutron_client = launchpad.projects['python-neutronclient']
if not is_milestone_valid(neutron, milestone):
sys.exit()
with open(file_name, 'w') as f:
title = "[dashboard]\ntitle = Neutron %s Review Inbox\n" % milestone
f.write(title)
f.write("description = Review Inbox\n")
f.write("foreach = (project:openstack/neutron OR "
"project:openstack/python-neutronclient OR "
"project:openstack/neutron-specs OR "
"project:openstack/neutron-fwaas OR "
"project:openstack/neutron-lbaas OR "
"project:openstack/neutron-vpnaas) status:open NOT owner:self "
"NOT label:Workflow<=-1 "
"NOT label:Code-Review>=-2,self branch:master\n")
f.write("\n")
print("Querying Launchpad, this might take a while...")
write_queries_for_project(f, neutron, milestone)
write_queries_for_project(f, neutron_client, milestone)