Ignore dist folder for core plugin (#77549)

This commit is contained in:
Andres Martinez Gotor
2023-11-02 14:56:47 +01:00
committed by GitHub
parent c73a2bde9c
commit d5f749482a
3 changed files with 38 additions and 15 deletions

View File

@@ -57,7 +57,11 @@ func (l *Local) Find(ctx context.Context, src plugins.PluginSource) ([]*plugins.
continue
}
paths, err := l.getAbsPluginJSONPaths(path)
followDistFolder := true
if src.PluginClass(ctx) == plugins.ClassCore {
followDistFolder = false
}
paths, err := l.getAbsPluginJSONPaths(path, followDistFolder)
if err != nil {
return nil, err
}
@@ -154,7 +158,7 @@ func (l *Local) readPluginJSON(pluginJSONPath string) (plugins.JSONData, error)
return plugin, nil
}
func (l *Local) getAbsPluginJSONPaths(path string) ([]string, error) {
func (l *Local) getAbsPluginJSONPaths(path string, followDistFolder bool) ([]string, error) {
var pluginJSONPaths []string
var err error
@@ -163,7 +167,7 @@ func (l *Local) getAbsPluginJSONPaths(path string) ([]string, error) {
return []string{}, err
}
if err = walk(path, true, true,
if err = walk(path, true, true, followDistFolder,
func(currentPath string, fi os.FileInfo, err error) error {
if err != nil {
if errors.Is(err, os.ErrNotExist) {

View File

@@ -274,7 +274,7 @@ func TestFinder_Find(t *testing.T) {
func TestFinder_getAbsPluginJSONPaths(t *testing.T) {
t.Run("When scanning a folder that doesn't exists shouldn't return an error", func(t *testing.T) {
origWalk := walk
walk = func(path string, followSymlinks, detectSymlinkInfiniteLoop bool, walkFn util.WalkFunc) error {
walk = func(path string, followSymlinks, detectSymlinkInfiniteLoop, followDistFolder bool, walkFn util.WalkFunc) error {
return walkFn(path, nil, os.ErrNotExist)
}
t.Cleanup(func() {
@@ -282,14 +282,14 @@ func TestFinder_getAbsPluginJSONPaths(t *testing.T) {
})
finder := NewLocalFinder(false)
paths, err := finder.getAbsPluginJSONPaths("test")
paths, err := finder.getAbsPluginJSONPaths("test", true)
require.NoError(t, err)
require.Empty(t, paths)
})
t.Run("When scanning a folder that lacks permission shouldn't return an error", func(t *testing.T) {
origWalk := walk
walk = func(path string, followSymlinks, detectSymlinkInfiniteLoop bool, walkFn util.WalkFunc) error {
walk = func(path string, followSymlinks, detectSymlinkInfiniteLoop, followDistFolder bool, walkFn util.WalkFunc) error {
return walkFn(path, nil, os.ErrPermission)
}
t.Cleanup(func() {
@@ -297,14 +297,14 @@ func TestFinder_getAbsPluginJSONPaths(t *testing.T) {
})
finder := NewLocalFinder(false)
paths, err := finder.getAbsPluginJSONPaths("test")
paths, err := finder.getAbsPluginJSONPaths("test", true)
require.NoError(t, err)
require.Empty(t, paths)
})
t.Run("When scanning a folder that returns a non-handled error should return that error", func(t *testing.T) {
origWalk := walk
walk = func(path string, followSymlinks, detectSymlinkInfiniteLoop bool, walkFn util.WalkFunc) error {
walk = func(path string, followSymlinks, detectSymlinkInfiniteLoop, followDistFolder bool, walkFn util.WalkFunc) error {
return walkFn(path, nil, errors.New("random error"))
}
t.Cleanup(func() {
@@ -312,10 +312,28 @@ func TestFinder_getAbsPluginJSONPaths(t *testing.T) {
})
finder := NewLocalFinder(false)
paths, err := finder.getAbsPluginJSONPaths("test")
paths, err := finder.getAbsPluginJSONPaths("test", true)
require.Error(t, err)
require.Empty(t, paths)
})
t.Run("should forward if the dist folder should be evaluated", func(t *testing.T) {
origWalk := walk
walk = func(path string, followSymlinks, detectSymlinkInfiniteLoop, followDistFolder bool, walkFn util.WalkFunc) error {
if followDistFolder {
return walkFn(path, nil, errors.New("unexpected followDistFolder"))
}
return walkFn(path, nil, filepath.SkipDir)
}
t.Cleanup(func() {
walk = origWalk
})
finder := NewLocalFinder(false)
paths, err := finder.getAbsPluginJSONPaths("test", false)
require.ErrorIs(t, err, filepath.SkipDir)
require.Empty(t, paths)
})
}
var fsComparer = cmp.Comparer(func(fs1 plugins.FS, fs2 plugins.FS) bool {