#!/usr/bin/env python3 import argparse import os from . import manifest from . import vcs from .log import get_logger, enable_debug_logging from .download import download_from_github here = os.path.dirname(__file__) wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir)) logger = get_logger() MYPY = False if MYPY: # MYPY is set to True when run under Mypy. from typing import Any from typing import Optional from .manifest import Manifest # avoid cyclic import def update(tests_root, # type: str manifest, # type: Manifest manifest_path=None, # type: Optional[str] working_copy=True, # type: bool cache_root=None, # type: Optional[str] rebuild=False, # type: bool parallel=True # type: bool ): # type: (...) -> bool logger.warning("Deprecated; use manifest.load_and_update instead") logger.info("Updating manifest") tree = vcs.get_tree(tests_root, manifest, manifest_path, cache_root, working_copy, rebuild) return manifest.update(tree, parallel) def update_from_cli(**kwargs): # type: (**Any) -> None tests_root = kwargs["tests_root"] path = kwargs["path"] assert tests_root is not None if not kwargs["rebuild"] and kwargs["download"]: download_from_github(path, tests_root) manifest.load_and_update(tests_root, path, kwargs["url_base"], update=True, rebuild=kwargs["rebuild"], cache_root=kwargs["cache_root"], parallel=kwargs["parallel"]) def abs_path(path): # type: (str) -> str return os.path.abspath(os.path.expanduser(path)) def create_parser(): # type: () -> argparse.ArgumentParser parser = argparse.ArgumentParser() parser.add_argument( "-v", "--verbose", dest="verbose", action="store_true", default=False, help="Turn on verbose logging") 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( "--url-base", action="store", default="/", help="Base url to use as the mount point for tests in this manifest.") parser.add_argument( "--no-download", dest="download", action="store_false", default=True, help="Never attempt to download the manifest.") parser.add_argument( "--cache-root", action="store", default=os.path.join(wpt_root, ".wptcache"), help="Path in which to store any caches (default <tests_root>/.wptcache/)") parser.add_argument( "--no-parallel", dest="parallel", action="store_false", default=True, help="Do not parallelize building the manifest") return parser def run(*args, **kwargs): # type: (*Any, **Any) -> None if kwargs["path"] is None: kwargs["path"] = os.path.join(kwargs["tests_root"], "MANIFEST.json") if kwargs["verbose"]: enable_debug_logging() update_from_cli(**kwargs) def main(): # type: () -> None opts = create_parser().parse_args() run(**vars(opts))