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
1diff --git a/process-merge-requests b/process-merge-requests
2index 02b59a6..9f6b561 100755
3--- a/process-merge-requests
4+++ b/process-merge-requests
5@@ -258,7 +258,7 @@ def merge_bzr_proposal(branch_merge_proposal):
6 _logger.info(_("Bzr merge completed"))
7
8
9-def merge_mergable_on_project(project):
10+def merge_mergable_on_project(project, one_shot=False):
11 """Merge all approved merge requests on a given project."""
12 _logger.debug("Inspecting merge requests on project: %s", project.web_link)
13 num_seen = 0
14@@ -278,6 +278,9 @@ def merge_mergable_on_project(project):
15 else:
16 assert branch_merge_proposal.target_git_repository_link is None
17 merge_bzr_proposal(branch_merge_proposal)
18+ if one_shot:
19+ _logger.info(_("Only landing one request in one-shot mode."))
20+ return
21 if num_seen == 0:
22 _logger.debug(_("There are no merge proposals present at this time"))
23
24@@ -310,19 +313,35 @@ def main():
25 parser.add_argument(
26 'project_list', metavar=_('PROJECT'), nargs="+",
27 help=_("name of the launchpad project to process"))
28+ parser.add_argument(
29+ "--one-shot", action='store_true', default=False,
30+ help=_("Only check for approved merge requests once, "
31+ "and land at most one of them."))
32 ns = parser.parse_args()
33 _logger.info(_("Logging into launchpad.net"))
34 lp = Launchpad.login_with('process-merge-requests', ns.lp_api_url)
35+
36+ projects = []
37+ for project_name in ns.project_list:
38+ try:
39+ project = lp.projects[project_name]
40+ except KeyError:
41+ raise parser.error(
42+ "No such project: %s" % project_name)
43+ projects.append(project)
44+
45+ if ns.one_shot:
46+ if len(ns.project_list) > 1:
47+ raise parser.error(
48+ "The --one-shot option may only be used with a single project.")
49+ merge_mergable_on_project(projects[0], one_shot=True)
50+ return
51+
52 _logger.info(_("Checking for new things to land every minute..."))
53 try:
54 while True:
55- for project_name in ns.project_list:
56- try:
57- project = lp.projects[project_name]
58- except KeyError:
59- _logger.error(_("No such project: %s"), project_name)
60- else:
61- merge_mergable_on_project(project)
62+ for project in projects:
63+ merge_mergable_on_project(project)
64 time.sleep(60)
65 except KeyboardInterrupt:
66 pass

Subscribers

People subscribed via source and target branches

to all changes: