package commands import ( "errors" "flag" "fmt" "github.com/MichaelMure/git-bug/bug" "github.com/MichaelMure/git-bug/bug/operations" "github.com/MichaelMure/git-bug/repository" ) var labelFlagSet = flag.NewFlagSet("label", flag.ExitOnError) var ( labelRemove = newFlagSet.Bool("r", false, "Remove a label") ) func runLabel(repo repository.Repo, args []string) error { labelFlagSet.Parse(args) args = labelFlagSet.Args() if len(args) == 0 { return errors.New("You must provide a bug id") } if len(args) == 1 { return errors.New("You must provide a label") } prefix := args[0] b, err := bug.FindBug(repo, prefix) if err != nil { return err } author, err := bug.GetUser(repo) if err != nil { return err } var added, removed []bug.Label snap := b.Compile() for _, arg := range args[1:] { label := bug.Label(arg) if *labelRemove { // check for duplicate if labelExist(removed, label) { fmt.Printf("label \"%s\" is a duplicate\n", arg) continue } // check that the label actually exist if !labelExist(snap.Labels, label) { fmt.Printf("label \"%s\" doesn't exist on this bug\n", arg) continue } removed = append(removed, label) } else { // check for duplicate if labelExist(added, label) { fmt.Printf("label \"%s\" is a duplicate\n", arg) continue } // check that the label doesn't already exist if labelExist(snap.Labels, label) { fmt.Printf("label \"%s\" is already set on this bug\n", arg) continue } added = append(added, label) } } if len(added) == 0 && len(removed) == 0 { return errors.New("no label added or removed") } labelOp := operations.NewLabelChangeOperation(author, added, removed) b.Append(labelOp) err = b.Commit(repo) return err } func labelExist(labels []bug.Label, label bug.Label) bool { for _, l := range labels { if l == label { return true } } return false } var labelCmd = &Command{ Description: "Manipulate bug's label", Usage: " [