1package commands
2
3import (
4 "errors"
5 "fmt"
6
7 "github.com/MichaelMure/git-bug/cache"
8 "github.com/MichaelMure/git-bug/operations"
9 "github.com/spf13/cobra"
10)
11
12var labelRemove bool
13
14func runLabel(cmd *cobra.Command, args []string) error {
15 if len(args) == 0 {
16 return errors.New("You must provide a bug id")
17 }
18
19 if len(args) == 1 {
20 return errors.New("You must provide a label")
21 }
22
23 backend, err := cache.NewRepoCache(repo)
24 if err != nil {
25 return err
26 }
27 defer backend.Close()
28
29 prefix := args[0]
30
31 var add, remove []string
32
33 if labelRemove {
34 remove = args[1:]
35 } else {
36 add = args[1:]
37 }
38
39 b, err := backend.ResolveBugPrefix(prefix)
40 if err != nil {
41 return err
42 }
43
44 changes, err := b.ChangeLabels(add, remove)
45
46 for _, change := range changes {
47 switch change.Status {
48 case operations.LabelChangeAdded:
49 fmt.Printf("label %s added\n", change.Label)
50 case operations.LabelChangeRemoved:
51 fmt.Printf("label %s removed\n", change.Label)
52 case operations.LabelChangeDuplicateInOp:
53 fmt.Printf("label %s is a duplicate\n", change.Label)
54 case operations.LabelChangeAlreadySet:
55 fmt.Printf("label %s was already set\n", change.Label)
56 case operations.LabelChangeDoesntExist:
57 fmt.Printf("label %s doesn't exist on this bug\n", change.Label)
58 default:
59 panic(fmt.Sprintf("unknown label change status %v", change.Status))
60 }
61 }
62
63 if err != nil {
64 return err
65 }
66
67 return b.Commit()
68}
69
70var labelCmd = &cobra.Command{
71 Use: "label <id> [<label>...]",
72 Short: "Manipulate bug's label",
73 RunE: runLabel,
74}
75
76func init() {
77 RootCmd.AddCommand(labelCmd)
78
79 labelCmd.Flags().SortFlags = false
80
81 labelCmd.Flags().BoolVarP(&labelRemove, "remove", "r", false,
82 "Remove a label",
83 )
84}