pmr

Merge ~shawn111/pmr:one-shot into pmr:master

Proposed by Shawn Wang
Status: Merged
Approved by: Shawn Wang
Approved revision: d133b512a7d07a48e0c41a170816d031e8aa3711
Merged at revision: 21982ef72a320b776ebb57d14c6b2d658681c865
Proposed branch: ~shawn111/pmr:one-shot
Merge into: pmr:master
Diff against target: 66 lines (+27/-8)
1 file modified
process-merge-requests (+27/-8)
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+310165@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) wrote :

The requirement I've seen for --one-shot comes from Jenkaas, and my understanding is that in that context the requirement would be more precisely described as an option that causes pmr to land at most one merge request. This doesn't meet that requirement.

Could you push the check down into the loop in merge_mergable_on_project instead? I'd suggest that the option description should then become something like "Only check for approved merge requests once, and land at most one of them."

review: Needs Fixing
Revision history for this message
Shawn Wang (shawn111) wrote :

Hi Colin,

Yes, you are right, I should move the --one-shot option into merge_mergable_on_project.
And yes, it is for Jenkaas.

I also improve the check for project_list with parser.error.

Could you help me review it again?

Thanks,
Shawn

Revision history for this message
Colin Watson (cjwatson) wrote :

Looks fine now, thanks, just a few style tweaks.

review: Approve

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..9f6b561 100755
--- a/process-merge-requests
+++ b/process-merge-requests
@@ -258,7 +258,7 @@ def merge_bzr_proposal(branch_merge_proposal):
258 _logger.info(_("Bzr merge completed"))258 _logger.info(_("Bzr merge completed"))
259259
260260
261def merge_mergable_on_project(project):261def merge_mergable_on_project(project, one_shot=False):
262 """Merge all approved merge requests on a given project."""262 """Merge all approved merge requests on a given project."""
263 _logger.debug("Inspecting merge requests on project: %s", project.web_link)263 _logger.debug("Inspecting merge requests on project: %s", project.web_link)
264 num_seen = 0264 num_seen = 0
@@ -278,6 +278,9 @@ def merge_mergable_on_project(project):
278 else:278 else:
279 assert branch_merge_proposal.target_git_repository_link is None279 assert branch_merge_proposal.target_git_repository_link is None
280 merge_bzr_proposal(branch_merge_proposal)280 merge_bzr_proposal(branch_merge_proposal)
281 if one_shot:
282 _logger.info(_("Only landing one request in one-shot mode."))
283 return
281 if num_seen == 0:284 if num_seen == 0:
282 _logger.debug(_("There are no merge proposals present at this time"))285 _logger.debug(_("There are no merge proposals present at this time"))
283286
@@ -310,19 +313,35 @@ def main():
310 parser.add_argument(313 parser.add_argument(
311 'project_list', metavar=_('PROJECT'), nargs="+",314 'project_list', metavar=_('PROJECT'), nargs="+",
312 help=_("name of the launchpad project to process"))315 help=_("name of the launchpad project to process"))
316 parser.add_argument(
317 "--one-shot", action='store_true', default=False,
318 help=_("Only check for approved merge requests once, "
319 "and land at most one of them."))
313 ns = parser.parse_args()320 ns = parser.parse_args()
314 _logger.info(_("Logging into launchpad.net"))321 _logger.info(_("Logging into launchpad.net"))
315 lp = Launchpad.login_with('process-merge-requests', ns.lp_api_url)322 lp = Launchpad.login_with('process-merge-requests', ns.lp_api_url)
323
324 projects = []
325 for project_name in ns.project_list:
326 try:
327 project = lp.projects[project_name]
328 except KeyError:
329 raise parser.error(
330 "No such project: %s" % project_name)
331 projects.append(project)
332
333 if ns.one_shot:
334 if len(ns.project_list) > 1:
335 raise parser.error(
336 "The --one-shot option may only be used with a single project.")
337 merge_mergable_on_project(projects[0], one_shot=True)
338 return
339
316 _logger.info(_("Checking for new things to land every minute..."))340 _logger.info(_("Checking for new things to land every minute..."))
317 try:341 try:
318 while True:342 while True:
319 for project_name in ns.project_list:343 for project in projects:
320 try:344 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)345 time.sleep(60)
327 except KeyboardInterrupt:346 except KeyboardInterrupt:
328 pass347 pass

Subscribers

People subscribed via source and target branches

to all changes: