summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlises Mendez Martinez <umendez@google.com>2024-04-15 14:35:44 +0000
committerUlises Mendez Martinez <umendez@google.com>2024-04-15 15:02:33 +0000
commite6e01c2c003531a57f8ddb506d11ec78fc1c240a (patch)
tree5e88fe5b887fb6b36a55ba4917c4959ddf2a113b
parent78a01907af19e548fb06e82cebb32c30089be279 (diff)
downloadbootstrap-e6e01c2c003531a57f8ddb506d11ec78fc1c240a.tar.gz
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 <umendez@google.com>
-rw-r--r--init.py45
-rw-r--r--init_test.py1
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,14 +164,11 @@ 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=(
"Android Kernel branch from CI. e.g."
@@ -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,
), [])