1package commands
 2
 3import (
 4	"errors"
 5	"fmt"
 6
 7	"github.com/MichaelMure/git-bug/cache"
 8	"github.com/MichaelMure/git-bug/input"
 9	"github.com/spf13/cobra"
10)
11
12var (
13	commentMessageFile string
14	commentMessage     string
15)
16
17func runComment(cmd *cobra.Command, args []string) error {
18	var err error
19
20	if len(args) > 1 {
21		return errors.New("Only one bug id is supported")
22	}
23
24	if len(args) == 0 {
25		return errors.New("You must provide a bug id")
26	}
27
28	backend, err := cache.NewRepoCache(repo)
29	if err != nil {
30		return err
31	}
32	defer backend.Close()
33
34	prefix := args[0]
35
36	if commentMessageFile != "" && commentMessage == "" {
37		commentMessage, err = input.FromFile(commentMessageFile)
38		if err != nil {
39			return err
40		}
41	}
42
43	if commentMessage == "" {
44		commentMessage, err = input.BugCommentEditorInput(backend.Repository())
45		if err == input.ErrEmptyMessage {
46			fmt.Println("Empty message, aborting.")
47			return nil
48		}
49		if err != nil {
50			return err
51		}
52	}
53
54	b, err := backend.ResolveBugPrefix(prefix)
55	if err != nil {
56		return err
57	}
58
59	err = b.AddComment(commentMessage)
60	if err != nil {
61		return err
62	}
63
64	return b.Commit()
65}
66
67var commentCmd = &cobra.Command{
68	Use:   "comment <id>",
69	Short: "Add a new comment to a bug",
70	RunE:  runComment,
71}
72
73func init() {
74	RootCmd.AddCommand(commentCmd)
75
76	commentCmd.Flags().StringVarP(&commentMessageFile, "file", "F", "",
77		"Take the message from the given file. Use - to read the message from the standard input",
78	)
79
80	commentCmd.Flags().StringVarP(&commentMessage, "message", "m", "",
81		"Provide the new message from the command line",
82	)
83}