diff --git a/cmd/root.go b/cmd/root.go index edc1f9616a967bfb84746ffca9590d351b18ae74..8d666d720d7688c0c7c0c8caf8dc24cc91e8d53b 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -61,28 +61,7 @@ var rootCmd = &cobra.Command{ // so runCommand does not re-prompt even when preset is "". presetResolved = true - // If the session collected command-specific overrides - // (e.g. restore flow), pass them as raw args so runCommand - // merges them and skips its own prompts. - var rawArgs []string - for k, vals := range overrides { - if k == overrideArgumentsKey { - // Positional args go after "--". - continue - } - for _, v := range vals { - rawArgs = append(rawArgs, "--"+k, v) - } - if vals == nil { - rawArgs = append(rawArgs, "--"+k) - } - } - if args := overrides[overrideArgumentsKey]; len(args) > 0 { - rawArgs = append(rawArgs, "--") - rawArgs = append(rawArgs, args...) - } - - return runCommand(commandName, cmd, rawArgs) + return runCommand(commandName, cmd, nil, overrides) }, } @@ -93,7 +72,7 @@ func registerRootFlags() { flags.StringVarP(&flagConfigFile, "config", "C", "", "path to keld config file") } -func runCommand(commandName string, cmd *cobra.Command, rawArgs []string) error { +func runCommand(commandName string, cmd *cobra.Command, rawArgs []string, sessionOverrides map[string][]string) error { if flagConfigFile != "" { if err := os.Setenv("KELD_CONFIG_FILE", flagConfigFile); err != nil { return fmt.Errorf("setting KELD_CONFIG_FILE: %w", err) @@ -114,7 +93,7 @@ func runCommand(commandName string, cmd *cobra.Command, rawArgs []string) error } } - overrides := parsePassthrough(rawArgs) + overrides := mergeOverrides(parsePassthrough(rawArgs), sessionOverrides) // In interactive mode, fill missing preset/command inputs via prompts. // When the unified session has already resolved the preset (presetResolved), diff --git a/cmd/root_test.go b/cmd/root_test.go index 36e14133a76b79766108492485319c9b1cb3890d..30d5957c6c588d8eab27466d36833d3b674d7e12 100644 --- a/cmd/root_test.go +++ b/cmd/root_test.go @@ -108,7 +108,7 @@ func TestRunCommandAppliesRootFlagsAndPassthrough(t *testing.T) { backup := lookupSubcommand(t, "backup") out, err := captureStdout(t, func() error { - return runCommand("backup", backup, []string{"--tag", "daily", "/src"}) + return runCommand("backup", backup, []string{"--tag", "daily", "/src"}, nil) }) if err != nil { t.Fatalf("runCommand returned error: %v", err) @@ -133,7 +133,7 @@ func TestRunCommandRejectsUnknownPreset(t *testing.T) { setRootFlagValuesForTest(t, "missing", true, configFile) backup := lookupSubcommand(t, "backup") - err := runCommand("backup", backup, nil) + err := runCommand("backup", backup, nil, nil) if err == nil { t.Fatal("expected unknown preset error") } diff --git a/cmd/subcommands.go b/cmd/subcommands.go index d189e85ce7da49261784d0d89c36b27424a5b5d9..a5257a815230db99d6426d572e6525618d88f3ab 100644 --- a/cmd/subcommands.go +++ b/cmd/subcommands.go @@ -44,7 +44,7 @@ func registerSubcommands() { if wantsCommandHelp(args) { return cmd.Help() } - return runCommand(commandName, cmd, args) + return runCommand(commandName, cmd, args, nil) }, }