diff options
author | George Burgess IV <gbiv@google.com> | 2020-04-29 15:10:15 -0700 |
---|---|---|
committer | George Burgess <gbiv@chromium.org> | 2020-05-01 18:32:01 +0000 |
commit | 959acd577eefa5769103bb6f909d7375bbf6656d (patch) | |
tree | 0f7e19ec1dc63ef2759f4b0f8ecf3591d32fa055 /llvm_tools | |
parent | f1f3f35f4d0b72913a46dac2f0500b0dc92ce3f4 (diff) | |
download | toolchain-utils-959acd577eefa5769103bb6f909d7375bbf6656d.tar.gz |
llvm_tools: refactor to support multiple SHA sources
This refactors code a bit and tweaks our CLI so we can more easily
support various sources of 'interesting' SHAs. The intent going forward
is to have one program invocation per SHA source (e.g., one Android, one
CrOS, etc).
BUG=None
TEST=Ran the script
Change-Id: Ic3c682985ca688aa0e0ac38902d88f8b6dd2a223
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/2173674
Reviewed-by: Tiancong Wang <tcwang@google.com>
Tested-by: George Burgess <gbiv@chromium.org>
Diffstat (limited to 'llvm_tools')
-rwxr-xr-x | llvm_tools/nightly_revert_checker.py | 49 | ||||
-rwxr-xr-x | llvm_tools/nightly_revert_checker_test.py | 7 |
2 files changed, 41 insertions, 15 deletions
diff --git a/llvm_tools/nightly_revert_checker.py b/llvm_tools/nightly_revert_checker.py index 3f5f771d..0311ccc4 100755 --- a/llvm_tools/nightly_revert_checker.py +++ b/llvm_tools/nightly_revert_checker.py @@ -64,7 +64,7 @@ def _parse_llvm_ebuild_for_shas( return results -def _find_interesting_shas(chromeos_base: str) -> t.List[t.Tuple[str]]: +def _find_interesting_chromeos_shas(chromeos_base: str) -> t.List[t.Tuple[str]]: llvm_dir = os.path.join(chromeos_base, 'src/third_party/chromiumos-overlay/sys-devel/llvm') candidate_ebuilds = [ @@ -88,7 +88,7 @@ _Email = t.NamedTuple('_Email', [ def _generate_revert_email( - friendly_name: str, sha: str, + repository_name: str, friendly_name: str, sha: str, prettify_sha: t.Callable[[str], tiny_render.Piece], new_reverts: t.List[revert_checker.Revert]) -> _Email: email_pieces = [ @@ -118,7 +118,8 @@ def _generate_revert_email( 'PTAL and consider reverting them locally.', ] return _Email( - subject='[revert-checker] new %s discovered across %s' % ( + subject='[revert-checker/%s] new %s discovered across %s' % ( + repository_name, 'revert' if len(new_reverts) == 1 else 'reverts', friendly_name, ), @@ -126,12 +127,21 @@ def _generate_revert_email( ) -def _send_revert_email(email: _Email) -> None: +_EmailRecipients = t.NamedTuple( + '_EmailRecipients', + [ + ('well_known', t.List[str]), + ('direct', t.List[str]), + ], +) + + +def _send_revert_email(recipients: _EmailRecipients, email: _Email) -> None: email_sender.EmailSender().SendX20Email( subject=email.subject, identifier='revert-checker', - well_known_recipients=['mage'], - direct_recipients=['gbiv@google.com'], + well_known_recipients=recipients.well_known, + direct_recipients=['gbiv@google.com'] + recipients.direct, text_body=tiny_render.render_text_pieces(email.body), html_body=tiny_render.render_html_pieces(email.body), ) @@ -169,12 +179,18 @@ def main(argv: t.List[str]) -> None: parser.add_argument( '--llvm_dir', required=True, help='Up-to-date LLVM directory to use.') parser.add_argument( - '--chromeos_dir', required=True, help='Up-to-date CrOS directory to use.') - parser.add_argument( '--dry_run', action='store_true', help='Print email contents, rather than sending them.') parser.add_argument('--debug', action='store_true') + + subparsers = parser.add_subparsers(dest='repository') + subparsers.required = True + + chromeos_subparser = subparsers.add_parser('chromeos') + chromeos_subparser.add_argument( + '--chromeos_dir', required=True, help='Up-to-date CrOS directory to use.') + opts = parser.parse_args(argv) logging.basicConfig( @@ -182,15 +198,21 @@ def main(argv: t.List[str]) -> None: level=logging.DEBUG if opts.debug else logging.INFO, ) - state_file = opts.state_file dry_run = opts.dry_run llvm_dir = opts.llvm_dir + repository = opts.repository + state_file = opts.state_file - state = _read_state(state_file) + if repository == 'chromeos': + interesting_shas = _find_interesting_chromeos_shas(opts.chromeos_dir) + recipients = _EmailRecipients(well_known=['mage'], direct=[]) + else: + raise ValueError('Unknown repository %s' % opts.repository) - interesting_shas = _find_interesting_shas(opts.chromeos_dir) logging.info('Interesting SHAs were %r', interesting_shas) + state = _read_state(state_file) + def prettify_sha(sha: str) -> tiny_render.Piece: rev = get_llvm_hash.GetVersionFrom(llvm_dir, sha) @@ -226,7 +248,8 @@ def main(argv: t.List[str]) -> None: continue revert_emails_to_send.append( - _generate_revert_email(friendly_name, sha, prettify_sha, new_reverts)) + _generate_revert_email(repository, 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. @@ -236,7 +259,7 @@ def main(argv: t.List[str]) -> None: tiny_render.render_text_pieces(email.body)) else: logging.info('Sending email with subject %r...', email.subject) - _send_revert_email(email) + _send_revert_email(recipients, email) logging.info('Email sent.') _write_state(state_file, new_state) diff --git a/llvm_tools/nightly_revert_checker_test.py b/llvm_tools/nightly_revert_checker_test.py index dce29343..2841e2ed 100755 --- a/llvm_tools/nightly_revert_checker_test.py +++ b/llvm_tools/nightly_revert_checker_test.py @@ -27,6 +27,7 @@ class Test(unittest.TestCase): return 'pretty_' + sha email = nightly_revert_checker._generate_revert_email( + repository_name='${repo}', friendly_name='${name}', sha='${sha}', prettify_sha=prettify_sha, @@ -36,7 +37,7 @@ class Test(unittest.TestCase): ]) expected_email = nightly_revert_checker._Email( - subject='[revert-checker] new revert discovered across ${name}', + subject='[revert-checker/${repo}] new revert discovered across ${name}', body=[ 'It looks like there may be a new revert across ${name} (', 'pretty_${sha}', @@ -62,6 +63,7 @@ class Test(unittest.TestCase): return 'pretty_' + sha email = nightly_revert_checker._generate_revert_email( + repository_name='${repo}', friendly_name='${name}', sha='${sha}', prettify_sha=prettify_sha, @@ -76,7 +78,8 @@ class Test(unittest.TestCase): ]) expected_email = nightly_revert_checker._Email( - subject='[revert-checker] new reverts discovered across ${name}', + subject='[revert-checker/${repo}] new reverts discovered across ' + '${name}', body=[ 'It looks like there may be new reverts across ${name} (', 'pretty_${sha}', |