diff options
author | George Burgess IV <gbiv@google.com> | 2020-04-27 15:52:41 -0700 |
---|---|---|
committer | George Burgess <gbiv@chromium.org> | 2020-04-28 19:02:01 +0000 |
commit | de1a447d928f6985bce2f64b148b34b885404eaa (patch) | |
tree | b5a3ebb1f57ec87f6eeed9e8d56ee8d7e83a0024 /llvm_tools/nightly_revert_checker.py | |
parent | 7b8508f497e3882a6cd3488878d7ee4ba4cf0c3a (diff) | |
download | toolchain-utils-de1a447d928f6985bce2f64b148b34b885404eaa.tar.gz |
llvm_tools: use tiny_render in the nightly revert checker
Now that we have `tiny_render` imported into `cros_utils`, we can use
it. This lets us easily linkify and stylize our emails, and makes
comments like tcwang's in Ibc3ef1d2e3b5a3301366e971cacf53396a6ca2aa much
easier to address.
BUG=chromium:1046988
TEST=unittests; sent an email
Change-Id: I538efd2e349a48bd433c826359eb0dd94b422966
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/2169010
Reviewed-by: Tiancong Wang <tcwang@google.com>
Tested-by: George Burgess <gbiv@chromium.org>
Diffstat (limited to 'llvm_tools/nightly_revert_checker.py')
-rwxr-xr-x | llvm_tools/nightly_revert_checker.py | 59 |
1 files changed, 43 insertions, 16 deletions
diff --git a/llvm_tools/nightly_revert_checker.py b/llvm_tools/nightly_revert_checker.py index b7b87fad..24130e0a 100755 --- a/llvm_tools/nightly_revert_checker.py +++ b/llvm_tools/nightly_revert_checker.py @@ -24,6 +24,8 @@ import sys import typing as t import cros_utils.email_sender as email_sender +import cros_utils.tiny_render as tiny_render +import get_llvm_hash import revert_checker State = t.Any @@ -77,35 +79,46 @@ def _find_interesting_shas(chromeos_base: str) -> t.List[t.Tuple[str]]: _Email = t.NamedTuple('_Email', [ ('subject', str), - ('body', str), + ('body', tiny_render.Piece), ]) def _generate_revert_email( friendly_name: str, sha: str, + prettify_sha: t.Callable[[str], tiny_render.Piece], new_reverts: t.List[revert_checker.Revert]) -> _Email: - email_lines = [ - 'It looks like there may be %s across %s (%s).' % ( + email_pieces = [ + 'It looks like there may be %s across %s (' % ( 'a new revert' if len(new_reverts) == 1 else 'new reverts', friendly_name, - sha, ), - '', + prettify_sha(sha), + ').', + tiny_render.line_break, + tiny_render.line_break, 'That is:' if len(new_reverts) == 1 else 'These are:', ] + revert_listing = [] for revert in sorted(new_reverts, key=lambda r: r.sha): - email_lines.append( - '\t- %s (appears to revert %s)' % (revert.sha, revert.reverted_sha)) - - email_lines.append('') - email_lines.append('PTAL and consider reverting them locally.') + revert_listing.append([ + prettify_sha(revert.sha), + ' (appears to revert ', + prettify_sha(revert.reverted_sha), + ')', + ]) + + email_pieces.append(tiny_render.UnorderedList(items=revert_listing)) + email_pieces += [ + tiny_render.line_break, + 'PTAL and consider reverting them locally.', + ] return _Email( subject='[revert-checker] new %s discovered across %s' % ( 'revert' if len(new_reverts) == 1 else 'reverts', friendly_name, ), - body='\n'.join(email_lines), + body=email_pieces, ) @@ -113,9 +126,11 @@ def _send_revert_email(email: _Email) -> None: email_sender.EmailSender().SendX20Email( subject=email.subject, identifier='revert-checker', - well_known_recipients=['mage'], + well_known_recipients=[], direct_recipients=['gbiv@google.com'], - text_body=email.body) + text_body=tiny_render.render_text_pieces(email.body), + html_body=tiny_render.render_html_pieces(email.body), + ) def _write_state(state_file: str, new_state: State) -> None: @@ -165,19 +180,31 @@ def main(argv: t.List[str]) -> None: state_file = opts.state_file dry_run = opts.dry_run + llvm_dir = opts.llvm_dir state = _read_state(state_file) interesting_shas = _find_interesting_shas(opts.chromeos_dir) logging.info('Interesting SHAs were %r', interesting_shas) + def prettify_sha(sha: str) -> tiny_render.Piece: + rev = get_llvm_hash.GetVersionFrom(llvm_dir, sha) + + # 12 is arbitrary, but should be unambiguous enough. + short_sha = sha[:12] + return tiny_render.Switch( + text='r%s (%s)' % (rev, short_sha), + html=tiny_render.Link( + href='https://reviews.llvm.org/rG' + sha, inner='r' + str(rev)), + ) + new_state: State = {} revert_emails_to_send: t.List[t.Tuple[str, t.List[revert_checker .Revert]]] = [] for friendly_name, sha in interesting_shas: logging.info('Finding reverts across %s (%s)', friendly_name, sha) all_reverts = revert_checker.find_reverts( - opts.llvm_dir, sha, root='origin/master') + llvm_dir, sha, root='origin/master') logging.info('Detected the following revert(s) across %s:\n%s', friendly_name, pprint.pformat(all_reverts)) @@ -195,14 +222,14 @@ def main(argv: t.List[str]) -> None: continue revert_emails_to_send.append( - _generate_revert_email(friendly_name, sha, new_reverts)) + _generate_revert_email(friendly_name, sha, prettify_sha, new_reverts)) # We want to be as free of obvious side-effects as possible in case something # above breaks. Hence, send the email as late as possible. for email in revert_emails_to_send: if dry_run: logging.info('Would send email:\nSubject: %s\nBody:\n%s\n', email.subject, - email.body) + tiny_render.render_text_pieces(email.body)) else: logging.info('Sending email with subject %r...', email.subject) _send_revert_email(email) |