aboutsummaryrefslogtreecommitdiff
path: root/llvm_tools
diff options
context:
space:
mode:
authorGeorge Burgess IV <gbiv@google.com>2020-04-25 15:04:21 -0700
committerGeorge Burgess <gbiv@chromium.org>2020-04-28 19:02:01 +0000
commitb999ceb903e3f163818e045d8710d6fe487157e0 (patch)
treed9cd1c4b1746c6f22f57bc6822fe4c4b6df6b762 /llvm_tools
parent738a6668fc6caebfa6003d81f525d25feea4d5a7 (diff)
downloadtoolchain-utils-b999ceb903e3f163818e045d8710d6fe487157e0.tar.gz
llvm_tools: make an llvm_project module for tests
I'd like to reuse these functions in an upcoming revert checker. This refactors them into their own module, so we don't have tests relying on tests. BUG=chromium:1046988 TEST=unittests Change-Id: I8766f03b3ee8b0cf5b0c128df0d0531aee5c0339 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/2165512 Reviewed-by: Luis Lozano <llozano@chromium.org> Tested-by: George Burgess <gbiv@chromium.org>
Diffstat (limited to 'llvm_tools')
-rwxr-xr-xllvm_tools/git_llvm_rev_test.py54
-rw-r--r--llvm_tools/llvm_project.py59
2 files changed, 63 insertions, 50 deletions
diff --git a/llvm_tools/git_llvm_rev_test.py b/llvm_tools/git_llvm_rev_test.py
index c7d59b27..1e38f589 100755
--- a/llvm_tools/git_llvm_rev_test.py
+++ b/llvm_tools/git_llvm_rev_test.py
@@ -8,61 +8,15 @@
from __future__ import print_function
-import datetime
-import os
-import subprocess
-import sys
import unittest
-import get_llvm_hash
import git_llvm_rev
-
-
-def get_llvm_checkout() -> str:
- my_dir = os.path.dirname(os.path.abspath(__file__))
- return os.path.join(my_dir, 'llvm-project-copy')
-
-
-def ensure_llvm_project_up_to_date():
- checkout = get_llvm_checkout()
- if not os.path.isdir(checkout):
- print(
- 'No llvm-project exists locally; syncing it. This takes a while.',
- file=sys.stderr)
- actual_checkout = get_llvm_hash.GetAndUpdateLLVMProjectInLLVMTools()
- assert checkout == actual_checkout, '%s != %s' % (actual_checkout, checkout)
-
- commit_timestamp = git_llvm_rev.check_output(
- ['git', 'log', '-n1', '--format=%ct', 'origin/master'], cwd=checkout)
-
- commit_time = datetime.datetime.fromtimestamp(int(commit_timestamp.strip()))
- now = datetime.datetime.now()
-
- time_since_last_commit = now - commit_time
-
- # Arbitrary, but if it's been more than 2d since we've seen a commit, it's
- # probably best to bring us up-to-date.
- if time_since_last_commit <= datetime.timedelta(days=2):
- return
-
- print(
- '%d days have elapsed since the last commit to %s; auto-syncing' %
- (time_since_last_commit.days, checkout),
- file=sys.stderr)
-
- result = subprocess.run(
- ['git', 'fetch', 'origin'],
- cwd=checkout,
- check=True,
- )
- if result.returncode:
- print(
- 'Sync failed somehow; hoping that things are fresh enough, then...',
- file=sys.stderr)
+import llvm_project
def get_llvm_config() -> git_llvm_rev.LLVMConfig:
- return git_llvm_rev.LLVMConfig(dir=get_llvm_checkout(), remote='origin')
+ return git_llvm_rev.LLVMConfig(
+ dir=llvm_project.get_location(), remote='origin')
class Test(unittest.TestCase):
@@ -172,5 +126,5 @@ class Test(unittest.TestCase):
# back to the base commit for.
if __name__ == '__main__':
- ensure_llvm_project_up_to_date()
+ llvm_project.ensure_up_to_date()
unittest.main()
diff --git a/llvm_tools/llvm_project.py b/llvm_tools/llvm_project.py
new file mode 100644
index 00000000..c171370c
--- /dev/null
+++ b/llvm_tools/llvm_project.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+# Copyright 2020 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Module for manipulating llvm-project-copy. Generally intended for tests."""
+
+from __future__ import print_function
+
+import datetime
+import os
+import subprocess
+import sys
+
+import get_llvm_hash
+
+
+def get_location() -> str:
+ """Gets the absolute path for llvm-project-copy."""
+ my_dir = os.path.dirname(os.path.abspath(__file__))
+ return os.path.join(my_dir, 'llvm-project-copy')
+
+
+def ensure_up_to_date():
+ """Ensures that llvm-project-copy is checked out and semi-up-to-date."""
+
+ checkout = get_location()
+ if not os.path.isdir(checkout):
+ print(
+ 'No llvm-project exists locally; syncing it. This takes a while.',
+ file=sys.stderr)
+ actual_checkout = get_llvm_hash.GetAndUpdateLLVMProjectInLLVMTools()
+ assert checkout == actual_checkout, '%s != %s' % (actual_checkout, checkout)
+
+ commit_timestamp = subprocess.check_output(
+ ['git', 'log', '-n1', '--format=%ct', 'origin/master'],
+ cwd=checkout,
+ encoding='utf-8')
+
+ commit_time = datetime.datetime.fromtimestamp(int(commit_timestamp.strip()))
+ now = datetime.datetime.now()
+
+ time_since_last_commit = now - commit_time
+
+ # Arbitrary, but if it's been more than 2d since we've seen a commit, it's
+ # probably best to bring us up-to-date.
+ if time_since_last_commit <= datetime.timedelta(days=2):
+ return
+
+ print(
+ '%d days have elapsed since the last commit to %s; auto-syncing' %
+ (time_since_last_commit.days, checkout),
+ file=sys.stderr)
+
+ result = subprocess.run(['git', 'fetch', 'origin'], cwd=checkout)
+ if result.returncode:
+ print(
+ 'Sync failed somehow; hoping that things are fresh enough, then...',
+ file=sys.stderr)