1package commands
 2
 3import (
 4	"fmt"
 5
 6	"github.com/MichaelMure/git-bug/cache"
 7	"github.com/MichaelMure/git-bug/commands/select"
 8	"github.com/MichaelMure/git-bug/input"
 9	"github.com/MichaelMure/git-bug/util/interrupt"
10	"github.com/spf13/cobra"
11)
12
13var (
14	commentAddMessageFile string
15	commentAddMessage     string
16)
17
18func runCommentAdd(cmd *cobra.Command, args []string) error {
19	backend, err := cache.NewRepoCache(repo)
20	if err != nil {
21		return err
22	}
23	defer backend.Close()
24	interrupt.RegisterCleaner(backend.Close)
25
26	b, args, err := _select.ResolveBug(backend, args)
27	if err != nil {
28		return err
29	}
30
31	if commentAddMessageFile != "" && commentAddMessage == "" {
32		commentAddMessage, err = input.BugCommentFileInput(commentAddMessageFile)
33		if err != nil {
34			return err
35		}
36	}
37
38	if commentAddMessageFile == "" && commentAddMessage == "" {
39		commentAddMessage, err = input.BugCommentEditorInput(backend, "")
40		if err == input.ErrEmptyMessage {
41			fmt.Println("Empty message, aborting.")
42			return nil
43		}
44		if err != nil {
45			return err
46		}
47	}
48
49	_, err = b.AddComment(commentAddMessage)
50	if err != nil {
51		return err
52	}
53
54	return b.Commit()
55}
56
57var commentAddCmd = &cobra.Command{
58	Use:     "add [<id>]",
59	Short:   "Add a new comment to a bug.",
60	PreRunE: loadRepo,
61	RunE:    runCommentAdd,
62}
63
64func init() {
65	commentCmd.AddCommand(commentAddCmd)
66
67	commentAddCmd.Flags().SortFlags = false
68
69	commentAddCmd.Flags().StringVarP(&commentAddMessageFile, "file", "F", "",
70		"Take the message from the given file. Use - to read the message from the standard input",
71	)
72
73	commentAddCmd.Flags().StringVarP(&commentAddMessage, "message", "m", "",
74		"Provide the new message from the command line",
75	)
76}