title_edit.go

 1package commands
 2
 3import (
 4	"github.com/spf13/cobra"
 5
 6	_select "github.com/MichaelMure/git-bug/commands/select"
 7	"github.com/MichaelMure/git-bug/input"
 8	"github.com/MichaelMure/git-bug/util/text"
 9)
10
11type titleEditOptions struct {
12	title          string
13	nonInteractive bool
14}
15
16func newTitleEditCommand() *cobra.Command {
17	env := newEnv()
18	options := titleEditOptions{}
19
20	cmd := &cobra.Command{
21		Use:     "edit [ID]",
22		Short:   "Edit a title of a bug.",
23		PreRunE: loadBackendEnsureUser(env),
24		RunE: closeBackend(env, func(cmd *cobra.Command, args []string) error {
25			return runTitleEdit(env, options, args)
26		}),
27	}
28
29	flags := cmd.Flags()
30	flags.SortFlags = false
31
32	flags.StringVarP(&options.title, "title", "t", "",
33		"Provide a title to describe the issue",
34	)
35	flags.BoolVar(&options.nonInteractive, "non-interactive", false, "Do not ask for user input")
36
37	return cmd
38}
39
40func runTitleEdit(env *Env, opts titleEditOptions, args []string) error {
41	b, args, err := _select.ResolveBug(env.backend, args)
42	if err != nil {
43		return err
44	}
45
46	snap := b.Snapshot()
47
48	if opts.title == "" {
49		if opts.nonInteractive {
50			env.err.Println("No title given. Use -m or -F option to specify a title. Aborting.")
51			return nil
52		}
53		opts.title, err = input.BugTitleEditorInput(env.repo, snap.Title)
54		if err == input.ErrEmptyTitle {
55			env.out.Println("Empty title, aborting.")
56			return nil
57		}
58		if err != nil {
59			return err
60		}
61	}
62
63	if opts.title == snap.Title {
64		env.err.Println("No change, aborting.")
65	}
66
67	_, err = b.SetTitle(text.CleanupOneLine(opts.title))
68	if err != nil {
69		return err
70	}
71
72	return b.Commit()
73}