From 00dd0e8a9d8a267aaf4470cbf5b23596289cb591 Mon Sep 17 00:00:00 2001 From: bergquist Date: Thu, 3 Mar 2016 11:02:18 +0100 Subject: [PATCH] fix(plugins): fixes missed dist loading for plugindir closes #4230 --- pkg/plugins/plugins.go | 6 ------ pkg/util/filepath.go | 41 ++++++++++++++++++++++++++++------------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go index dcf8a9f0630..db674e5522a 100644 --- a/pkg/plugins/plugins.go +++ b/pkg/plugins/plugins.go @@ -89,12 +89,6 @@ func scan(pluginDir string) error { pluginPath: pluginDir, } - log.Info("Plugins: Scaning dir %s", pluginDir) - if util.ContainsDistFolder(pluginDir) { - log.Info("Plugins: Found dist folder in %s", pluginDir) - pluginDir = filepath.Join(pluginDir, "dist") - } - if err := util.Walk(pluginDir, true, true, scanner.walker); err != nil { if pluginDir != "data/plugins" { log.Warn("Could not scan dir \"%v\" error: %s", pluginDir, err) diff --git a/pkg/util/filepath.go b/pkg/util/filepath.go index c70f9260197..3ad8cac3147 100644 --- a/pkg/util/filepath.go +++ b/pkg/util/filepath.go @@ -80,35 +80,50 @@ func walk(path string, info os.FileInfo, resolvedPath string, symlinkPathsFollow if err != nil { return walkFn(resolvedPath, info, err) } + var subFiles = make([]subFile, 0) for _, fileInfo := range list { path2 := filepath.Join(path, fileInfo.Name()) var resolvedPath2 string if resolvedPath != "" { resolvedPath2 = filepath.Join(resolvedPath, fileInfo.Name()) } - err = walk(path2, fileInfo, resolvedPath2, symlinkPathsFollowed, walkFn) + subFiles = append(subFiles, subFile{path: path2, resolvedPath: resolvedPath2, fileInfo: fileInfo}) + } + + if containsDistFolder(subFiles) { + err := walk( + filepath.Join(path, "dist"), + info, + filepath.Join(resolvedPath, "dist"), + symlinkPathsFollowed, + walkFn) + if err != nil { return err } + } else { + for _, p := range subFiles { + err = walk(p.path, p.fileInfo, p.resolvedPath, symlinkPathsFollowed, walkFn) + + if err != nil { + return err + } + } } + return nil } return nil } -func ContainsDistFolder(path string) bool { - info, err := os.Lstat(path) - if err != nil { - return false - } +type subFile struct { + path, resolvedPath string + fileInfo os.FileInfo +} - if !info.IsDir() { - return false - } - - list, err := ioutil.ReadDir(path) - for _, fileInfo := range list { - if fileInfo.IsDir() && fileInfo.Name() == "dist" { +func containsDistFolder(subFiles []subFile) bool { + for _, p := range subFiles { + if p.fileInfo.IsDir() && p.fileInfo.Name() == "dist" { return true } }