@@ -61,20 +61,16 @@ func IsNotFound(err error) bool {
61
61
// 3. Platform-specific defaultSystemPluginDirs.
62
62
//
63
63
// [ConfigFile.CLIPluginsExtraDirs]: https://pkg.go.dev/github.com/docker/[email protected] +incompatible/cli/config/configfile#ConfigFile.CLIPluginsExtraDirs
64
- func getPluginDirs (cfg * configfile.ConfigFile ) ( []string , error ) {
64
+ func getPluginDirs (cfg * configfile.ConfigFile ) []string {
65
65
var pluginDirs []string
66
66
67
67
if cfg != nil {
68
68
pluginDirs = append (pluginDirs , cfg .CLIPluginsExtraDirs ... )
69
69
}
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" )
75
71
pluginDirs = append (pluginDirs , pluginDir )
76
72
pluginDirs = append (pluginDirs , defaultSystemPluginDirs ... )
77
- return pluginDirs , nil
73
+ return pluginDirs
78
74
}
79
75
80
76
func addPluginCandidatesFromDir (res map [string ][]string , d string ) {
@@ -116,10 +112,7 @@ func listPluginCandidates(dirs []string) map[string][]string {
116
112
117
113
// GetPlugin returns a plugin on the system by its name
118
114
func 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 ())
123
116
return getPlugin (name , pluginDirs , rootcmd )
124
117
}
125
118
@@ -145,16 +138,20 @@ func getPlugin(name string, pluginDirs []string, rootcmd *cobra.Command) (*Plugi
145
138
146
139
// ListPlugins produces a list of the plugins available on the system
147
140
func 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 ())
153
142
candidates := listPluginCandidates (pluginDirs )
143
+ if len (candidates ) == 0 {
144
+ return nil , nil
145
+ }
154
146
155
147
var plugins []Plugin
156
148
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 )
158
155
cmds := rootcmd .Commands ()
159
156
for _ , paths := range candidates {
160
157
func (paths []string ) {
@@ -202,10 +199,7 @@ func PluginRunCommand(dockerCli config.Provider, name string, rootcmd *cobra.Com
202
199
return nil , errPluginNotFound (name )
203
200
}
204
201
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 ())
209
203
210
204
for _ , d := range pluginDirs {
211
205
path := filepath .Join (d , exename )
0 commit comments