new.go

 1package commands
 2
 3import (
 4	"fmt"
 5	"github.com/MichaelMure/git-bug/bug"
 6	"github.com/MichaelMure/git-bug/bug/operations"
 7	"github.com/MichaelMure/git-bug/input"
 8	"github.com/spf13/cobra"
 9)
10
11var (
12	newTitle       string
13	newMessage     string
14	newMessageFile string
15)
16
17func runNewBug(cmd *cobra.Command, args []string) error {
18	var err error
19
20	if newMessageFile != "" && newMessage == "" {
21		newMessage, err = input.FromFile(newMessageFile)
22		if err != nil {
23			return err
24		}
25	}
26
27	if newMessage == "" || newTitle == "" {
28		newTitle, newMessage, err = input.BugCreateEditorInput(repo, newTitle, newMessage)
29
30		if err == input.ErrEmptyTitle {
31			fmt.Println("Empty title, aborting.")
32			return nil
33		}
34		if err != nil {
35			return err
36		}
37	}
38
39	author, err := bug.GetUser(repo)
40	if err != nil {
41		return err
42	}
43
44	newBug, err := operations.Create(author, newTitle, newMessage)
45	if err != nil {
46		return err
47	}
48
49	err = newBug.Commit(repo)
50
51	if err != nil {
52		return err
53	}
54
55	fmt.Printf("%s created\n", newBug.HumanId())
56
57	return nil
58}
59
60var newCmd = &cobra.Command{
61	Use:   "new [<option>...]",
62	Short: "Create a new bug",
63	RunE:  runNewBug,
64}
65
66func init() {
67	RootCmd.AddCommand(newCmd)
68
69	newCmd.Flags().StringVarP(&newTitle, "title", "t", "",
70		"Provide a title to describe the issue",
71	)
72	newCmd.Flags().StringVarP(&newMessage, "message", "m", "",
73		"Provide a message to describe the issue",
74	)
75	newCmd.Flags().StringVarP(&newMessageFile, "file", "F", "",
76		"Take the message from the given file. Use - to read the message from the standard input",
77	)
78}