cros_workon_make: migrate the script to python
Migrate the cros_workon_make script to Python.
BUG=b:294242818
TEST=./run_tests
Change-Id: Ie4731679d7d473ce437ca3591d5d1bb62109fd9d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4742704
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Tested-by: Anuj Jamwal <anujjamwal@google.com>
Commit-Queue: Anuj Jamwal <anujjamwal@google.com>
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Auto-Submit: Anuj Jamwal <anujjamwal@google.com>
diff --git a/scripts/cros_workon_make.py b/scripts/cros_workon_make.py
new file mode 100644
index 0000000..9e0edb1
--- /dev/null
+++ b/scripts/cros_workon_make.py
@@ -0,0 +1,89 @@
+# Copyright 2023 The ChromiumOS Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Build cros_workon package incrementally.
+
+Simple wrapper script to build a cros_workon package incrementally. You
+must already be cros_workon'ing the package in question. This had been
+migrated to python from chromiumos/src/scripts/cros_workon_make.
+"""
+
+import logging
+from typing import List, Optional
+
+from chromite.lib import build_target_lib
+from chromite.lib import commandline
+from chromite.lib import cros_build_lib
+from chromite.lib import workon_helper
+
+
+def GetParser() -> commandline.ArgumentParser:
+ """Get a CLI parser."""
+ parser = commandline.ArgumentParser(description=__doc__)
+ parser.add_argument(
+ "-b",
+ "--board",
+ "--build-target",
+ default=cros_build_lib.GetDefaultBoard(),
+ required=True,
+ help="The board to set package keywords for.",
+ )
+ parser.add_argument(
+ "--test",
+ default=False,
+ action="store_true",
+ help="Compile and run tests as well",
+ )
+ parser.add_argument(
+ "--reconf",
+ default=False,
+ action="store_true",
+ help="Re-run configure and prepare steps",
+ )
+ parser.add_argument(
+ "--install",
+ default=False,
+ action="store_true",
+ help="Incrementally build and install your package",
+ )
+ parser.add_argument(
+ "--scrub",
+ default=False,
+ action="store_true",
+ help="Blow away all in-tree files not managed by git",
+ )
+ parser.add_argument(
+ "package",
+ help="Package to build.",
+ )
+ return parser
+
+
+def main(argv: Optional[List[str]]) -> Optional[int]:
+ commandline.RunInsideChroot()
+
+ parser = GetParser()
+ options = parser.parse_args(argv)
+ options.Freeze()
+
+ board = options.board
+ sysroot = build_target_lib.get_default_sysroot_path(board)
+ helper = workon_helper.WorkonHelper(sysroot, board)
+
+ pkg = options.package
+
+ if options.scrub:
+ logging.warning("--scrub will destroy ALL FILES unknown to git!")
+ if cros_build_lib.BooleanPrompt():
+ helper.ScrubPackage(pkg)
+ else:
+ logging.info("Not scrubbing; exiting gracefully")
+ elif options.install:
+ helper.InstallPackage(pkg)
+ else:
+ helper.BuildPackage(
+ pkg,
+ clean=options.reconf,
+ test=options.test,
+ )