board_addbug.go

 1package boardcmd
 2
 3import (
 4	"fmt"
 5	"strconv"
 6
 7	"github.com/spf13/cobra"
 8
 9	bugcmd "github.com/git-bug/git-bug/commands/bug"
10	"github.com/git-bug/git-bug/commands/execenv"
11	_select "github.com/git-bug/git-bug/commands/select"
12	"github.com/git-bug/git-bug/entity"
13)
14
15type boardAddBugOptions struct {
16	column string
17}
18
19func newBoardAddBugCommand() *cobra.Command {
20	env := execenv.NewEnv()
21	options := boardAddBugOptions{}
22
23	cmd := &cobra.Command{
24		Use:     "add-bug [BOARD_ID] [BUG_ID]",
25		Short:   "Add a bug to a board",
26		PreRunE: execenv.LoadBackend(env),
27		RunE: execenv.CloseBackend(env, func(cmd *cobra.Command, args []string) error {
28			return runBoardAddBug(env, options, args)
29		}),
30		ValidArgsFunction: BoardAndBugCompletion(env),
31	}
32
33	flags := cmd.Flags()
34	flags.SortFlags = false
35
36	flags.StringVarP(&options.column, "column", "c", "1",
37		"The column to add to. Either a column Id or prefix, or the column number starting from 1.")
38	_ = cmd.RegisterFlagCompletionFunc("column", ColumnCompletion(env))
39
40	return cmd
41}
42
43func runBoardAddBug(env *execenv.Env, opts boardAddBugOptions, args []string) error {
44	board, args, err := ResolveSelected(env.Backend, args)
45	if err != nil {
46		return err
47	}
48
49	var columnId entity.CombinedId
50
51	switch {
52	case err == nil:
53		// try to parse as column number
54		index, err := strconv.Atoi(opts.column)
55		if err == nil {
56			if index-1 >= 0 && index-1 < len(board.Snapshot().Columns) {
57				columnId = board.Snapshot().Columns[index-1].CombinedId
58			} else {
59				return fmt.Errorf("invalid column")
60			}
61		}
62		fallthrough // could be an Id
63	case _select.IsErrNoValidId(err):
64		board, columnId, err = env.Backend.Boards().ResolveColumn(opts.column)
65		if err != nil {
66			return err
67		}
68	default:
69		// actual error
70		return err
71	}
72
73	bug, _, err := bugcmd.ResolveSelected(env.Backend, args)
74	if err != nil {
75		return err
76	}
77
78	id, _, err := board.AddItemEntity(columnId, bug)
79	if err != nil {
80		return err
81	}
82
83	env.Out.Printf("%s created\n", id.Human())
84
85	return board.Commit()
86}