You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.0 KiB
Python
88 lines
2.0 KiB
Python
# Copyright 2014 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import ast
|
|
import contextlib
|
|
import os
|
|
import platform
|
|
import shutil
|
|
import sys
|
|
import tempfile
|
|
|
|
|
|
ROOT = os.path.dirname(os.path.abspath(__file__))
|
|
WHEELHOUSE = os.path.join(ROOT, 'wheelhouse')
|
|
|
|
BUCKET = 'chrome-python-wheelhouse'
|
|
STORAGE_URL = 'https://www.googleapis.com/storage/v1/b/{}/o'.format(BUCKET)
|
|
OBJECT_URL = 'https://storage.googleapis.com/{}/{{}}#md5={{}}'.format(BUCKET)
|
|
LOCAL_OBJECT_URL = 'file://{}'
|
|
|
|
LOCAL_STORAGE_PATH = os.path.join(ROOT, 'wheelhouse_cache')
|
|
|
|
SOURCE_URL = 'gs://{}/sources/{{}}'.format(BUCKET)
|
|
WHEELS_URL = 'gs://{}/wheels/'.format(BUCKET)
|
|
|
|
|
|
class DepsConflictException(Exception):
|
|
def __init__(self, name):
|
|
super(DepsConflictException, self).__init__(
|
|
'Package \'%s\' is defined twice in deps.pyl' % name)
|
|
|
|
|
|
def platform_tag():
|
|
if sys.platform.startswith('linux'):
|
|
return '_{0}_{1}'.format(*platform.linux_distribution())
|
|
return ''
|
|
|
|
|
|
def print_deps(deps, indent=1, with_implicit=True):
|
|
for dep, entry in deps.iteritems():
|
|
if not with_implicit and entry.get('implicit'):
|
|
continue
|
|
print ' ' * indent + '%s: %r' % (dep, entry)
|
|
print
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def tempdir(*args, **kwargs):
|
|
tdir = None
|
|
try:
|
|
tdir = tempfile.mkdtemp(*args, **kwargs)
|
|
yield tdir
|
|
finally:
|
|
if tdir:
|
|
shutil.rmtree(tdir, ignore_errors=True)
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def tempname(*args, **kwargs):
|
|
tmp = None
|
|
try:
|
|
tmp = tempfile.mktemp(*args, **kwargs)
|
|
yield tmp
|
|
finally:
|
|
if tmp:
|
|
try:
|
|
os.unlink(tmp)
|
|
except OSError:
|
|
pass
|
|
|
|
|
|
def read_deps(path):
|
|
if os.path.exists(path):
|
|
with open(path, 'rb') as f:
|
|
return ast.literal_eval(f.read())
|
|
|
|
|
|
def merge_deps(paths):
|
|
deps = {}
|
|
for path in paths:
|
|
d = read_deps(path)
|
|
for key in d:
|
|
if key in deps:
|
|
raise DepsConflictException(key)
|
|
deps.update(d)
|
|
return deps
|