blob: 1ff834907521205033b6dc062090893991430b30 [file] [log] [blame] [edit]
#!/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:])