| #!/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:]) |