mirror of https://github.com/docker/compose.git
Fix cancellable context detection in `AdaptCmd`
`AdaptCmd` was previously checking for a `.WithCancel` suffix on context strings, however it's possible for a context to be cancellable without ending in that suffix, such as when `context.WithValue` was called after `WithContext`, e.g.: ```go context.Background.WithCancel.WithValue(type trace.traceContextKeyType, val <not Stringer>).WithValue(type api.DryRunKey, val <not Stringer>) ``` Signed-off-by: Laura Brehm <laurabrehm@hey.com>
This commit is contained in:
parent
17da54da20
commit
ce5a0c656f
|
@ -42,6 +42,7 @@ import (
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
|
"github.com/docker/cli/cli-plugins/plugin"
|
||||||
"github.com/docker/compose/v2/cmd/formatter"
|
"github.com/docker/compose/v2/cmd/formatter"
|
||||||
"github.com/docker/compose/v2/pkg/api"
|
"github.com/docker/compose/v2/pkg/api"
|
||||||
"github.com/docker/compose/v2/pkg/compose"
|
"github.com/docker/compose/v2/pkg/compose"
|
||||||
|
@ -75,7 +76,7 @@ func AdaptCmd(fn CobraCommand) func(cmd *cobra.Command, args []string) error {
|
||||||
return func(cmd *cobra.Command, args []string) error {
|
return func(cmd *cobra.Command, args []string) error {
|
||||||
ctx := cmd.Context()
|
ctx := cmd.Context()
|
||||||
contextString := fmt.Sprintf("%s", ctx)
|
contextString := fmt.Sprintf("%s", ctx)
|
||||||
if !strings.HasSuffix(contextString, ".WithCancel") { // need to handle cancel
|
if !strings.Contains(contextString, ".WithCancel") || plugin.RunningStandalone() { // need to handle cancel
|
||||||
cancellableCtx, cancel := context.WithCancel(cmd.Context())
|
cancellableCtx, cancel := context.WithCancel(cmd.Context())
|
||||||
ctx = cancellableCtx
|
ctx = cancellableCtx
|
||||||
s := make(chan os.Signal, 1)
|
s := make(chan os.Signal, 1)
|
||||||
|
@ -277,7 +278,12 @@ const PluginName = "compose"
|
||||||
|
|
||||||
// RunningAsStandalone detects when running as a standalone program
|
// RunningAsStandalone detects when running as a standalone program
|
||||||
func RunningAsStandalone() bool {
|
func RunningAsStandalone() bool {
|
||||||
return len(os.Args) < 2 || os.Args[1] != manager.MetadataSubcommandName && os.Args[1] != PluginName
|
println("check running as standalone")
|
||||||
|
standalone := len(os.Args) < 2 || os.Args[1] != manager.MetadataSubcommandName && os.Args[1] != PluginName
|
||||||
|
fmt.Fprintf(os.Stderr, "%v+\n", os.Args)
|
||||||
|
println("len os.args", len(os.Args))
|
||||||
|
println("STANDALONE:", standalone)
|
||||||
|
return standalone
|
||||||
}
|
}
|
||||||
|
|
||||||
// RootCommand returns the compose command with its child commands
|
// RootCommand returns the compose command with its child commands
|
||||||
|
|
Loading…
Reference in New Issue