|
@@ -10,7 +10,7 @@ import (
|
|
)
|
|
)
|
|
|
|
|
|
// PluginInstall installs a plugin
|
|
// PluginInstall installs a plugin
|
|
-func (cli *Client) PluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) error {
|
|
|
|
|
|
+func (cli *Client) PluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) (err error) {
|
|
// FIXME(vdemeester) name is a ref, we might want to parse/validate it here.
|
|
// FIXME(vdemeester) name is a ref, we might want to parse/validate it here.
|
|
query := url.Values{}
|
|
query := url.Values{}
|
|
query.Set("name", name)
|
|
query.Set("name", name)
|
|
@@ -27,6 +27,14 @@ func (cli *Client) PluginInstall(ctx context.Context, name string, options types
|
|
ensureReaderClosed(resp)
|
|
ensureReaderClosed(resp)
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ defer func() {
|
|
|
|
+ if err != nil {
|
|
|
|
+ delResp, _ := cli.delete(ctx, "/plugins/"+name, nil, nil)
|
|
|
|
+ ensureReaderClosed(delResp)
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+
|
|
var privileges types.PluginPrivileges
|
|
var privileges types.PluginPrivileges
|
|
if err := json.NewDecoder(resp.body).Decode(&privileges); err != nil {
|
|
if err := json.NewDecoder(resp.body).Decode(&privileges); err != nil {
|
|
ensureReaderClosed(resp)
|
|
ensureReaderClosed(resp)
|
|
@@ -40,8 +48,6 @@ func (cli *Client) PluginInstall(ctx context.Context, name string, options types
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
if !accept {
|
|
if !accept {
|
|
- resp, _ := cli.delete(ctx, "/plugins/"+name, nil, nil)
|
|
|
|
- ensureReaderClosed(resp)
|
|
|
|
return pluginPermissionDenied{name}
|
|
return pluginPermissionDenied{name}
|
|
}
|
|
}
|
|
}
|
|
}
|