| #!/usr/bin/env python2.7 | |
| # Copyright 2020 The Fuchsia Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # A collection of utilities used by scripts in this directory. | |
| import os | |
| import re | |
| import subprocess | |
| _SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) | |
| FUCHSIA_ROOT = os.path.dirname( # $root | |
| os.path.dirname( # scripts | |
| _SCRIPT_DIR)) # unification | |
| _JIRI = os.path.join(FUCHSIA_ROOT, '.jiri_root', 'bin', 'jiri') | |
| FX = os.path.join(FUCHSIA_ROOT, 'scripts', 'fx') | |
| def run_command(command): | |
| return subprocess.check_output(command, cwd=FUCHSIA_ROOT) | |
| def is_tree_clean(): | |
| diff = run_command(['git', 'status', '--porcelain']) | |
| if diff: | |
| print('Please make sure your tree is clean before running this script') | |
| print(diff) | |
| return False | |
| return True | |
| _PROJECTS = None | |
| def _list_projects(): | |
| data = run_command([_JIRI, 'runp', _JIRI, 'project']) | |
| result = {} | |
| current_project = None | |
| for line in data.splitlines(): | |
| match = re.match('^\* project (.*)$', line) | |
| if match: | |
| current_project = match.group(1) | |
| continue | |
| match = re.match('^ Path:\s+(.*)$', line) | |
| if match: | |
| result[current_project] = os.path.abspath(match.group(1)) | |
| current_project = None | |
| return result | |
| def is_in_fuchsia_project(file): | |
| global _PROJECTS | |
| if not _PROJECTS: | |
| _PROJECTS = _list_projects() | |
| file = os.path.abspath(file) | |
| for project, base in _PROJECTS.iteritems(): | |
| if project == 'fuchsia': | |
| # This is the root of the checkout, won't get any useful | |
| # information out of this one. | |
| continue | |
| if os.path.commonprefix([file, base]) == base: | |
| return False | |
| return True | |
| def fx_format(path): | |
| run_command([FX, 'format-code', '--files=' + path]) |