package commands import ( "github.com/spf13/cobra" "github.com/MichaelMure/git-bug/cache" "github.com/MichaelMure/git-bug/commands/select" "github.com/MichaelMure/git-bug/input" "github.com/MichaelMure/git-bug/util/interrupt" ) type commentAddOptions struct { messageFile string message string } func newCommentAddCommand() *cobra.Command { env := newEnv() options := commentAddOptions{} cmd := &cobra.Command{ Use: "add []", Short: "Add a new comment to a bug.", PreRunE: loadRepoEnsureUser(env), RunE: func(cmd *cobra.Command, args []string) error { return runCommentAdd(env, options, args) }, } flags := cmd.Flags() flags.SortFlags = false flags.StringVarP(&options.messageFile, "file", "F", "", "Take the message from the given file. Use - to read the message from the standard input") flags.StringVarP(&options.message, "message", "m", "", "Provide the new message from the command line") return cmd } func runCommentAdd(env *Env, opts commentAddOptions, args []string) error { backend, err := cache.NewRepoCache(env.repo) if err != nil { return err } defer backend.Close() interrupt.RegisterCleaner(backend.Close) b, args, err := _select.ResolveBug(backend, args) if err != nil { return err } if opts.messageFile != "" && opts.message == "" { opts.message, err = input.BugCommentFileInput(opts.messageFile) if err != nil { return err } } if opts.messageFile == "" && opts.message == "" { opts.message, err = input.BugCommentEditorInput(backend, "") if err == input.ErrEmptyMessage { env.err.Println("Empty message, aborting.") return nil } if err != nil { return err } } _, err = b.AddComment(opts.message) if err != nil { return err } return b.Commit() }