diff options
Diffstat (limited to 'catapult/telemetry/telemetry/internal/util/path.py')
-rw-r--r-- | catapult/telemetry/telemetry/internal/util/path.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/internal/util/path.py b/catapult/telemetry/telemetry/internal/util/path.py new file mode 100644 index 00000000..80379df8 --- /dev/null +++ b/catapult/telemetry/telemetry/internal/util/path.py @@ -0,0 +1,71 @@ +# 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 glob +import os + +from telemetry.core import util +import py_utils as catapult_util + +# TODO(aiolos): Move these functions to catapult_util or here. +GetBaseDir = util.GetBaseDir +GetTelemetryDir = util.GetTelemetryDir +GetUnittestDataDir = util.GetUnittestDataDir +GetChromiumSrcDir = util.GetChromiumSrcDir +GetBuildDirectories = util.GetBuildDirectories + +IsExecutable = catapult_util.IsExecutable + + +def _HasWildcardCharacters(input_string): + # Could make this more precise. + return '*' in input_string or '+' in input_string + + +def FindInstalledWindowsApplication(application_path): + """Search common Windows installation directories for an application. + + Args: + application_path: Path to application relative from installation location. + Returns: + A string representing the full path, or None if not found. + """ + search_paths = [os.getenv('PROGRAMFILES(X86)'), + os.getenv('PROGRAMFILES'), + os.getenv('LOCALAPPDATA')] + search_paths += os.getenv('PATH', '').split(os.pathsep) + for search_path in search_paths: + if not search_path: + continue + path = os.path.join(search_path, application_path) + if _HasWildcardCharacters(path): + paths = glob.glob(path) + else: + paths = [path] + for p in paths: + if IsExecutable(p): + return p + return None + + +def IsSubpath(subpath, superpath): + """Returns True iff subpath is or is in superpath.""" + subpath = os.path.realpath(subpath) + superpath = os.path.realpath(superpath) + + while len(subpath) >= len(superpath): + if subpath == superpath: + return True + subpath = os.path.split(subpath)[0] + return False + + +def ListFiles(base_directory, should_include_dir=lambda _: True, + should_include_file=lambda _: True): + matching_files = [] + for root, dirs, files in os.walk(base_directory): + dirs[:] = [dir_name for dir_name in dirs if should_include_dir(dir_name)] + matching_files += [os.path.join(root, file_name) + for file_name in files if should_include_file(file_name)] + return sorted(matching_files) |