llvm_tools: fix up naming

This replaces `master` with `main` where possible, per the linked bug.
Since upstream LLVM has a `master` branch, and there appears to be
general support in FOSS for swapping to a different naming convention
(`main`), this also makes LLVM's upstream branch name into a constant
that we can easily flip if needed.

BUG=chromium:1099035
TEST=Unittests

Change-Id: I0844cfb4fec00f761e39b0443299daa918fa37ab
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/2265047
Reviewed-by: Manoj Gupta <manojgupta@chromium.org>
Tested-by: George Burgess <gbiv@chromium.org>
diff --git a/llvm_tools/README.md b/llvm_tools/README.md
index 1c1862d..547a305 100644
--- a/llvm_tools/README.md
+++ b/llvm_tools/README.md
@@ -488,7 +488,7 @@
 6f635f90929da9545dd696071a829a1a42f84b30
 ~> ./git_llvm_rev.py --llvm_dir llvm-project-copy/ --sha 6f635f90929da9545dd696071a829a1a42f84b30
 r380000
-~> ./git_llvm_rev.py --llvm_dir llvm-project-copy/ --sha origin/master
+~> ./git_llvm_rev.py --llvm_dir llvm-project-copy/ --sha origin/some-branch
 r387778
 ```
 
diff --git a/llvm_tools/get_llvm_hash.py b/llvm_tools/get_llvm_hash.py
index a5b5429..4200cff 100755
--- a/llvm_tools/get_llvm_hash.py
+++ b/llvm_tools/get_llvm_hash.py
@@ -17,7 +17,8 @@
 from contextlib import contextmanager
 
 import git_llvm_rev
-from subprocess_helpers import CheckCommand, check_output
+from subprocess_helpers import CheckCommand
+from subprocess_helpers import check_output
 
 _LLVM_GIT_URL = ('https://chromium.googlesource.com/external/github.com/llvm'
                  '/llvm-project')
@@ -39,7 +40,7 @@
   version = git_llvm_rev.translate_sha_to_rev(
       git_llvm_rev.LLVMConfig(remote='origin', dir=src_dir), git_hash)
   # Note: branches aren't supported
-  assert version.branch == 'master', version.branch
+  assert version.branch == git_llvm_rev.MAIN_BRANCH, version.branch
   return version.number
 
 
@@ -59,7 +60,7 @@
 
   return git_llvm_rev.translate_rev_to_sha(
       git_llvm_rev.LLVMConfig(remote='origin', dir=src_dir),
-      git_llvm_rev.Rev(branch='master', number=version))
+      git_llvm_rev.Rev(branch=git_llvm_rev.MAIN_BRANCH, number=version))
 
 
 @contextmanager
@@ -85,13 +86,10 @@
   """
 
   abs_path_to_llvm_project_dir = GetAndUpdateLLVMProjectInLLVMTools()
-
-  add_worktree_cmd = [
+  CheckCommand([
       'git', '-C', abs_path_to_llvm_project_dir, 'worktree', 'add', '--detach',
-      temp_dir, 'master'
-  ]
-
-  CheckCommand(add_worktree_cmd)
+      temp_dir, git_llvm_rev.MAIN_BRANCH
+  ])
 
   try:
     yield temp_dir
@@ -117,7 +115,7 @@
 
   Raises:
     ValueError: LLVM repo (in 'llvm-project-copy' dir.) has changes or failed to
-    checkout to master or failed to fetch from chromium mirror of LLVM.
+    checkout to main or failed to fetch from chromium mirror of LLVM.
   """
 
   abs_path_to_llvm_tools_dir = os.path.dirname(os.path.abspath(__file__))
@@ -143,15 +141,11 @@
       raise ValueError('LLVM repo in %s has changes, please remove.' %
                        abs_path_to_llvm_project_dir)
 
-    checkout_to_master_cmd = [
-        'git', '-C', abs_path_to_llvm_project_dir, 'checkout', 'master'
-    ]
-
-    CheckCommand(checkout_to_master_cmd)
-
-    update_master_cmd = ['git', '-C', abs_path_to_llvm_project_dir, 'pull']
-
-    CheckCommand(update_master_cmd)
+    CheckCommand([
+        'git', '-C', abs_path_to_llvm_project_dir, 'checkout',
+        git_llvm_rev.MAIN_BRANCH
+    ])
+    CheckCommand(['git', '-C', abs_path_to_llvm_project_dir, 'pull'])
 
   return abs_path_to_llvm_project_dir
 
@@ -298,14 +292,9 @@
   def GetTopOfTrunkGitHash(self):
     """Gets the latest git hash from top of trunk of LLVM."""
 
-    path_to_master_branch = 'refs/heads/master'
-
-    llvm_tot_git_hash_cmd = [
-        'git', 'ls-remote', _LLVM_GIT_URL, path_to_master_branch
-    ]
-
-    llvm_tot_git_hash = check_output(llvm_tot_git_hash_cmd)
-
+    path_to_main_branch = 'refs/heads/master'
+    llvm_tot_git_hash = check_output(
+        ['git', 'ls-remote', _LLVM_GIT_URL, path_to_main_branch])
     return llvm_tot_git_hash.rstrip().split()[0]
 
 
diff --git a/llvm_tools/get_llvm_hash_unittest.py b/llvm_tools/get_llvm_hash_unittest.py
index c828f43..2e56aed 100755
--- a/llvm_tools/get_llvm_hash_unittest.py
+++ b/llvm_tools/get_llvm_hash_unittest.py
@@ -8,12 +8,11 @@
 
 from __future__ import print_function
 
-import get_llvm_hash
 import subprocess
 import unittest
 import unittest.mock as mock
-import test_helpers
 
+import get_llvm_hash
 from get_llvm_hash import LLVMHash
 
 # We grab protected stuff from get_llvm_hash. That's OK.
@@ -87,7 +86,7 @@
 
   @mock.patch.object(subprocess, 'check_output')
   def testSuccessfullyGetGitHashFromToTOfLLVM(self, mock_check_output):
-    mock_check_output.return_value = 'a123testhash1 path/to/master\n'
+    mock_check_output.return_value = 'a123testhash1 path/to/main\n'
     self.assertEqual(LLVMHash().GetTopOfTrunkGitHash(), 'a123testhash1')
     mock_check_output.assert_called_once()
 
diff --git a/llvm_tools/git_llvm_rev.py b/llvm_tools/git_llvm_rev.py
index 8eefcdc..07209f1 100755
--- a/llvm_tools/git_llvm_rev.py
+++ b/llvm_tools/git_llvm_rev.py
@@ -18,6 +18,8 @@
 import sys
 import typing as t
 
+MAIN_BRANCH = 'master'
+
 # Note that after base_llvm_sha, we reach The Wild West(TM) of commits.
 # So reasonable input that could break us includes:
 #
@@ -52,9 +54,9 @@
     # pairs.
     #
     # We support r${commits_since_base_commit} as shorthand for
-    # (master, r${commits_since_base_commit}).
+    # (main, r${commits_since_base_commit}).
     if rev.startswith('r'):
-      branch_name = 'master'
+      branch_name = MAIN_BRANCH
       rev_string = rev[1:]
     else:
       match = re.match(r'\((.+), r(\d+)\)', rev)
@@ -67,7 +69,7 @@
 
   def __str__(self) -> str:
     branch_name, number = self
-    if branch_name == 'master':
+    if branch_name == MAIN_BRANCH:
       return 'r%d' % number
     return '(%s, r%d)' % (branch_name, number)
 
@@ -141,7 +143,7 @@
         cwd=llvm_config.dir,
     )
     count = int(result.strip())
-    return Rev(branch='master', number=count + base_llvm_revision)
+    return Rev(branch=MAIN_BRANCH, number=count + base_llvm_revision)
 
   # Otherwise, either:
   # - |merge_base| is |sha| (we have a guaranteed llvm-svn number on |sha|)
@@ -150,7 +152,7 @@
   merge_base_number = translate_prebase_sha_to_rev_number(
       llvm_config, merge_base)
   if merge_base == sha:
-    return Rev(branch='master', number=merge_base_number)
+    return Rev(branch=MAIN_BRANCH, number=merge_base_number)
 
   distance_from_base = check_output(
       [
@@ -270,7 +272,7 @@
   """
   branch, number = rev
 
-  if branch == 'master':
+  if branch == MAIN_BRANCH:
     if number < base_llvm_revision:
       return translate_prebase_rev_to_sha(llvm_config, rev)
     base_sha = base_llvm_sha
diff --git a/llvm_tools/git_llvm_rev_test.py b/llvm_tools/git_llvm_rev_test.py
index 1e38f58..775ab1e 100755
--- a/llvm_tools/git_llvm_rev_test.py
+++ b/llvm_tools/git_llvm_rev_test.py
@@ -12,6 +12,7 @@
 
 import git_llvm_rev
 import llvm_project
+from git_llvm_rev import MAIN_BRANCH
 
 
 def get_llvm_config() -> git_llvm_rev.LLVMConfig:
@@ -32,17 +33,17 @@
   def test_sha_to_rev_on_base_sha_works(self) -> None:
     sha = self.rev_to_sha_with_round_trip(
         git_llvm_rev.Rev(
-            branch='master', number=git_llvm_rev.base_llvm_revision))
+            branch=MAIN_BRANCH, number=git_llvm_rev.base_llvm_revision))
     self.assertEqual(sha, git_llvm_rev.base_llvm_sha)
 
   def test_sha_to_rev_prior_to_base_rev_works(self) -> None:
     sha = self.rev_to_sha_with_round_trip(
-        git_llvm_rev.Rev(branch='master', number=375000))
+        git_llvm_rev.Rev(branch=MAIN_BRANCH, number=375000))
     self.assertEqual(sha, '2f6da767f13b8fd81f840c211d405fea32ac9db7')
 
   def test_sha_to_rev_after_base_rev_works(self) -> None:
     sha = self.rev_to_sha_with_round_trip(
-        git_llvm_rev.Rev(branch='master', number=375506))
+        git_llvm_rev.Rev(branch=MAIN_BRANCH, number=375506))
     self.assertEqual(sha, '3bf7fddeb05655d9baed4cc69e13535c677ed1dd')
 
   def test_llvm_svn_parsing_runs_ignore_reverts(self) -> None:
@@ -51,18 +52,19 @@
 
     # Commit which performed the revert
     sha = self.rev_to_sha_with_round_trip(
-        git_llvm_rev.Rev(branch='master', number=374895))
+        git_llvm_rev.Rev(branch=MAIN_BRANCH, number=374895))
     self.assertEqual(sha, '1731fc88d1fa1fa55edd056db73a339b415dd5d6')
 
     # Commit that was reverted
     sha = self.rev_to_sha_with_round_trip(
-        git_llvm_rev.Rev(branch='master', number=374841))
+        git_llvm_rev.Rev(branch=MAIN_BRANCH, number=374841))
     self.assertEqual(sha, '2a1386c81de504b5bda44fbecf3f7b4cdfd748fc')
 
   def test_imaginary_revs_raise(self) -> None:
     with self.assertRaises(ValueError) as r:
       git_llvm_rev.translate_rev_to_sha(
-          get_llvm_config(), git_llvm_rev.Rev(branch='master', number=9999999))
+          get_llvm_config(), git_llvm_rev.Rev(
+              branch=MAIN_BRANCH, number=9999999))
 
     self.assertIn('Try updating your tree?', str(r.exception))
 
@@ -71,15 +73,15 @@
     # properties about it.
     merge_sha_rev_number = 4496 + git_llvm_rev.base_llvm_revision
     sha = self.rev_to_sha_with_round_trip(
-        git_llvm_rev.Rev(branch='master', number=merge_sha_rev_number))
+        git_llvm_rev.Rev(branch=MAIN_BRANCH, number=merge_sha_rev_number))
     self.assertEqual(sha, '0f0d0ed1c78f1a80139a1f2133fad5284691a121')
 
     sha = self.rev_to_sha_with_round_trip(
-        git_llvm_rev.Rev(branch='master', number=merge_sha_rev_number - 1))
+        git_llvm_rev.Rev(branch=MAIN_BRANCH, number=merge_sha_rev_number - 1))
     self.assertEqual(sha, '6f635f90929da9545dd696071a829a1a42f84b30')
 
     sha = self.rev_to_sha_with_round_trip(
-        git_llvm_rev.Rev(branch='master', number=merge_sha_rev_number + 1))
+        git_llvm_rev.Rev(branch=MAIN_BRANCH, number=merge_sha_rev_number + 1))
     self.assertEqual(sha, '199700a5cfeedf227619f966aa3125cef18bc958')
 
   # NOTE: The below tests have _zz_ in their name as an optimization. Iterating
@@ -101,11 +103,11 @@
     backing_sha = 'c89a3d78f43d81b9cff7b9248772ddf14d21b749'
 
     sha = self.rev_to_sha_with_round_trip(
-        git_llvm_rev.Rev(branch='master', number=rev_number))
+        git_llvm_rev.Rev(branch=MAIN_BRANCH, number=rev_number))
     self.assertEqual(sha, backing_sha)
 
-    # Note that this won't round-trip: since this commit is on the master
-    # branch, we'll pick master for this. That's fine
+    # Note that this won't round-trip: since this commit is on the main
+    # branch, we'll pick main for this. That's fine.
     sha = git_llvm_rev.translate_rev_to_sha(
         get_llvm_config(),
         git_llvm_rev.Rev(branch='release/9.x', number=rev_number))
@@ -113,7 +115,7 @@
 
   def test_zz_branch_revs_work_after_merge_points(self) -> None:
     # Picking the commit on the 9.x branch after the merge-base for that +
-    # master. Note that this is where llvm-svn numbers should diverge from
+    # main. Note that this is where llvm-svn numbers should diverge from
     # ours, and are therefore untrustworthy. The commit for this *does* have a
     # different `llvm-svn:` string than we should have.
     sha = self.rev_to_sha_with_round_trip(
diff --git a/llvm_tools/llvm_project.py b/llvm_tools/llvm_project.py
index c171370..7937729 100644
--- a/llvm_tools/llvm_project.py
+++ b/llvm_tools/llvm_project.py
@@ -13,6 +13,7 @@
 import sys
 
 import get_llvm_hash
+import git_llvm_rev
 
 
 def get_location() -> str:
@@ -33,9 +34,13 @@
     assert checkout == actual_checkout, '%s != %s' % (actual_checkout, checkout)
 
   commit_timestamp = subprocess.check_output(
-      ['git', 'log', '-n1', '--format=%ct', 'origin/master'],
+      [
+          'git', 'log', '-n1', '--format=%ct',
+          'origin/' + git_llvm_rev.MAIN_BRANCH
+      ],
       cwd=checkout,
-      encoding='utf-8')
+      encoding='utf-8',
+  )
 
   commit_time = datetime.datetime.fromtimestamp(int(commit_timestamp.strip()))
   now = datetime.datetime.now()
@@ -52,7 +57,7 @@
       (time_since_last_commit.days, checkout),
       file=sys.stderr)
 
-  result = subprocess.run(['git', 'fetch', 'origin'], cwd=checkout)
+  result = subprocess.run(['git', 'fetch', 'origin'], check=False, cwd=checkout)
   if result.returncode:
     print(
         'Sync failed somehow; hoping that things are fresh enough, then...',
diff --git a/llvm_tools/nightly_revert_checker.py b/llvm_tools/nightly_revert_checker.py
index 71b5574..3a23890 100755
--- a/llvm_tools/nightly_revert_checker.py
+++ b/llvm_tools/nightly_revert_checker.py
@@ -27,6 +27,7 @@
 import cros_utils.email_sender as email_sender
 import cros_utils.tiny_render as tiny_render
 import get_llvm_hash
+import git_llvm_rev
 import revert_checker
 
 State = t.Any
@@ -44,12 +45,12 @@
         encoding='utf-8',
     ).strip()
 
-  master_legacy = get_llvm_merge_base('aosp/master-legacy')
+  main_legacy = get_llvm_merge_base('aosp/master-legacy')
   testing_upstream = get_llvm_merge_base('aosp/testing-upstream')
-  result = [('master-legacy', master_legacy)]
+  result = [('main-legacy', main_legacy)]
 
   # If these are the same SHA, there's no point in tracking both.
-  if master_legacy != testing_upstream:
+  if main_legacy != testing_upstream:
     result.append(('testing-upstream', testing_upstream))
   return result
 
@@ -270,7 +271,7 @@
   for friendly_name, sha in interesting_shas:
     logging.info('Finding reverts across %s (%s)', friendly_name, sha)
     all_reverts = revert_checker.find_reverts(
-        llvm_dir, sha, root='origin/master')
+        llvm_dir, sha, root='origin/' + git_llvm_rev.MAIN_BRANCH)
     logging.info('Detected the following revert(s) across %s:\n%s',
                  friendly_name, pprint.pformat(all_reverts))