| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package cli
- import (
- "fmt"
- "github.com/spf13/cobra"
- "github.com/kotoyuuko/cc-switch-cli/internal/config"
- )
- func newEditCmd(app *appState) *cobra.Command {
- var (
- envFlags []string
- removeEnv []string
- setDescription string
- clearDesc bool
- )
- cmd := &cobra.Command{
- Use: "edit <name>",
- Short: "Modify an existing provider's env or description",
- Args: cobra.ExactArgs(1),
- RunE: func(cmd *cobra.Command, args []string) error {
- return runEdit(app, args[0], envFlags, removeEnv, setDescription, clearDesc, cmd.Flags().Changed("description"))
- },
- }
- cmd.Flags().StringArrayVar(&envFlags, "env", nil,
- "KEY=VALUE to add or overwrite (repeatable)")
- cmd.Flags().StringArrayVar(&removeEnv, "remove-env", nil,
- "env key to delete (repeatable)")
- cmd.Flags().StringVar(&setDescription, "description", "",
- "set description; pass empty string to clear")
- cmd.Flags().BoolVar(&clearDesc, "clear-description", false,
- "alias for --description ''")
- return cmd
- }
- func runEdit(app *appState, name string, envFlags, removeEnv []string, newDesc string, clearDesc bool, descChanged bool) error {
- if err := config.ValidateProviderName(name); err != nil {
- return err
- }
- p, ok := app.cfg.Providers[name]
- if !ok {
- return fmt.Errorf("provider %q does not exist", name)
- }
- // Mutate a copy so we don't leave a partial change on validation error.
- env := make(map[string]string, len(p.Env))
- for k, v := range p.Env {
- env[k] = v
- }
- adds, err := parseEnvFlags(envFlags)
- if err != nil {
- return err
- }
- for k, v := range adds {
- env[k] = v
- }
- for _, k := range removeEnv {
- delete(env, k)
- }
- if len(env) == 0 {
- return fmt.Errorf("provider %q would have zero env keys after edit", name)
- }
- updated := config.Provider{Description: p.Description, Env: env}
- if clearDesc {
- updated.Description = ""
- } else if descChanged {
- updated.Description = newDesc
- }
- if err := app.cfg.UpdateProvider(name, updated); err != nil {
- return err
- }
- if err := app.save(); err != nil {
- return err
- }
- fmt.Fprintf(app.stdout, "updated provider %q\n", name)
- return nil
- }
|