blob: 4a793fafabe3ce84551736594675c65ea12a6289 [file] [log] [blame]
package main
import (
"flag"
"io"
"io/ioutil"
"regexp"
"go.chromium.org/luci/cq/api/config/v2"
"go.skia.org/infra/go/common"
"go.skia.org/infra/go/cq"
"go.skia.org/infra/go/sklog"
"go.skia.org/infra/go/util"
)
var (
configFile = flag.String("cfg-file", "", "commit-queue.cfg file to edit.")
newBranch = flag.String("new-branch", "", "Short name of the new branch.")
oldBranch = flag.String("old-branch", "master", "Short name of the existing branch whose config to copy.")
excludeTrybots = common.NewMultiStringFlag("exclude-trybots", nil, "Regular expressions for trybot names to exclude.")
includeExperimental = flag.Bool("include-experimental", false, "If true, include experimental trybots.")
includeTreeCheck = flag.Bool("include-tree-check", false, "If true, include tree open check.")
)
func main() {
common.Init()
if *configFile == "" {
sklog.Fatal("--cfg-file is required.")
}
if *newBranch == "" {
sklog.Fatal("--new-branch is required.")
}
excludeTrybotRegexp := make([]*regexp.Regexp, 0, len(*excludeTrybots))
for _, excludeTrybot := range *excludeTrybots {
re, err := regexp.Compile(excludeTrybot)
if err != nil {
sklog.Fatalf("Failed to compile regular expression from %q; %s", excludeTrybot, err)
}
excludeTrybotRegexp = append(excludeTrybotRegexp, re)
}
// Read the config file.
oldCfgBytes, err := ioutil.ReadFile(*configFile)
if err != nil {
sklog.Fatalf("Failed to read %s; %s", *configFile, err)
}
// Update the config.
newCfgBytes, err := cq.WithUpdateCQConfig(oldCfgBytes, func(cfg *config.Config) error {
return cq.CloneBranch(cfg, *oldBranch, *newBranch, *includeExperimental, *includeTreeCheck, excludeTrybotRegexp)
})
if err != nil {
sklog.Fatal(err)
}
// Write the new config.
if err := util.WithWriteFile(*configFile, func(w io.Writer) error {
_, err := w.Write(newCfgBytes)
return err
}); err != nil {
sklog.Fatalf("Failed to write config file: %s", err)
}
}