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}
14
15func newTitleEditCommand() *cobra.Command {
16	env := newEnv()
17	options := titleEditOptions{}
18
19	cmd := &cobra.Command{
20		Use:      "edit [ID]",
21		Short:    "Edit a title of a bug.",
22		PreRunE:  loadBackendEnsureUser(env),
23		PostRunE: closeBackend(env),
24		RunE: 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
36	return cmd
37}
38
39func runTitleEdit(env *Env, opts titleEditOptions, args []string) error {
40	b, args, err := _select.ResolveBug(env.backend, args)
41	if err != nil {
42		return err
43	}
44
45	snap := b.Snapshot()
46
47	if opts.title == "" {
48		opts.title, err = input.BugTitleEditorInput(env.repo, snap.Title)
49		if err == input.ErrEmptyTitle {
50			env.out.Println("Empty title, aborting.")
51			return nil
52		}
53		if err != nil {
54			return err
55		}
56	}
57
58	if opts.title == snap.Title {
59		env.err.Println("No change, aborting.")
60	}
61
62	_, err = b.SetTitle(text.CleanupOneLine(opts.title))
63	if err != nil {
64		return err
65	}
66
67	return b.Commit()
68}