@@ -61,20 +61,16 @@ func IsNotFound(err error) bool {
6161// 3. Platform-specific defaultSystemPluginDirs.
6262//
6363// [ConfigFile.CLIPluginsExtraDirs]: https://pkg.go.dev/github.com/docker/cli@v26.1.4+incompatible/cli/config/configfile#ConfigFile.CLIPluginsExtraDirs
64- func getPluginDirs (cfg * configfile.ConfigFile ) ( []string , error ) {
64+ func getPluginDirs (cfg * configfile.ConfigFile ) []string {
6565 var pluginDirs []string
6666
6767 if cfg != nil {
6868 pluginDirs = append (pluginDirs , cfg .CLIPluginsExtraDirs ... )
6969 }
70- pluginDir , err := config .Path ("cli-plugins" )
71- if err != nil {
72- return nil , err
73- }
74-
70+ pluginDir := filepath .Join (config .Dir (), "cli-plugins" )
7571 pluginDirs = append (pluginDirs , pluginDir )
7672 pluginDirs = append (pluginDirs , defaultSystemPluginDirs ... )
77- return pluginDirs , nil
73+ return pluginDirs
7874}
7975
8076func addPluginCandidatesFromDir (res map [string ][]string , d string ) {
@@ -116,10 +112,7 @@ func listPluginCandidates(dirs []string) map[string][]string {
116112
117113// GetPlugin returns a plugin on the system by its name
118114func GetPlugin (name string , dockerCLI config.Provider , rootcmd * cobra.Command ) (* Plugin , error ) {
119- pluginDirs , err := getPluginDirs (dockerCLI .ConfigFile ())
120- if err != nil {
121- return nil , err
122- }
115+ pluginDirs := getPluginDirs (dockerCLI .ConfigFile ())
123116 return getPlugin (name , pluginDirs , rootcmd )
124117}
125118
@@ -145,16 +138,20 @@ func getPlugin(name string, pluginDirs []string, rootcmd *cobra.Command) (*Plugi
145138
146139// ListPlugins produces a list of the plugins available on the system
147140func ListPlugins (dockerCli config.Provider , rootcmd * cobra.Command ) ([]Plugin , error ) {
148- pluginDirs , err := getPluginDirs (dockerCli .ConfigFile ())
149- if err != nil {
150- return nil , err
151- }
152-
141+ pluginDirs := getPluginDirs (dockerCli .ConfigFile ())
153142 candidates := listPluginCandidates (pluginDirs )
143+ if len (candidates ) == 0 {
144+ return nil , nil
145+ }
154146
155147 var plugins []Plugin
156148 var mu sync.Mutex
157- eg , _ := errgroup .WithContext (context .TODO ())
149+ ctx := rootcmd .Context ()
150+ if ctx == nil {
151+ // Fallback, mostly for tests that pass a bare cobra.command
152+ ctx = context .Background ()
153+ }
154+ eg , _ := errgroup .WithContext (ctx )
158155 cmds := rootcmd .Commands ()
159156 for _ , paths := range candidates {
160157 func (paths []string ) {
@@ -202,10 +199,7 @@ func PluginRunCommand(dockerCli config.Provider, name string, rootcmd *cobra.Com
202199 return nil , errPluginNotFound (name )
203200 }
204201 exename := addExeSuffix (metadata .NamePrefix + name )
205- pluginDirs , err := getPluginDirs (dockerCli .ConfigFile ())
206- if err != nil {
207- return nil , err
208- }
202+ pluginDirs := getPluginDirs (dockerCli .ConfigFile ())
209203
210204 for _ , d := range pluginDirs {
211205 path := filepath .Join (d , exename )
0 commit comments