@cryptotaxi247 / kubo / commits / 09d517746

feat: improve plugin preload logic

* Allow '*' meaning "load all plugins". * Expose a Preload function that users can call.

Steven Allen committed Aug 15, 2019 at 11:21 UTC 09d517746d785ea3189dfbbba57c1aa5c6581e03
4 files changed +22 -15
plugin/loader/loader.go
+7
@@ -15,6 +15,13 @@ import (
15 opentracing "github.com/opentracing/opentracing-go"
16 )
17
18 +var preloadPlugins []plugin.Plugin
19 +
20 +// Preload adds one or more plugins to the preload list. This should _only_ be called during init.
21 +func Preload(plugins ...plugin.Plugin) {
22 + preloadPlugins = append(preloadPlugins, plugins...)
23 +}
24 +
25 var log = logging.Logger("plugin/loader")
26
27 var loadPluginsFunc = func(string) ([]plugin.Plugin, error) {
plugin/loader/preload.go
+5 -6
@@ -1,7 +1,6 @@
1 package loader
2
3 import (
4 - "github.com/ipfs/go-ipfs/plugin"
4 pluginbadgerds "github.com/ipfs/go-ipfs/plugin/plugins/badgerds"
5 pluginflatfs "github.com/ipfs/go-ipfs/plugin/plugins/flatfs"
6 pluginipldgit "github.com/ipfs/go-ipfs/plugin/plugins/git"
@@ -12,9 +11,9 @@ import (
11 // This file is being generated as part of plugin build process
12 // To change it, modify the plugin/loader/preload.sh
13
15 -var preloadPlugins = []plugin.Plugin{
16 - pluginipldgit.Plugins[0],
17 - pluginbadgerds.Plugins[0],
18 - pluginflatfs.Plugins[0],
19 - pluginlevelds.Plugins[0],
14 +func init() {
15 + Preload(pluginipldgit.Plugins...)
16 + Preload(pluginbadgerds.Plugins...)
17 + Preload(pluginflatfs.Plugins...)
18 + Preload(pluginlevelds.Plugins...)
19 }
plugin/loader/preload.sh
+5 -4
@@ -10,7 +10,6 @@ cat <<EOL
10 package loader
11
12 import (
13 - "github.com/ipfs/go-ipfs/plugin"
13 EOL
14
15 to_preload | while read -r name path num; do
@@ -25,12 +24,14 @@ cat <<EOL
24 // This file is being generated as part of plugin build process
25 // To change it, modify the plugin/loader/preload.sh
26
28 -var preloadPlugins = []plugin.Plugin{
27 +func init() {
28 EOL
29
30 to_preload | while read -r name path num; do
32 - echo "plugin$name.Plugins[$num],"
31 + case "$num" in
32 + '*') echo " Preload(plugin$name.Plugins...)" ;; # All plugins
33 + *) echo " Preload(plugin$name.Plugins[$num])" ;; # A specific plugin
34 + esac
35 done
36
35 -
37 echo "}"
plugin/loader/preload_list
+5 -5
@@ -1,10 +1,10 @@
1 # this file contains plugins to be preloaded
2 # empty lines or starting with '#' are ignored
3 #
4 -# name go-path number of the sub-plugin
4 +# name go-path number of the sub-plugin or *
5
6 -ipldgit github.com/ipfs/go-ipfs/plugin/plugins/git 0
6 +ipldgit github.com/ipfs/go-ipfs/plugin/plugins/git *
7
8 -badgerds github.com/ipfs/go-ipfs/plugin/plugins/badgerds 0
9 -flatfs github.com/ipfs/go-ipfs/plugin/plugins/flatfs 0
10 -levelds github.com/ipfs/go-ipfs/plugin/plugins/levelds 0
8 +badgerds github.com/ipfs/go-ipfs/plugin/plugins/badgerds *
9 +flatfs github.com/ipfs/go-ipfs/plugin/plugins/flatfs *
10 +levelds github.com/ipfs/go-ipfs/plugin/plugins/levelds *