You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.0 KiB
75 lines
2.0 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2020 The ChromiumOS Authors
|
|
# 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."""
|
|
|
|
|
|
import datetime
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
import get_llvm_hash
|
|
import git_llvm_rev
|
|
|
|
|
|
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/" + git_llvm_rev.MAIN_BRANCH,
|
|
],
|
|
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"], check=False, cwd=checkout
|
|
)
|
|
if result.returncode:
|
|
print(
|
|
"Sync failed somehow; hoping that things are fresh enough, then...",
|
|
file=sys.stderr,
|
|
)
|