From db607ac69647a2fc7a2e36b3d6012fd5cf298e4a Mon Sep 17 00:00:00 2001 From: lew Date: Wed, 11 Feb 2026 23:43:21 +0000 Subject: [PATCH] feat(config): add config init subcommand with --new flag --- cmd/config_cmd.go | 45 +++++++++++++++++++++++++++++++++++++++++ testdata/config-init.ct | 10 +++++++++ 2 files changed, 55 insertions(+) create mode 100644 testdata/config-init.ct diff --git a/cmd/config_cmd.go b/cmd/config_cmd.go index 5ab24d8..21361cc 100644 --- a/cmd/config_cmd.go +++ b/cmd/config_cmd.go @@ -2,8 +2,11 @@ package cmd import ( "fmt" + "os" + "path/filepath" "strings" + "github.com/BurntSushi/toml" "github.com/spf13/cobra" ) @@ -64,8 +67,50 @@ var configPathCmd = &cobra.Command{ }, } +func writeConfigFile(cfg Config) error { + p, err := configPath() + if err != nil { + return fmt.Errorf("cannot determine config path: %w", err) + } + if err := os.MkdirAll(filepath.Dir(p), 0o750); err != nil { + return fmt.Errorf("cannot create config directory: %w", err) + } + f, err := os.Create(p) + if err != nil { + return fmt.Errorf("cannot write config: %w", err) + } + defer f.Close() + enc := toml.NewEncoder(f) + return enc.Encode(cfg) +} + +var configInitCmd = &cobra.Command{ + Use: "init", + Short: "Generate default config file", + Args: cobra.NoArgs, + SilenceUsage: true, + RunE: func(cmd *cobra.Command, args []string) error { + p, err := configPath() + if err != nil { + return fmt.Errorf("cannot determine config path: %w", err) + } + newFlag, _ := cmd.Flags().GetBool("new") + if !newFlag { + if _, err := os.Stat(p); err == nil { + return withHint( + fmt.Errorf("config file already exists"), + "use 'pda config edit' or 'pda config init --new'", + ) + } + } + return writeConfigFile(defaultConfig()) + }, +} + func init() { + configInitCmd.Flags().Bool("new", false, "overwrite existing config file") configCmd.AddCommand(configGetCmd) + configCmd.AddCommand(configInitCmd) configCmd.AddCommand(configListCmd) configCmd.AddCommand(configPathCmd) rootCmd.AddCommand(configCmd) diff --git a/testdata/config-init.ct b/testdata/config-init.ct new file mode 100644 index 0000000..2b36536 --- /dev/null +++ b/testdata/config-init.ct @@ -0,0 +1,10 @@ +# Init creates a config file +$ pda config init + +# Second init fails +$ pda config init --> FAIL +FAIL config file already exists +hint use 'pda config edit' or 'pda config init --new' + +# Init --new overwrites +$ pda config init --new