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 *