func switchBuild(cmd *c.Command, args []string) { dev.MustFindCrowbar() if ok, _ := dev.IsClean(); !ok { log.Fatalln("Crowbar is not clean, cannot switch builds.") } rels := dev.Releases() current := dev.CurrentBuild() var target dev.Build found := false switch len(args) { case 0: target, found = current, true case 1: // Were we passed a known release? rel, foundRel := rels[args[0]] if foundRel { for _, build := range []string{current.Name(), "master"} { target, found = rel.Builds()[build] if found { break } } } else { target, found = dev.Builds()[args[0]] } default: log.Fatalf("switch takes 0 or 1 argument.") } if !found { log.Fatalf("%s is not anything we can switch to!") } ok, tokens := dev.Switch(target) for _, tok := range tokens { if tok.Results != nil { log.Printf("%s: %v\n", tok.Name, tok.Results) } } if ok { log.Printf("Switched to %s\n", target.FullName()) os.Exit(0) } log.Printf("Failed to switch to %s!\n", target.FullName()) ok, _ = dev.Switch(current) os.Exit(1) }
func barclampsInBuild(cmd *c.Command, args []string) { dev.MustFindCrowbar() res := make([]string, 0, 20) var build dev.Build var found bool if len(args) == 0 { build = dev.CurrentBuild() } else if len(args) == 1 { builds := dev.Builds() build, found = builds[args[0]] if !found { log.Fatalln("No such build %s", args[0]) } } for name := range dev.BarclampsInBuild(build) { res = append(res, name) } sort.Strings(res) for _, name := range res { fmt.Println(name) } }
func zapBuild(cmd *c.Command, args []string) { if len(args) != 1 { log.Fatalf("remove-build only accepts one argument!\n") } buildName := args[0] dev.MustFindCrowbar() if !strings.Contains(buildName, "/") { // We were passed what appears to be a raw build name. // Turn it into a real build by prepending the release name. buildName = dev.CurrentRelease().Name() + "/" + buildName } builds := dev.Builds() build, found := builds[buildName] if !found { log.Fatalf("%s is not a build, cannot delete it!", buildName) } if strings.HasSuffix(buildName, "/master") { log.Fatalf("Cannot delete the master build in a release!") } if err := build.Zap(); err != nil { log.Fatal(err) } log.Printf("Build %s deleted.\n", buildName) }