mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 17:37:46 +08:00
Merge pull request #2289 from tonistiigi/prompt-cancel
commands: handle ctrl-c on active prompt
This commit is contained in:
commit
e705cafcd5
@ -49,8 +49,12 @@ func runPrune(ctx context.Context, dockerCli command.Cli, opts pruneOptions) err
|
|||||||
warning = allCacheWarning
|
warning = allCacheWarning
|
||||||
}
|
}
|
||||||
|
|
||||||
if !opts.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), warning) {
|
if !opts.force {
|
||||||
return nil
|
if ok, err := prompt(ctx, dockerCli.In(), dockerCli.Out(), warning); err != nil {
|
||||||
|
return err
|
||||||
|
} else if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
|
b, err := builder.New(dockerCli, builder.WithName(opts.builder))
|
||||||
|
@ -28,8 +28,12 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func runRm(ctx context.Context, dockerCli command.Cli, in rmOptions) error {
|
func runRm(ctx context.Context, dockerCli command.Cli, in rmOptions) error {
|
||||||
if in.allInactive && !in.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), rmInactiveWarning) {
|
if in.allInactive && !in.force {
|
||||||
return nil
|
if ok, err := prompt(ctx, dockerCli.In(), dockerCli.Out(), rmInactiveWarning); err != nil {
|
||||||
|
return err
|
||||||
|
} else if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
txn, release, err := storeutil.GetStore(dockerCli)
|
txn, release, err := storeutil.GetStore(dockerCli)
|
||||||
|
23
commands/util.go
Normal file
23
commands/util.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package commands
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/docker/cli/cli/command"
|
||||||
|
)
|
||||||
|
|
||||||
|
func prompt(ctx context.Context, ins io.Reader, out io.Writer, msg string) (bool, error) {
|
||||||
|
done := make(chan struct{})
|
||||||
|
var ok bool
|
||||||
|
go func() {
|
||||||
|
ok = command.PromptForConfirmation(ins, out, msg)
|
||||||
|
close(done)
|
||||||
|
}()
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return false, context.Cause(ctx)
|
||||||
|
case <-done:
|
||||||
|
return ok, nil
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user