diff options
Diffstat (limited to 'llvm_tools/bb_add.py')
-rwxr-xr-x | llvm_tools/bb_add.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/llvm_tools/bb_add.py b/llvm_tools/bb_add.py new file mode 100755 index 00000000..1ff83490 --- /dev/null +++ b/llvm_tools/bb_add.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +# Copyright 2024 The ChromiumOS Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Runs `bb add`, with additional convenience features.""" + +import argparse +import logging +import os +import shlex +import sys +from typing import Iterable, List + +import cros_cls +import llvm_next + + +def generate_bb_add_command( + use_llvm_next: bool, + disable_werror: bool, + extra_cls: Iterable[cros_cls.ChangeListURL], + bots: Iterable[str], +) -> List[str]: + cls: List[cros_cls.ChangeListURL] = [] + if use_llvm_next: + if not llvm_next.LLVM_NEXT_TESTING_CLS: + raise ValueError( + "llvm-next testing requested, but no llvm-next CLs exist." + ) + cls += llvm_next.LLVM_NEXT_TESTING_CLS + + if disable_werror: + cls.append(llvm_next.DISABLE_WERROR_CL) + + if extra_cls: + cls += extra_cls + + cmd = ["bb", "add"] + for cl in cls: + cmd += ("-cl", cl.crrev_url_without_http()) + cmd += bots + return cmd + + +def main(argv: List[str]) -> None: + logging.basicConfig( + format=">> %(asctime)s: %(levelname)s: %(filename)s:%(lineno)d: " + "%(message)s", + level=logging.INFO, + ) + + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument( + "--llvm-next", + action="store_true", + help="Add the current llvm-next patch set.", + ) + parser.add_argument( + "--disable-werror", + action="store_true", + help="Add the 'disable -Werror' patch sets", + ) + parser.add_argument( + "--cl", + action="append", + type=cros_cls.ChangeListURL.parse, + help=""" + CL to add to the `bb add` run. May be specified multiple times. In the + form crrev.com/c/123456. + """, + ) + parser.add_argument("bot", nargs="+", help="Bot(s) to run `bb add` with.") + opts = parser.parse_args(argv) + + cmd = generate_bb_add_command( + use_llvm_next=opts.llvm_next, + disable_werror=opts.disable_werror, + extra_cls=opts.cl, + bots=opts.bot, + ) + logging.info("Running `bb add` command: %s...", shlex.join(cmd)) + # execvp raises if it fails, so no need to check. + os.execvp(cmd[0], cmd) + + +if __name__ == "__main__": + main(sys.argv[1:]) |