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}