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
1diff --git a/process-merge-requests b/process-merge-requests
2index 02b59a6..69c1d04 100755
3--- a/process-merge-requests
4+++ b/process-merge-requests
5@@ -165,9 +165,17 @@ def merge_git_proposal(branch_merge_proposal):
6 target_url = get_rw_git_url(branch_merge_proposal.target_git_repository)
7 target_path = branch_merge_proposal.target_git_path
8 target_branch = target_path.split('/')[-1]
9- commit_message = 'Merge #{0} from {1}'.format(merge_id, source_identity)
10- if branch_merge_proposal.commit_message is not None:
11- commit_message += '\n\n' + branch_merge_proposal.commit_message
12+ if branch_merge_proposal.commit_message is None:
13+ branch_merge_proposal.createComment(
14+ subject='Commit message not set', vote='Needs Fixing',
15+ content='You must set a commit message.')
16+ branch_merge_proposal.setStatus(
17+ status='Needs review', revid=reviewed_revid)
18+ _logger.error("Commit message not set")
19+ return
20+ commit_message = '{0}\n\nBranch: {1}\nMerge-Proposal: {2}'.format(
21+ branch_merge_proposal.commit_message.rstrip('\n'),
22+ source_identity, merge_id)
23 _logger.info(_("Setting up git merge"))
24 _logger.info(_(" - source: %s:%s"), source_url, source_path)
25 _logger.info(_(" revision: %s"), reviewed_revid)
26@@ -258,7 +266,7 @@ def merge_bzr_proposal(branch_merge_proposal):
27 _logger.info(_("Bzr merge completed"))
28
29
30-def merge_mergable_on_project(project):
31+def merge_mergable_on_project(project, one_shot=False):
32 """Merge all approved merge requests on a given project."""
33 _logger.debug("Inspecting merge requests on project: %s", project.web_link)
34 num_seen = 0
35@@ -278,6 +286,9 @@ def merge_mergable_on_project(project):
36 else:
37 assert branch_merge_proposal.target_git_repository_link is None
38 merge_bzr_proposal(branch_merge_proposal)
39+ if one_shot:
40+ _logger.info(_("Only landing one request in one-shot mode."))
41+ return
42 if num_seen == 0:
43 _logger.debug(_("There are no merge proposals present at this time"))
44
45@@ -310,19 +321,35 @@ def main():
46 parser.add_argument(
47 'project_list', metavar=_('PROJECT'), nargs="+",
48 help=_("name of the launchpad project to process"))
49+ parser.add_argument(
50+ "--one-shot", action='store_true', default=False,
51+ help=_("Only check for approved merge requests once, "
52+ "and land at most one of them."))
53 ns = parser.parse_args()
54 _logger.info(_("Logging into launchpad.net"))
55 lp = Launchpad.login_with('process-merge-requests', ns.lp_api_url)
56+
57+ projects = []
58+ for project_name in ns.project_list:
59+ try:
60+ project = lp.projects[project_name]
61+ except KeyError:
62+ raise parser.error(
63+ "No such project: %s" % project_name)
64+ projects.append(project)
65+
66+ if ns.one_shot:
67+ if len(ns.project_list) > 1:
68+ raise parser.error(
69+ "The --one-shot option may only be used with a single project.")
70+ merge_mergable_on_project(projects[0], one_shot=True)
71+ return
72+
73 _logger.info(_("Checking for new things to land every minute..."))
74 try:
75 while True:
76- for project_name in ns.project_list:
77- try:
78- project = lp.projects[project_name]
79- except KeyError:
80- _logger.error(_("No such project: %s"), project_name)
81- else:
82- merge_mergable_on_project(project)
83+ for project in projects:
84+ merge_mergable_on_project(project)
85 time.sleep(60)
86 except KeyboardInterrupt:
87 pass

Subscribers

People subscribed via source and target branches

to all changes: