Commit a5f078c6 by David Baumgold

include commits-without-prs table

parent edab57d6
...@@ -5,7 +5,7 @@ a release-master multitool ...@@ -5,7 +5,7 @@ a release-master multitool
from __future__ import print_function, unicode_literals from __future__ import print_function, unicode_literals
import sys import sys
from path import path from path import path
from git import Repo from git import Repo, Commit
from git.refs.symbolic import SymbolicReference from git.refs.symbolic import SymbolicReference
import argparse import argparse
from datetime import date, timedelta from datetime import date, timedelta
...@@ -290,13 +290,8 @@ def prs_by_email(start_ref, end_ref): ...@@ -290,13 +290,8 @@ def prs_by_email(start_ref, end_ref):
branch = SymbolicReference(repo, ref) branch = SymbolicReference(repo, ref)
try: try:
merge = get_merge_commit(branch.commit, end_ref) merge = get_merge_commit(branch.commit, end_ref)
except DoesNotExist as err: except DoesNotExist:
message = ( pass # this commit will be included in the commits_without_prs table
"Warning: could not find merge commit for {commit}. "
"The pull request containing this commit will not be included "
"in the table.".format(commit=err.commit)
)
print(colorize("red", message), file=sys.stderr)
else: else:
unordered_data[merge.author.email].add((pr_num, merge)) unordered_data[merge.author.email].add((pr_num, merge))
...@@ -307,9 +302,9 @@ def prs_by_email(start_ref, end_ref): ...@@ -307,9 +302,9 @@ def prs_by_email(start_ref, end_ref):
return ordered_data return ordered_data
def generate_table(start_ref, end_ref): def generate_pr_table(start_ref, end_ref):
""" """
Return a string corresponding to a commit table to embed in Confluence Return a string corresponding to a pull request table to embed in Confluence
""" """
header = "|| Merged By || Author || Title || PR || JIRA || Verified? ||" header = "|| Merged By || Author || Title || PR || JIRA || Verified? ||"
pr_link = "[#{num}|https://github.com/edx/edx-platform/pull/{num}]" pr_link = "[#{num}|https://github.com/edx/edx-platform/pull/{num}]"
...@@ -343,6 +338,41 @@ def generate_table(start_ref, end_ref): ...@@ -343,6 +338,41 @@ def generate_table(start_ref, end_ref):
return "\n".join(rows) return "\n".join(rows)
@memoized
def get_commits_not_in_prs(start_ref, end_ref):
"""
Return a list of commits that exist between start_ref and end_ref,
but were not merged to the end_ref. If everyone is following the
pull request process correctly, this should return an empty list.
"""
return list(Commit.iter_items(
repo,
"{start}..{end}".format(start=start_ref, end=end_ref),
first_parent=True, no_merges=True,
))
def generate_commit_table(start_ref, end_ref):
"""
Return a string corresponding to a commit table to embed in Comfluence.
The commits in the table should only be commits that are not in the
pull request table.
"""
header = "|| Author || Summary || Commit || JIRA || Verified? ||"
commit_link = "[commit|https://github.com/edx/edx-platform/commit/{sha}]"
rows = [header]
commits = get_commits_not_in_prs(start_ref, end_ref)
for commit in commits:
rows.append("| {author} | {summary} | {commit} | {jira} | {verified} |".format(
author=commit.author.email,
summary=commit.summary.replace("|", "\|"),
commit=commit_link.format(sha=commit.hexsha),
jira=", ".join(parse_ticket_references(commit.message)),
verified="",
))
return "\n".join(rows)
def generate_email(start_ref, end_ref, release_date=None): def generate_email(start_ref, end_ref, release_date=None):
""" """
Returns a string roughly approximating an email. Returns a string roughly approximating an email.
...@@ -389,7 +419,22 @@ def main(): ...@@ -389,7 +419,22 @@ def main():
"in your release wiki page" "in your release wiki page"
) )
print("\n") print("\n")
print(generate_table(args.previous, args.current)) print(generate_pr_table(args.previous, args.current))
commits_without_prs = list(get_commits_not_in_prs(args.previous, args.current))
if commits_without_prs:
num = len(commits_without_prs)
plural = num > 1
print("\n")
print(
"There {are} {num} {commits} in this release that did not come in "
"through pull requests!".format(
num=num, are="are" if plural else "is",
commits="commits" if plural else "commit"
)
)
print("\n")
print(generate_commit_table(args.previous, args.current))
if __name__ == "__main__": if __name__ == "__main__":
main() main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment