| Index: bootstrap/util.py
|
| diff --git a/bootstrap/util.py b/bootstrap/util.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d64b142bfaa4d7b51aba08751d772b95b7fca918
|
| --- /dev/null
|
| +++ b/bootstrap/util.py
|
| @@ -0,0 +1,87 @@
|
| +# 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
|
|
|