func downloadFile(pluginName, filePath, url string) (err error) { defer func() { if r := recover(); r != nil { retryCount++ if retryCount == 1 { log.Debug("\nFailed downloading. Will retry once.\n") downloadFile(pluginName, filePath, url) } else { panic(r) } } }() resp, err := http.Get(url) if err != nil { return err } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { return err } r, err := zip.NewReader(bytes.NewReader(body), resp.ContentLength) if err != nil { return err } for _, zf := range r.File { newFile := path.Join(filePath, RemoveGitBuildFromName(pluginName, zf.Name)) if zf.FileInfo().IsDir() { os.Mkdir(newFile, 0777) } else { dst, err := os.Create(newFile) if err != nil { if strings.Contains(err.Error(), "permission denied") { return fmt.Errorf( "Could not create file %s. permission deined. Make sure you have write access to plugindir", newFile) } } defer dst.Close() src, err := zf.Open() if err != nil { log.Errorf("%v", err) } defer src.Close() io.Copy(dst, src) } } return nil }
"fmt" "github.com/fatih/color" "github.com/grafana/grafana/pkg/cmd/grafana-cli/log" m "github.com/grafana/grafana/pkg/cmd/grafana-cli/models" s "github.com/grafana/grafana/pkg/cmd/grafana-cli/services" ) var ls_getPlugins func(path string) []m.InstalledPlugin = s.GetLocalPlugins var validateLsCommand = func(pluginDir string) error { if pluginDir == "" { return errors.New("missing path flag") } log.Debug("plugindir: " + pluginDir + "\n") pluginDirInfo, err := s.IoHelper.Stat(pluginDir) if err != nil { return fmt.Errorf("error: %s", err) } if pluginDirInfo.IsDir() == false { return errors.New("plugin path is not a directory") } return nil } func lsCommand(c CommandLine) error { pluginDir := c.GlobalString("pluginsDir")