mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-22 02:47:48 +08:00
Updates: * go-kad-dht: Query performance improvements, DHT client fixes, validates records on *local* put. * go-libp2p-swarm/go-libp2p-transport: Timeout improvements. * go-multiaddr-net: Exposes useful Conn methods (CloseWrite, CloseRead, etc.) * go-log: fixes possible panic when enabling/disabling events. * go-multiaddr: fixes possible panic when stringifying malformed multiaddrs, adds support for consuming /p2p/ multiaddrs. fixes #5113 unblocks #4895 License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>
66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
package loader
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/ipfs/go-ipfs/plugin"
|
|
|
|
logging "gx/ipfs/QmcVVHfdyv15GVPk7NrxdWjh2hLVccXnoD8j2tyQShiXJb/go-log"
|
|
)
|
|
|
|
var log = logging.Logger("plugin/loader")
|
|
|
|
var loadPluginsFunc = func(string) ([]plugin.Plugin, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
// LoadPlugins loads and initializes plugins.
|
|
func LoadPlugins(pluginDir string) ([]plugin.Plugin, error) {
|
|
plMap := make(map[string]plugin.Plugin)
|
|
for _, v := range preloadPlugins {
|
|
plMap[v.Name()] = v
|
|
}
|
|
|
|
newPls, err := loadDynamicPlugins(pluginDir)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, pl := range newPls {
|
|
if ppl, ok := plMap[pl.Name()]; ok {
|
|
// plugin is already preloaded
|
|
return nil, fmt.Errorf(
|
|
"plugin: %s, is duplicated in version: %s, "+
|
|
"while trying to load dynamically: %s",
|
|
ppl.Name(), ppl.Version(), pl.Version())
|
|
}
|
|
plMap[pl.Name()] = pl
|
|
}
|
|
|
|
pls := make([]plugin.Plugin, 0, len(plMap))
|
|
for _, v := range plMap {
|
|
pls = append(pls, v)
|
|
}
|
|
|
|
err = initialize(pls)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = run(pls)
|
|
return nil, err
|
|
}
|
|
|
|
func loadDynamicPlugins(pluginDir string) ([]plugin.Plugin, error) {
|
|
_, err := os.Stat(pluginDir)
|
|
if os.IsNotExist(err) {
|
|
return nil, nil
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return loadPluginsFunc(pluginDir)
|
|
}
|