// Discover will find all the available plugin binaries. Each time this // is called it will override any previously discovered plugins. func (m *PluginManager) Discover() error { result := make([]*Plugin, 0, 20) if !testingMode { // First we add all the builtin plugins which we get by executing ourself for k, _ := range m.PluginMap { result = append(result, &Plugin{ Args: []string{"plugin-builtin", k}, Builtin: true, }) } } for _, dir := range m.PluginDirs { log.Printf("[DEBUG] Looking for plugins in: %s", dir) paths, err := plugin.Discover(PluginGlob, dir) if err != nil { return fmt.Errorf( "Error discovering plugins in %s: %s", dir, err) } for _, path := range paths { result = append(result, &Plugin{ Path: path, }) } } // Reverse the list of plugins. We do this because we want custom // plugins to take priority over built-in plugins, and the PluginDirs // ordering also defines this priority. for left, right := 0, len(result)-1; left < right; left, right = left+1, right-1 { result[left], result[right] = result[right], result[left] } // Log it for _, r := range result { log.Printf("[DEBUG] Detected plugin: %s", r) } // Save our result m.plugins = result return nil }
// Discover will find all the available plugin binaries. Each time this // is called it will override any previously discovered plugins. func (m *PluginManager) Discover() error { result := make([]*Plugin, 0, 20) if !testingMode { // First we add all the builtin plugins which we get by executing ourself for k, _ := range m.PluginMap { result = append(result, &Plugin{ Args: []string{"plugin-builtin", k}, Builtin: true, }) } } for _, dir := range m.PluginDirs { log.Printf("[DEBUG] Looking for plugins in: %s", dir) paths, err := plugin.Discover(PluginGlob, dir) if err != nil { return fmt.Errorf( "Error discovering plugins in %s: %s", dir, err) } for _, path := range paths { result = append(result, &Plugin{ Path: path, }) } } // Log it for _, r := range result { log.Printf("[DEBUG] Detected plugin: %s", r) } // Save our result m.plugins = result return nil }