pmr

Merge ~cjwatson/pmr:better-git-commit-messages-2 into ~thomir-deactivatedaccount/pmr:master

Proposed by Colin Watson
Status: Needs review
Proposed branch: ~cjwatson/pmr:better-git-commit-messages-2
Merge into: ~thomir-deactivatedaccount/pmr:master
Diff against target: 87 lines (+38/-11)
1 file modified
process-merge-requests (+38/-11)
Reviewer Review Type Date Requested Status
Thomi Richards Pending
Review via email: mp+307177@code.launchpad.net

Commit message

Refine git commit messages further

This moves the commit message provided by the user to the start, which
means it will show up more prominently in cgit and the like. The extra
information added by pmr is still present in git-idiomatic key/value
pairs at the end, and it'll be easier to extend if we want to add other
things there later.

Setting a commit message is now required.

Description of the change

Moves the commit message provided by the user to the start, which means it will show up more prominently in cgit and the like. The extra information added by pmr is still present in git-idiomatic key/value pairs at the end, and it'll be easier to extend if we want to add other things there later.

Setting a commit message is now required.

To post a comment you must log in.
58d1ef6... by Shawn Wang

add one-shot option

1061013... by Shawn Wang

move one_shot option into merge_mergable_on_project

d133b51... by Shawn Wang

a few style tweaks.

21982ef... by Shawn Wang

Merge #310165 from ~shawn111/pmr:one-shot

Unmerged commits

c52ee7d... by Colin Watson

Refine git commit messages further

This moves the commit message provided by the user to the start, which
means it will show up more prominently in cgit and the like. The extra
information added by pmr is still present in git-idiomatic key/value
pairs at the end, and it'll be easier to extend if we want to add other
things there later.

21982ef... by Shawn Wang

Merge #310165 from ~shawn111/pmr:one-shot

d133b51... by Shawn Wang

a few style tweaks.

1061013... by Shawn Wang

move one_shot option into merge_mergable_on_project

58d1ef6... by Shawn Wang

add one-shot option

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/process-merge-requests b/process-merge-requests
index 02b59a6..69c1d04 100755
--- a/process-merge-requests
+++ b/process-merge-requests
@@ -165,9 +165,17 @@ def merge_git_proposal(branch_merge_proposal):
165 target_url = get_rw_git_url(branch_merge_proposal.target_git_repository)165 target_url = get_rw_git_url(branch_merge_proposal.target_git_repository)
166 target_path = branch_merge_proposal.target_git_path166 target_path = branch_merge_proposal.target_git_path
167 target_branch = target_path.split('/')[-1]167 target_branch = target_path.split('/')[-1]
168 commit_message = 'Merge #{0} from {1}'.format(merge_id, source_identity)168 if branch_merge_proposal.commit_message is None:
169 if branch_merge_proposal.commit_message is not None:169 branch_merge_proposal.createComment(
170 commit_message += '\n\n' + branch_merge_proposal.commit_message170 subject='Commit message not set', vote='Needs Fixing',
171 content='You must set a commit message.')
172 branch_merge_proposal.setStatus(
173 status='Needs review', revid=reviewed_revid)
174 _logger.error("Commit message not set")
175 return
176 commit_message = '{0}\n\nBranch: {1}\nMerge-Proposal: {2}'.format(
177 branch_merge_proposal.commit_message.rstrip('\n'),
178 source_identity, merge_id)
171 _logger.info(_("Setting up git merge"))179 _logger.info(_("Setting up git merge"))
172 _logger.info(_(" - source: %s:%s"), source_url, source_path)180 _logger.info(_(" - source: %s:%s"), source_url, source_path)
173 _logger.info(_(" revision: %s"), reviewed_revid)181 _logger.info(_(" revision: %s"), reviewed_revid)
@@ -258,7 +266,7 @@ def merge_bzr_proposal(branch_merge_proposal):
258 _logger.info(_("Bzr merge completed"))266 _logger.info(_("Bzr merge completed"))
259267
260268
261def merge_mergable_on_project(project):269def merge_mergable_on_project(project, one_shot=False):
262 """Merge all approved merge requests on a given project."""270 """Merge all approved merge requests on a given project."""
263 _logger.debug("Inspecting merge requests on project: %s", project.web_link)271 _logger.debug("Inspecting merge requests on project: %s", project.web_link)
264 num_seen = 0272 num_seen = 0
@@ -278,6 +286,9 @@ def merge_mergable_on_project(project):
278 else:286 else:
279 assert branch_merge_proposal.target_git_repository_link is None287 assert branch_merge_proposal.target_git_repository_link is None
280 merge_bzr_proposal(branch_merge_proposal)288 merge_bzr_proposal(branch_merge_proposal)
289 if one_shot:
290 _logger.info(_("Only landing one request in one-shot mode."))
291 return
281 if num_seen == 0:292 if num_seen == 0:
282 _logger.debug(_("There are no merge proposals present at this time"))293 _logger.debug(_("There are no merge proposals present at this time"))
283294
@@ -310,19 +321,35 @@ def main():
310 parser.add_argument(321 parser.add_argument(
311 'project_list', metavar=_('PROJECT'), nargs="+",322 'project_list', metavar=_('PROJECT'), nargs="+",
312 help=_("name of the launchpad project to process"))323 help=_("name of the launchpad project to process"))
324 parser.add_argument(
325 "--one-shot", action='store_true', default=False,
326 help=_("Only check for approved merge requests once, "
327 "and land at most one of them."))
313 ns = parser.parse_args()328 ns = parser.parse_args()
314 _logger.info(_("Logging into launchpad.net"))329 _logger.info(_("Logging into launchpad.net"))
315 lp = Launchpad.login_with('process-merge-requests', ns.lp_api_url)330 lp = Launchpad.login_with('process-merge-requests', ns.lp_api_url)
331
332 projects = []
333 for project_name in ns.project_list:
334 try:
335 project = lp.projects[project_name]
336 except KeyError:
337 raise parser.error(
338 "No such project: %s" % project_name)
339 projects.append(project)
340
341 if ns.one_shot:
342 if len(ns.project_list) > 1:
343 raise parser.error(
344 "The --one-shot option may only be used with a single project.")
345 merge_mergable_on_project(projects[0], one_shot=True)
346 return
347
316 _logger.info(_("Checking for new things to land every minute..."))348 _logger.info(_("Checking for new things to land every minute..."))
317 try:349 try:
318 while True:350 while True:
319 for project_name in ns.project_list:351 for project in projects:
320 try:352 merge_mergable_on_project(project)
321 project = lp.projects[project_name]
322 except KeyError:
323 _logger.error(_("No such project: %s"), project_name)
324 else:
325 merge_mergable_on_project(project)
326 time.sleep(60)353 time.sleep(60)
327 except KeyboardInterrupt:354 except KeyboardInterrupt:
328 pass355 pass

Subscribers

People subscribed via source and target branches

to all changes: