| #!/usr/bin/env python |
| import argparse |
| import imp |
| import os |
| import sys |
| |
| import manifest |
| from . import vcs |
| from .log import get_logger |
| |
| here = os.path.dirname(__file__) |
| |
| wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir)) |
| |
| |
| def update(tests_root, manifest, working_copy=False): |
| tree = None |
| if not working_copy: |
| tree = vcs.Git.for_path(tests_root, manifest.url_base) |
| if tree is None: |
| tree = vcs.FileSystem(tests_root, manifest.url_base) |
| |
| return manifest.update(tree) |
| |
| |
| def update_from_cli(**kwargs): |
| tests_root = kwargs["tests_root"] |
| path = kwargs["path"] |
| assert tests_root is not None |
| |
| m = None |
| logger = get_logger() |
| |
| if not kwargs.get("rebuild", False): |
| try: |
| m = manifest.load(tests_root, path) |
| except manifest.ManifestVersionMismatch: |
| logger.info("Manifest version changed, rebuilding") |
| m = None |
| else: |
| logger.info("Updating manifest") |
| |
| if m is None: |
| m = manifest.Manifest(kwargs["url_base"]) |
| |
| changed = update(tests_root, |
| m, |
| working_copy=kwargs["work"]) |
| if changed: |
| manifest.write(m, path) |
| |
| |
| def abs_path(path): |
| return os.path.abspath(os.path.expanduser(path)) |
| |
| |
| def create_parser(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument( |
| "-p", "--path", type=abs_path, help="Path to manifest file.") |
| parser.add_argument( |
| "--tests-root", type=abs_path, default=wpt_root, help="Path to root of tests.") |
| parser.add_argument( |
| "-r", "--rebuild", action="store_true", default=False, |
| help="Force a full rebuild of the manifest.") |
| parser.add_argument( |
| "--work", action="store_true", default=False, |
| help="Build from the working tree rather than the latest commit") |
| parser.add_argument( |
| "--url-base", action="store", default="/", |
| help="Base url to use as the mount point for tests in this manifest.") |
| return parser |
| |
| |
| def find_top_repo(): |
| path = here |
| rv = None |
| while path != "/": |
| if vcs.is_git_repo(path): |
| rv = path |
| path = os.path.abspath(os.path.join(path, os.pardir)) |
| |
| return rv |
| |
| |
| def run(**kwargs): |
| if kwargs["path"] is None: |
| kwargs["path"] = os.path.join(kwargs["tests_root"], "MANIFEST.json") |
| |
| update_from_cli(**kwargs) |
| |
| |
| def main(): |
| opts = create_parser().parse_args() |
| |
| run(**vars(opts)) |