From 5e583cd79b3268b53a485ff8a8a320e128962bd1 Mon Sep 17 00:00:00 2001 From: ciscoski Date: Fri, 20 Sep 2024 21:39:51 +0100 Subject: [PATCH] fix: Adds support for symlink for plugins When developling plugin can be usefull to have symbolic link of the developed plugin in the v-fox plugin folder. This commit makes it possible --- internal/manager.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/internal/manager.go b/internal/manager.go index 269ce4bf..bfdecd3e 100644 --- a/internal/manager.go +++ b/internal/manager.go @@ -21,6 +21,7 @@ import ( "errors" "fmt" "io" + "io/fs" "net" "net/http" "net/url" @@ -159,6 +160,24 @@ func (m *Manager) LoadAllSdk() ([]*Sdk, error) { for _, d := range dir { sdkName := d.Name() path := filepath.Join(m.PathMeta.PluginPath, sdkName) + + // Resolve symbolic link, useful for plugin development + dirInfo, err := d.Info() + if err != nil { + return nil, fmt.Errorf("failed to get directory info: %w", err) + } + if dirInfo.Mode()&os.ModeSymlink != 0 { + resolvedPath, err := filepath.EvalSymlinks(path) + if err != nil { + return nil, fmt.Errorf("failed to resolve symboling link : %w", err) + } + dirFileInfo, err := os.Lstat(resolvedPath) + if err != nil { + return nil, fmt.Errorf("failed to get stat for resolved symbolic link : %w", err) + } + d = fs.FileInfoToDirEntry(dirFileInfo) + } + if d.IsDir() { } else if strings.HasSuffix(sdkName, ".lua") { logger.Debugf("Found old plugin: %s \n", path)