aboutsummaryrefslogtreecommitdiff
path: root/llvm_tools
diff options
context:
space:
mode:
authorGeorge Burgess IV <gbiv@google.com>2020-04-29 15:10:15 -0700
committerGeorge Burgess <gbiv@chromium.org>2020-05-01 18:32:01 +0000
commit959acd577eefa5769103bb6f909d7375bbf6656d (patch)
tree0f7e19ec1dc63ef2759f4b0f8ecf3591d32fa055 /llvm_tools
parentf1f3f35f4d0b72913a46dac2f0500b0dc92ce3f4 (diff)
downloadtoolchain-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-xllvm_tools/nightly_revert_checker.py49
-rwxr-xr-xllvm_tools/nightly_revert_checker_test.py7
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}',