mirror of
https://github.com/thead-yocto-mirror/skia
synced 2026-06-21 17:02:34 +02:00
93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
#!/usr/bin/env python
|
|
# Copyright (c) 2012 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.
|
|
|
|
""" This module contains miscellaneous tools. """
|
|
|
|
import os
|
|
|
|
|
|
# Absolute path to the root of this Skia buildbot checkout.
|
|
BUILDBOT_PATH = os.path.realpath(os.path.join(
|
|
os.path.dirname(os.path.abspath(__file__)),
|
|
os.pardir, os.pardir, os.pardir))
|
|
|
|
|
|
def ArgsToDict(argv):
|
|
""" Collect command-line arguments of the form '--key value' into a
|
|
dictionary. Fail if the arguments do not fit this format. """
|
|
dictionary = {}
|
|
PREFIX = '--'
|
|
# Expect the first arg to be the path to the script, which we don't want.
|
|
argv = argv[1:]
|
|
while argv:
|
|
if argv[0].startswith(PREFIX):
|
|
dictionary[argv[0][len(PREFIX):]] = argv[1]
|
|
argv = argv[2:]
|
|
else:
|
|
raise Exception('Malformed input: %s' % argv)
|
|
return dictionary
|
|
|
|
|
|
def ConfirmOptionsSet(name_value_dict):
|
|
"""Raise an exception if any of the given command-line options were not set.
|
|
|
|
name_value_dict: dictionary mapping option names to option values
|
|
"""
|
|
for (name, value) in name_value_dict.iteritems():
|
|
if value is None:
|
|
raise Exception('missing command-line option %s; rerun with --help' %
|
|
name)
|
|
|
|
|
|
def GetAbsPath(relative_path):
|
|
"""My own implementation of os.path.abspath() that better handles paths
|
|
which approach Window's 260-character limit.
|
|
See https://code.google.com/p/skia/issues/detail?id=674
|
|
|
|
This implementation adds path components one at a time, resolving the
|
|
absolute path each time, to take advantage of any chdirs into outer
|
|
directories that will shorten the total path length.
|
|
|
|
TODO(epoger): share a single implementation with bench_graph_svg.py, instead
|
|
of pasting this same code into both files."""
|
|
if os.path.isabs(relative_path):
|
|
return relative_path
|
|
path_parts = relative_path.split(os.sep)
|
|
abs_path = os.path.abspath('.')
|
|
for path_part in path_parts:
|
|
abs_path = os.path.abspath(os.path.join(abs_path, path_part))
|
|
return abs_path
|
|
|
|
|
|
class ChDir(object):
|
|
"""Enter and exit the given directory appropriately."""
|
|
|
|
def __init__(self, directory, verbose=True):
|
|
"""Instantiate the ChDir.
|
|
|
|
Args:
|
|
directory: string; the directory to enter.
|
|
verbose: bool; whether or not to print the directory changes.
|
|
"""
|
|
self._destination = directory
|
|
self._origin = None
|
|
self._verbose = verbose
|
|
|
|
def __enter__(self):
|
|
"""Change to the destination directory.
|
|
|
|
Does not check whether the directory exists.
|
|
"""
|
|
self._origin = os.getcwd()
|
|
if self._verbose:
|
|
print 'chdir %s' % self._destination
|
|
os.chdir(self._destination)
|
|
|
|
def __exit__(self, *args):
|
|
"""Change back to the original directory."""
|
|
if self._verbose:
|
|
print 'chdir %s' % self._origin
|
|
os.chdir(self._origin)
|