From e6e01c2c003531a57f8ddb506d11ec78fc1c240a Mon Sep 17 00:00:00 2001 From: Ulises Mendez Martinez Date: Mon, 15 Apr 2024 14:35:44 +0000 Subject: ddk_bootstrap: Split --local and --kleaf_repo flags. * After this change `--local` indicates whether to fetch or not the build dependencies, whereas `kleaf_repo` inidicates where to place these dependencies when downloaded given a --build_id or --branch or where to locate them otherwise. * Additionally the script arguments are now sorted in lexicographical order. * This also makes the init_ddk script execution verbose, as the outputs from the script are useful for determining what is happening. Tested: python3 init.py --local --kleaf_repo=/abs/path/to/kleaf Bug: 328770706 Change-Id: I9f853e9d23480b37dc85a8ac444ba81d1f53c33b Signed-off-by: Ulises Mendez Martinez --- init.py | 45 +++++++++++++++++++++++++++++++-------------- init_test.py | 1 + 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/init.py b/init.py index e3f3238..c0fd035 100644 --- a/init.py +++ b/init.py @@ -67,14 +67,15 @@ class KleafBootstrap: self.build_id: str | None = known_args.build_id self.build_target: str | None = known_args.build_target self.ddk_workspace: pathlib.Path = _resolve(known_args.ddk_workspace) - self.local: pathlib.Path | None = _resolve(known_args.local) + self.kleaf_repo: pathlib.Path | None = _resolve(known_args.kleaf_repo) + self.local: bool = known_args.local self.url_fmt: str = known_args.url_fmt self.unknown_args = unknown_args @staticmethod def _run_script(args: list[str], cwd: str | pathlib.Path = None): logging.debug("Running %s from %s", args, cwd) - subprocess.check_call(args, cwd=cwd) + subprocess.check_call(args, stderr=subprocess.STDOUT, cwd=cwd) def _common_args(self): common_args = [] @@ -88,9 +89,9 @@ class KleafBootstrap: def run(self): if self.local: args = [_TOOLS_BAZEL, "run", _INIT_DDK_TARGET] - args += ["--", "--kleaf_repo_dir", self.local] + args += ["--", "--kleaf_repo_dir", self.kleaf_repo] args += self._common_args() - self._run_script(args, cwd=self.local) + self._run_script(args, cwd=self.kleaf_repo) return if not self.build_id: @@ -163,13 +164,10 @@ if __name__ == "__main__": parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawTextHelpFormatter ) + # For every use case, one of the following is needed: + # --branch | --build_id for the remote use case. + # --local for an existing checkout (--kleaf_repo becomes required). group = parser.add_mutually_exclusive_group(required=True) - group.add_argument( - "--local", - help="Path to Kleaf local checkout.", - type=pathlib.Path, - default=None, - ) group.add_argument( "--branch", help=( @@ -183,6 +181,19 @@ if __name__ == "__main__": "--build_id", type=str, help="the build id to download the build for, e.g. 6148204", + default=None, + ) + group.add_argument( + "--local", + help="Whether to use a local source tree containing Kleaf.", + action="store_true", + default=None, + ) + parser.add_argument( + "--build_target", + type=str, + help='the build target to download, e.g. "kernel_aarch64"', + default=_DEFAULT_BUILD_TARGET, ) parser.add_argument( "--ddk_workspace", @@ -194,10 +205,13 @@ if __name__ == "__main__": default=os.getcwd(), ) parser.add_argument( - "--build_target", - type=str, - help='the build target to download, e.g. "kernel_aarch64"', - default=_DEFAULT_BUILD_TARGET, + "--kleaf_repo", + help=( + "Path to the Kleaf source tree. Build dependencies are taken from" + " there when --local is provided, or downloaded there otherwise." + ), + type=pathlib.Path, + default=None, ) parser.add_argument( "--url_fmt", @@ -205,6 +219,9 @@ if __name__ == "__main__": default=_ARTIFACT_URL_FMT, ) known_args, unknown_args = parser.parse_known_args() + # Validate pre-condition. + if known_args.local and not known_args.kleaf_repo: + parser.error("--local requires --kleaf_repo.") logging.basicConfig( level=logging.DEBUG, format="%(levelname)s: %(message)s" ) diff --git a/init_test.py b/init_test.py index 3d5edbe..65e88da 100644 --- a/init_test.py +++ b/init_test.py @@ -85,6 +85,7 @@ class KleafBootstrapTest(unittest.TestCase): build_target=_DEFAULT_BUILD_TARGET, build_id=None, ddk_workspace=None, + kleaf_repo=None, local=None, url_fmt=_ARTIFACT_URL_FMT, ), []) -- cgit v1.2.3