llvm_tools: add commit subjects to revert emails

I got a piece of feedback that adding subjects inline would likely make
revert emails easier to read 'at a glance'. This CL adds those.

New email revert lines will look like:
- r385979 (appears to revert r383879): Revert "[NFC][ARM] Update test"

BUG=None
TEST=unittests; looked at a --dry_run email

Change-Id: I5fb5ea12fa1d4a6b2601fbd5c244935662dc4270
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/2174823
Reviewed-by: Manoj Gupta <manojgupta@chromium.org>
Tested-by: George Burgess <gbiv@chromium.org>
diff --git a/llvm_tools/nightly_revert_checker.py b/llvm_tools/nightly_revert_checker.py
index 5b3e04d..2a41f8c 100755
--- a/llvm_tools/nightly_revert_checker.py
+++ b/llvm_tools/nightly_revert_checker.py
@@ -109,6 +109,7 @@
 def _generate_revert_email(
     repository_name: str, friendly_name: str, sha: str,
     prettify_sha: t.Callable[[str], tiny_render.Piece],
+    get_sha_description: t.Callable[[str], tiny_render.Piece],
     new_reverts: t.List[revert_checker.Revert]) -> _Email:
   email_pieces = [
       'It looks like there may be %s across %s (' % (
@@ -128,7 +129,8 @@
         prettify_sha(revert.sha),
         ' (appears to revert ',
         prettify_sha(revert.reverted_sha),
-        ')',
+        '): ',
+        get_sha_description(revert.sha),
     ])
 
   email_pieces.append(tiny_render.UnorderedList(items=revert_listing))
@@ -254,6 +256,13 @@
             href='https://reviews.llvm.org/rG' + sha, inner='r' + str(rev)),
     )
 
+  def get_sha_description(sha: str) -> tiny_render.Piece:
+    return subprocess.check_output(
+        ['git', 'log', '-n1', '--format=%s', sha],
+        cwd=llvm_dir,
+        encoding='utf-8',
+    ).strip()
+
   new_state: State = {}
   revert_emails_to_send: t.List[t.Tuple[str, t.List[revert_checker
                                                     .Revert]]] = []
@@ -279,7 +288,7 @@
 
     revert_emails_to_send.append(
         _generate_revert_email(repository, friendly_name, sha, prettify_sha,
-                               new_reverts))
+                               get_sha_description, 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.
diff --git a/llvm_tools/nightly_revert_checker_test.py b/llvm_tools/nightly_revert_checker_test.py
index 2841e2e..68338a5 100755
--- a/llvm_tools/nightly_revert_checker_test.py
+++ b/llvm_tools/nightly_revert_checker_test.py
@@ -26,11 +26,15 @@
     def prettify_sha(sha: str) -> tiny_render.Piece:
       return 'pretty_' + sha
 
+    def get_sha_description(sha: str) -> tiny_render.Piece:
+      return 'subject_' + sha
+
     email = nightly_revert_checker._generate_revert_email(
         repository_name='${repo}',
         friendly_name='${name}',
         sha='${sha}',
         prettify_sha=prettify_sha,
+        get_sha_description=get_sha_description,
         new_reverts=[
             revert_checker.Revert(
                 sha='${revert_sha}', reverted_sha='${reverted_sha}')
@@ -49,7 +53,8 @@
                 'pretty_${revert_sha}',
                 ' (appears to revert ',
                 'pretty_${reverted_sha}',
-                ')',
+                '): ',
+                'subject_${revert_sha}',
             ]]),
             tiny_render.line_break,
             'PTAL and consider reverting them locally.',
@@ -62,11 +67,15 @@
     def prettify_sha(sha: str) -> tiny_render.Piece:
       return 'pretty_' + sha
 
+    def get_sha_description(sha: str) -> tiny_render.Piece:
+      return 'subject_' + sha
+
     email = nightly_revert_checker._generate_revert_email(
         repository_name='${repo}',
         friendly_name='${name}',
         sha='${sha}',
         prettify_sha=prettify_sha,
+        get_sha_description=get_sha_description,
         new_reverts=[
             revert_checker.Revert(
                 sha='${revert_sha1}', reverted_sha='${reverted_sha1}'),
@@ -92,19 +101,22 @@
                     'pretty_${revert_sha0}',
                     ' (appears to revert ',
                     'pretty_${reverted_sha0}',
-                    ')',
+                    '): ',
+                    'subject_${revert_sha0}',
                 ],
                 [
                     'pretty_${revert_sha1}',
                     ' (appears to revert ',
                     'pretty_${reverted_sha1}',
-                    ')',
+                    '): ',
+                    'subject_${revert_sha1}',
                 ],
                 [
                     'pretty_${revert_sha2}',
                     ' (appears to revert ',
                     'pretty_${reverted_sha2}',
-                    ')',
+                    '): ',
+                    'subject_${revert_sha2}',
                 ],
             ]),
             tiny_render.line_break,