-
Notifications
You must be signed in to change notification settings - Fork 1
/
cmd_config.go
90 lines (75 loc) · 1.99 KB
/
cmd_config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package main
import (
"context"
"flag"
"fmt"
"io"
fuzzyfinder "github.com/ktr0731/go-fuzzyfinder"
"github.com/pokstad/nestable/orm"
)
type getConfigCmd struct {
repo orm.Repo
key *string
}
func newGetConfigCmd(repo orm.Repo) subCmd {
return &getConfigCmd{repo: repo}
}
func (_ *getConfigCmd) Help() string {
return `Get the config value for a given key.`
}
func (_ *getConfigCmd) Names() []string {
return []string{"get-config", "gc"}
}
func (gcc *getConfigCmd) FlagSet() *flag.FlagSet {
fs := flag.NewFlagSet("set-config", flag.ExitOnError)
gcc.key = fs.String("key", "", "config key to get")
return fs
}
func (gcc *getConfigCmd) Run(ctx context.Context, r io.Reader, w io.Writer) error {
if *gcc.key == "" {
keys, err := gcc.repo.GetConfigKeys(ctx)
if err != nil {
return fmt.Errorf("getting config keys: %w", err)
}
i, err := fuzzyfinder.Find(keys, func(i int) string {
return keys[i]
})
if err != nil {
return fmt.Errorf("selecting config key: %w", err)
}
*gcc.key = keys[i]
}
value, err := gcc.repo.GetConfig(ctx, orm.ConfigKey(*gcc.key))
if err != nil {
return fmt.Errorf("getting config %q: %w", *gcc.key, err)
}
_, err = fmt.Fprintln(w, value)
return err
}
type setConfigCmd struct {
repo orm.Repo
key *string
value *string
}
func newSetConfigCmd(repo orm.Repo) subCmd {
return &setConfigCmd{repo: repo}
}
func (_ *setConfigCmd) Help() string {
return `Set the config value for a given key.`
}
func (_ *setConfigCmd) Names() []string {
return []string{"set-config", "sc"}
}
func (gcc *setConfigCmd) FlagSet() *flag.FlagSet {
fs := flag.NewFlagSet("set-config", flag.ExitOnError)
gcc.key = fs.String("key", "", "config key to change")
gcc.value = fs.String("value", "", "config value to change to")
return fs
}
func (gcc *setConfigCmd) Run(ctx context.Context, r io.Reader, w io.Writer) error {
err := gcc.repo.SetConfig(ctx, orm.ConfigKey(*gcc.key), *gcc.value)
if err != nil {
return fmt.Errorf("setting config %q: %w", *gcc.key, err)
}
return nil
}