From eb79436ab7117b56fd5d7d9439fa637151c04005 Mon Sep 17 00:00:00 2001 From: bergquist Date: Wed, 2 Mar 2016 15:11:24 +0100 Subject: [PATCH] feat(plugins): mounts dist folder if exists in plugin closes #4230 --- pkg/plugins/plugins.go | 4 ++++ pkg/util/filepath.go | 23 +++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go index a8a1c6b5a2f..dcf8a9f0630 100644 --- a/pkg/plugins/plugins.go +++ b/pkg/plugins/plugins.go @@ -90,6 +90,10 @@ func scan(pluginDir string) error { } 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" { diff --git a/pkg/util/filepath.go b/pkg/util/filepath.go index d0e27926956..2811c2bb93f 100644 --- a/pkg/util/filepath.go +++ b/pkg/util/filepath.go @@ -44,8 +44,7 @@ func Walk(path string, followSymlinks bool, detectSymlinkInfiniteLoop bool, walk // //If resolvedPath is "", then we are not following symbolic links. //If symlinkPathsFollowed is not nil, then we need to detect infinite loop. -func walk(path string, info os.FileInfo, resolvedPath string, - symlinkPathsFollowed map[string]bool, walkFn WalkFunc) error { +func walk(path string, info os.FileInfo, resolvedPath string, symlinkPathsFollowed map[string]bool, walkFn WalkFunc) error { if info == nil { return errors.New("Walk: Nil FileInfo passed") } @@ -96,3 +95,23 @@ func walk(path string, info os.FileInfo, resolvedPath string, } return nil } + +func ContainsDistFolder(path string) bool { + info, err := os.Lstat(path) + if err != nil { + return false + } + + if !info.IsDir() { + return false + } + + list, err := ioutil.ReadDir(path) + for _, fileInfo := range list { + if fileInfo.IsDir() && fileInfo.Name() == "dist" { + return true + } + } + + return false +}