Merge "Allow configurable mappings to different LP projects"
diff --git a/jeepyb/cmd/notify_impact.py b/jeepyb/cmd/notify_impact.py
index 7038c8f..b6e123c 100644
--- a/jeepyb/cmd/notify_impact.py
+++ b/jeepyb/cmd/notify_impact.py
@@ -22,7 +22,7 @@
# --change-url https://review.openstack.org/55607 --project nova/ \
# --branch master --commit c262de4417d48be599c3a7496ef94de5c84b188c \
# --impact DocImpact --dest-address none@localhost --dryrun \
-# --ignore-duplicates \
+# --ignore-duplicates --config foo.yaml \
# change-merged
#
# But you'll need a git repository at /home/gerrit2/review_site/git/nova.git
@@ -41,6 +41,8 @@
from launchpadlib import uris
import yaml
+from jeepyb import projects
+
BASE_DIR = '/home/gerrit2/review_site'
EMAIL_TEMPLATE = """
Hi, I'd like you to take a look at this patch for potential
@@ -83,7 +85,10 @@
self.lpconn = lpconn
def create(self, project, bug_title, bug_descr, args):
- print('I would have created a bug, but I am in dry run mode')
+ print('I would have created a bug in %s, but I am in dry run mode.\n\n'
+ 'Title: %s\n'
+ 'Description:\n'
+ '%s' % (project, bug_title, bug_descr))
return None, None
def subscribe(self, buginfo, subscriber):
@@ -91,14 +96,29 @@
'but I am in dry run mode' % subscriber)
-def create_bug(git_log, args, lp_project, config):
+def create_bug(git_log, args, config):
"""Create a bug for a change.
- Create a launchpad bug in lp_project, titled with the first line of
+ Create a launchpad bug in a LP project, titled with the first line of
the git commit message, with the content of the git_log prepended
with the Gerrit review URL. Tag the bug with the name of the repository
it came from. Don't create a duplicate bug. Returns link to the bug.
"""
+
+ # Determine what LP project to use
+ prelude = ''
+ project_name = args.project.rstrip('/')
+ lp_project = projects.docimpact_target(project_name)
+ if lp_project == 'unknown':
+ prelude = ('\n\nDear documentation bug triager. This bug was created '
+ 'here because we did not know how to map the project name '
+ '"%s" to a launchpad project name. This indicates that the '
+ 'notify_impact config needs tweaks. You can ask the '
+ 'OpenStack infra team (#openstack-infra on freenode) for '
+ 'help if you need to.\n'
+ % args.project)
+ lp_project = 'openstack-manuals'
+
lpconn = launchpad.Launchpad.login_with(
'Gerrit User Sync',
uris.LPNET_SERVICE_ROOT,
@@ -111,9 +131,9 @@
else:
actions = BugActionsReal(lpconn)
- lines_in_log = git_log.split("\n")
+ lines_in_log = git_log.split('\n')
bug_title = lines_in_log[4]
- bug_descr = args.change_url + '\n' + git_log
+ bug_descr = args.change_url + prelude + '\n' + git_log
project = lpconn.projects[lp_project]
# check for existing bugs by searching for the title, to avoid
@@ -153,7 +173,7 @@
"""
if args.impact.lower() == 'docimpact':
if args.hook == "change-merged":
- create_bug(git_log, args, 'openstack-manuals', config)
+ create_bug(git_log, args, config)
return
email_content = EMAIL_TEMPLATE % (args.impact,
@@ -206,7 +226,8 @@
parser.add_argument('--impact', default=None)
parser.add_argument('--dest-address', default=None)
- # Automatic config
+ # Automatic config: config contains a mapping of email addresses to
+ # subscribers.
parser.add_argument('--config', type=argparse.FileType('r'),
default=None)
diff --git a/jeepyb/projects.py b/jeepyb/projects.py
index 083da4d..da898b9 100644
--- a/jeepyb/projects.py
+++ b/jeepyb/projects.py
@@ -64,6 +64,10 @@
return direct or _hardcoded_is_direct_release(project_full_name)
+def docimpact_target(project_full_name):
+ return registry.get('docimpact-group', 'unknown')
+
+
# The following functions should be deleted when projects.yaml will be updated
def _hardcoded_is_direct_release(project_full_name):
diff --git a/jeepyb/utils.py b/jeepyb/utils.py
index 5ff3830..92e0445 100644
--- a/jeepyb/utils.py
+++ b/jeepyb/utils.py
@@ -45,3 +45,6 @@
def __getitem__(self, item):
return self.configs[item]
+
+ def get(self, item, default=None):
+ return self.configs.get(item, default)