Skip to content

Commit d2ec9cd

Browse files
authored
Merge pull request #3595 from ActiveState/mitchell/dx-3166
Update prompt to allow `--force` overrides.
2 parents 2da0aa9 + 40b37ba commit d2ec9cd

43 files changed

Lines changed: 345 additions & 321 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmd/state-installer/installer.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,17 @@ func (i *Installer) Install() (rerr error) {
5353
if err != nil {
5454
return errs.Wrap(err, "Could not determine if running as Windows administrator")
5555
}
56-
if isAdmin && !i.Params.force && !i.Params.isUpdate && !i.Params.nonInteractive {
57-
prompter := prompt.New(true, i.an)
58-
confirm, err := prompter.Confirm("", locale.T("installer_prompt_is_admin"), ptr.To(false))
56+
if isAdmin && !i.Params.isUpdate {
57+
prompter := prompt.New(i.out, i.an)
58+
if i.Params.nonInteractive {
59+
prompter.SetInteractive(false)
60+
}
61+
if i.Params.force {
62+
prompter.SetForce(true)
63+
}
64+
confirm, err := prompter.Confirm("", locale.T("installer_prompt_is_admin"), ptr.To(false), ptr.To(true))
5965
if err != nil {
60-
return errs.Wrap(err, "Unable to confirm")
66+
return errs.Wrap(err, "Not confirmed")
6167
}
6268
if !confirm {
6369
return locale.NewInputError("installer_aborted", "Installation aborted by the user")

cmd/state-remote-installer/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func main() {
116116
an = sync.New(anaConst.SrcStateRemoteInstaller, cfg, nil, out)
117117

118118
// Set up prompter
119-
prompter := prompt.New(true, an)
119+
prompter := prompt.New(out, an)
120120

121121
params := newParams()
122122
cmd := captain.NewCommand(
@@ -174,9 +174,9 @@ func main() {
174174
func execute(out output.Outputer, prompt prompt.Prompter, cfg *config.Instance, an analytics.Dispatcher, args []string, params *Params) error {
175175
msg := locale.Tr("tos_disclaimer", constants.TermsOfServiceURLLatest)
176176
msg += locale.Tr("tos_disclaimer_prompt", constants.TermsOfServiceURLLatest)
177-
cont, err := prompt.Confirm(locale.Tr("install_remote_title"), msg, ptr.To(true))
177+
cont, err := prompt.Confirm(locale.Tr("install_remote_title"), msg, ptr.To(true), nil)
178178
if err != nil {
179-
return errs.Wrap(err, "Could not prompt for confirmation")
179+
return errs.Wrap(err, "Not confirmed")
180180
}
181181

182182
if !cont {

cmd/state/internal/cmdtree/clean.go

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,6 @@ func newCleanUninstallCommand(prime *primer.Values, globals *globalOptions) *cap
3636
Description: locale.Tl("flag_state_clean_uninstall_all", "Also delete all associated config and cache files"),
3737
Value: &params.All,
3838
},
39-
{
40-
Name: "force",
41-
Shorthand: "f",
42-
Description: locale.T("flag_state_clean_uninstall_force_description"),
43-
Value: &params.Force,
44-
},
4539
{
4640
// This option is only used by the Windows uninstall shortcut to ask the user if they wish
4741
// to delete everything or keep cache and config. The user is also asked to press Enter
@@ -59,13 +53,13 @@ func newCleanUninstallCommand(prime *primer.Values, globals *globalOptions) *cap
5953
return err
6054
}
6155

62-
params.NonInteractive = globals.NonInteractive // distinct from --force
56+
params.Force = globals.Force
6357
return runner.Run(&params)
6458
},
6559
)
6660
}
6761

68-
func newCleanCacheCommand(prime *primer.Values, globals *globalOptions) *captain.Command {
62+
func newCleanCacheCommand(prime *primer.Values) *captain.Command {
6963
runner := clean.NewCache(prime)
7064
params := clean.CacheParams{}
7165
return captain.NewCommand(
@@ -83,30 +77,23 @@ func newCleanCacheCommand(prime *primer.Values, globals *globalOptions) *captain
8377
},
8478
},
8579
func(ccmd *captain.Command, _ []string) error {
86-
params.Force = globals.NonInteractive
8780
return runner.Run(&params)
8881
},
8982
)
9083
}
9184

92-
func newCleanConfigCommand(prime *primer.Values) *captain.Command {
85+
func newCleanConfigCommand(prime *primer.Values, globals *globalOptions) *captain.Command {
9386
runner := clean.NewConfig(prime)
9487
params := clean.ConfigParams{}
9588
return captain.NewCommand(
9689
"config",
9790
locale.Tl("clean_config_title", "Cleaning Configuration"),
9891
locale.T("clean_config_description"),
9992
prime,
100-
[]*captain.Flag{
101-
{
102-
Name: "force",
103-
Shorthand: "f",
104-
Description: locale.T("flag_state_clean_config_force_description"),
105-
Value: &params.Force,
106-
},
107-
},
93+
[]*captain.Flag{},
10894
[]*captain.Argument{},
10995
func(ccmd *captain.Command, _ []string) error {
96+
params.Force = globals.Force
11097
return runner.Run(&params)
11198
},
11299
)

cmd/state/internal/cmdtree/cmdtree.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ func New(prime *primer.Values, args ...string) *CmdTree {
7979
cleanCmd := newCleanCommand(prime)
8080
cleanCmd.AddChildren(
8181
newCleanUninstallCommand(prime, globals),
82-
newCleanCacheCommand(prime, globals),
83-
newCleanConfigCommand(prime),
82+
newCleanCacheCommand(prime),
83+
newCleanConfigCommand(prime, globals),
8484
)
8585

8686
deployCmd := newDeployCommand(prime)
@@ -137,8 +137,8 @@ func New(prime *primer.Values, args ...string) *CmdTree {
137137

138138
updateCmd := newUpdateCommand(prime)
139139
updateCmd.AddChildren(
140-
newUpdateLockCommand(prime, globals),
141-
newUpdateUnlockCommand(prime, globals))
140+
newUpdateLockCommand(prime),
141+
newUpdateUnlockCommand(prime))
142142

143143
branchCmd := newBranchCommand(prime)
144144
branchCmd.AddChildren(
@@ -157,7 +157,7 @@ func New(prime *primer.Values, args ...string) *CmdTree {
157157

158158
useCmd := newUseCommand(prime)
159159
useCmd.AddChildren(
160-
newUseResetCommand(prime, globals),
160+
newUseResetCommand(prime),
161161
newUseShowCommand(prime),
162162
)
163163

@@ -204,8 +204,8 @@ func New(prime *primer.Values, args ...string) *CmdTree {
204204
prepareCmd,
205205
newProtocolCommand(prime),
206206
newExecCommand(prime, args...),
207-
newRevertCommand(prime, globals),
208-
newResetCommand(prime, globals),
207+
newRevertCommand(prime),
208+
newResetCommand(prime),
209209
secretsCmd,
210210
branchCmd,
211211
newLearnCommand(prime),
@@ -234,6 +234,7 @@ type globalOptions struct {
234234
Output string
235235
Monochrome bool
236236
NonInteractive bool
237+
Force bool
237238
}
238239

239240
// Group instances are used to group command help output.
@@ -301,8 +302,16 @@ func newStateCommand(globals *globalOptions, prime *primer.Values) *captain.Comm
301302
Description: locale.T("flag_state_non_interactive_description"),
302303
Shorthand: "n",
303304
Persist: true,
305+
OnUse: func() { prime.Prompt().SetInteractive(false) },
304306
Value: &globals.NonInteractive,
305307
},
308+
{
309+
Name: "force",
310+
Description: locale.T("flag_state_force_description"),
311+
Persist: true,
312+
OnUse: func() { prime.Prompt().SetForce(true) },
313+
Value: &globals.Force,
314+
},
306315
{
307316
Name: "version",
308317
Description: locale.T("flag_state_version_description"),
@@ -318,10 +327,6 @@ func newStateCommand(globals *globalOptions, prime *primer.Values) *captain.Comm
318327
},
319328
[]*captain.Argument{},
320329
func(ccmd *captain.Command, args []string) error {
321-
if globals.Verbose {
322-
logging.CurrentHandler().SetVerbose(true)
323-
}
324-
325330
return runner.Run(ccmd.Usage)
326331
},
327332
)

cmd/state/internal/cmdtree/reset.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/ActiveState/cli/internal/runners/reset"
88
)
99

10-
func newResetCommand(prime *primer.Values, globals *globalOptions) *captain.Command {
10+
func newResetCommand(prime *primer.Values) *captain.Command {
1111
runner := reset.New(prime)
1212
params := &reset.Params{}
1313

@@ -25,7 +25,6 @@ func newResetCommand(prime *primer.Values, globals *globalOptions) *captain.Comm
2525
},
2626
},
2727
func(ccmd *captain.Command, args []string) error {
28-
params.Force = globals.NonInteractive
2928
return runner.Run(params)
3029
},
3130
).SetGroup(VCSGroup).SetSupportsStructuredOutput()

cmd/state/internal/cmdtree/revert.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/ActiveState/cli/internal/runners/revert"
88
)
99

10-
func newRevertCommand(prime *primer.Values, globals *globalOptions) *captain.Command {
10+
func newRevertCommand(prime *primer.Values) *captain.Command {
1111
runner := revert.New(prime)
1212
params := &revert.Params{}
1313

@@ -32,7 +32,6 @@ func newRevertCommand(prime *primer.Values, globals *globalOptions) *captain.Com
3232
},
3333
},
3434
func(ccmd *captain.Command, args []string) error {
35-
params.Force = globals.NonInteractive
3635
return runner.Run(params)
3736
},
3837
).SetGroup(VCSGroup).SetSupportsStructuredOutput()

cmd/state/internal/cmdtree/update.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func newUpdateCommand(prime *primer.Values) *captain.Command {
3434
return cmd
3535
}
3636

37-
func newUpdateLockCommand(prime *primer.Values, globals *globalOptions) *captain.Command {
37+
func newUpdateLockCommand(prime *primer.Values) *captain.Command {
3838
runner := update.NewLock(prime)
3939
params := update.LockParams{}
4040

@@ -52,7 +52,6 @@ func newUpdateLockCommand(prime *primer.Values, globals *globalOptions) *captain
5252
},
5353
[]*captain.Argument{},
5454
func(cmd *captain.Command, args []string) error {
55-
params.NonInteractive = globals.NonInteractive
5655
return runner.Run(&params)
5756
},
5857
)
@@ -61,7 +60,7 @@ func newUpdateLockCommand(prime *primer.Values, globals *globalOptions) *captain
6160
return cmd
6261
}
6362

64-
func newUpdateUnlockCommand(prime *primer.Values, globals *globalOptions) *captain.Command {
63+
func newUpdateUnlockCommand(prime *primer.Values) *captain.Command {
6564
runner := update.NewUnlock(prime)
6665
params := update.UnlockParams{}
6766

@@ -73,7 +72,6 @@ func newUpdateUnlockCommand(prime *primer.Values, globals *globalOptions) *capta
7372
[]*captain.Flag{},
7473
[]*captain.Argument{},
7574
func(cmd *captain.Command, args []string) error {
76-
params.NonInteractive = globals.NonInteractive
7775
return runner.Run(&params)
7876
},
7977
)

cmd/state/internal/cmdtree/use.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func newUseCommand(prime *primer.Values) *captain.Command {
3333
return cmd
3434
}
3535

36-
func newUseResetCommand(prime *primer.Values, globals *globalOptions) *captain.Command {
36+
func newUseResetCommand(prime *primer.Values) *captain.Command {
3737
params := &use.ResetParams{}
3838

3939
return captain.NewCommand(
@@ -44,7 +44,6 @@ func newUseResetCommand(prime *primer.Values, globals *globalOptions) *captain.C
4444
[]*captain.Flag{},
4545
[]*captain.Argument{},
4646
func(_ *captain.Command, _ []string) error {
47-
params.Force = globals.NonInteractive
4847
return use.NewReset(prime).Run(params)
4948
},
5049
)

cmd/state/main.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,8 @@ func main() {
110110
// Set up our legacy outputer
111111
setPrinterColors(outFlags)
112112

113-
isInteractive := strings.ToLower(os.Getenv(constants.NonInteractiveEnvVarName)) != "true" && out.Config().Interactive
114113
// Run our main command logic, which is logic that defers to the error handling logic below
115-
err = run(os.Args, isInteractive, cfg, out)
114+
err = run(os.Args, cfg, out)
116115
if err != nil {
117116
exitCode, err = runbits_errors.ParseUserFacing(err)
118117
if err != nil {
@@ -121,7 +120,7 @@ func main() {
121120
}
122121
}
123122

124-
func run(args []string, isInteractive bool, cfg *config.Instance, out output.Outputer) (rerr error) {
123+
func run(args []string, cfg *config.Instance, out output.Outputer) (rerr error) {
125124
defer profile.Measure("main:run", time.Now())
126125

127126
// Set up profiling
@@ -224,7 +223,7 @@ func run(args []string, isInteractive bool, cfg *config.Instance, out output.Out
224223
}()
225224

226225
// Set up prompter
227-
prompter := prompt.New(isInteractive, an)
226+
prompter := prompt.New(out, an)
228227

229228
// Set up conditional, which accesses a lot of primer data
230229
sshell := subshell.New(cfg)

internal/captain/command.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,9 @@ func (c *Command) flagByName(name string, persistOnly bool) *Flag {
521521
return flag
522522
}
523523
}
524+
if c.parent != nil {
525+
return c.parent.flagByName(name, persistOnly)
526+
}
524527
return nil
525528
}
526529

0 commit comments

Comments
 (0)