github.com/yourbase/yb@v0.7.1/cmd/yb/config.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/spf13/cobra" 8 "github.com/yourbase/commons/ini" 9 "github.com/yourbase/yb/internal/config" 10 "go4.org/xdgdir" 11 "zombiezen.com/go/log" 12 ) 13 14 var ( 15 VARS = []string{"environment", "log-level", "log-section", "no-pretty-output"} 16 ) 17 18 func newConfigCmd(cfg ini.FileSet) *cobra.Command { 19 group := &cobra.Command{ 20 Use: "config", 21 Short: "Print or change settings", 22 SilenceErrors: true, 23 SilenceUsage: true, 24 } 25 group.AddCommand(newConfigGetCmd(cfg), newConfigSetCmd(cfg)) 26 return group 27 } 28 29 func newConfigGetCmd(cfg ini.FileSet) *cobra.Command { 30 return &cobra.Command{ 31 Use: "get KEY", 32 Short: "Print configuration setting", 33 SilenceErrors: true, 34 SilenceUsage: true, 35 DisableFlagsInUseLine: true, 36 Args: cobra.ExactArgs(1), 37 RunE: func(cmd *cobra.Command, args []string) error { 38 k := args[0] 39 for _, configVar := range VARS { 40 if k == configVar { 41 fmt.Println(config.Get(cfg, "defaults", k)) 42 return nil 43 } 44 } 45 return fmt.Errorf("unknown config variable %q (must be one of %s)", k, strings.Join(VARS, ", ")) 46 }, 47 } 48 } 49 50 func newConfigSetCmd(cfg ini.FileSet) *cobra.Command { 51 return &cobra.Command{ 52 Use: "set KEY=VALUE", 53 Short: "Change configuration setting", 54 SilenceErrors: true, 55 SilenceUsage: true, 56 DisableFlagsInUseLine: true, 57 Args: func(cmd *cobra.Command, args []string) error { 58 if len(args) != 1 { 59 return fmt.Errorf("accepts 1 arg, received %d", len(args)) 60 } 61 if !strings.Contains(args[0], "=") { 62 return fmt.Errorf("argument must be in the form KEY=VALUE") 63 } 64 return nil 65 }, 66 RunE: func(cmd *cobra.Command, args []string) error { 67 ctx := cmd.Context() 68 i := strings.Index(args[0], "=") 69 k, v := args[0][:i], args[0][i+1:] 70 for _, configVar := range VARS { 71 if k == configVar { 72 if len(cfg) == 0 { 73 return fmt.Errorf("%v not set", xdgdir.Config) 74 } 75 cfg.Set("defaults", k, v) 76 if err := config.Save(cfg[0]); err != nil { 77 return err 78 } 79 log.Infof(ctx, "Configuration done") 80 return nil 81 } 82 } 83 return fmt.Errorf("unknown config variable %q (must be one of %s)", k, strings.Join(VARS, ", ")) 84 }, 85 } 86 }