diff --git a/jeepyb/cmd/notify_impact.py b/jeepyb/cmd/notify_impact.py index b089cbb..55e44c8 100644 --- a/jeepyb/cmd/notify_impact.py +++ b/jeepyb/cmd/notify_impact.py @@ -36,16 +36,7 @@ Hi, I'd like you to take a look at this patch for potential Log: %s """ -DOC_EMAIL_TEMPLATE = """ -Hi, I'd like you to take a look at this patch for potential -%s. -%s -Log: -%s -Automatically generated bug (please review): -%s -""" GERRIT_CACHE_DIR = os.path.expanduser( os.environ.get('GERRIT_CACHE_DIR', '~/.launchpadlib/cache')) @@ -54,41 +45,52 @@ GERRIT_CREDENTIALS = os.path.expanduser( '~/.launchpadlib/creds')) +def create_bug(git_log, args, lp_project): + """Create a bug for a change. + + Create a launchpad bug in 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. + """ + lpconn = launchpad.Launchpad.login_with( + 'Gerrit User Sync', + uris.LPNET_SERVICE_ROOT, + GERRIT_CACHE_DIR, + credentials_file=GERRIT_CREDENTIALS, + version='devel') + + lines_in_log = git_log.split("\n") + bug_title = lines_in_log[4] + bug_descr = args.change_url + '\n' + git_log + project = lpconn.projects[lp_project] + # check for existing bugs by searching for the title, to avoid + # creating multiple bugs per review + potential_dupes = project.searchTasks(search_text=bug_title) + if len(potential_dupes) == 0: + buginfo = lpconn.bugs.createBug( + target=project, title=bug_title, + description=bug_descr, tags=args.project.split('/')[1]) + buglink = buginfo.web_link + + return buglink + + def process_impact(git_log, args): """Process DocImpact flag. If the 'DocImpact' flag is present, create a new documentation bug in the openstack-manuals launchpad project based on the git_log, then - (and for non-documentation impacts) notify the mailing list of impact + (and for non-documentation impacts) notify the mailing list of impact, + unless a bug was created. """ if args.impact.lower() == 'docimpact': - lpconn = launchpad.Launchpad.login_with( - 'Gerrit User Sync', - uris.LPNET_SERVICE_ROOT, - GERRIT_CACHE_DIR, - credentials_file=GERRIT_CREDENTIALS, - version='devel') - lines_in_log = git_log.split("\n") - bug_title = lines_in_log[4] - bug_descr = args.change_url + '\n' + git_log - project_name = 'openstack-manuals' - project = lpconn.projects[project_name] + buglink = create_bug(git_log, args, 'openstack-manuals') + if buglink is not None: + return - # check for existing bugs by searching for the title, to avoid - # creating multiple bugs per review - potential_dupes = project.searchTasks(search_text=bug_title) - - if len(potential_dupes) == 0: - buginfo = lpconn.bugs.createBug( - target=project, title=bug_title, - description=bug_descr, tags=args.project.split('/')[1]) - buglink = buginfo.web_link - email_content = DOC_EMAIL_TEMPLATE % (args.impact, - args.change_url, - git_log, buglink) - else: - email_content = EMAIL_TEMPLATE % (args.impact, - args.change_url, git_log) + email_content = EMAIL_TEMPLATE % (args.impact, + args.change_url, git_log) msg = text.MIMEText(email_content) msg['Subject'] = '[%s] %s review request change %s' % \