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.
65 lines
1.9 KiB
65 lines
1.9 KiB
# -*- 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
|
|
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)
|