github.com/mayra-cabrera/buffalo@v0.9.4-0.20170814145312-66d2e7772f11/buffalo/cmd/plugins.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"os"
     7  	"os/exec"
     8  	"sync"
     9  
    10  	"github.com/gobuffalo/buffalo/plugins"
    11  	"github.com/spf13/cobra"
    12  )
    13  
    14  var plugx = &sync.Mutex{}
    15  var _plugs plugins.List
    16  
    17  func plugs() plugins.List {
    18  	plugx.Lock()
    19  	defer plugx.Unlock()
    20  	if _plugs == nil {
    21  		var err error
    22  		_plugs, err = plugins.Available()
    23  		if err != nil {
    24  			_plugs = plugins.List{}
    25  			log.Printf("error loading plugins %s\n", err)
    26  		}
    27  	}
    28  	return _plugs
    29  }
    30  
    31  func decorate(name string, cmd *cobra.Command) {
    32  	pugs := plugs()
    33  	for _, c := range pugs[name] {
    34  		func(c plugins.Command) {
    35  			cc := &cobra.Command{
    36  				Use:     c.Name,
    37  				Short:   fmt.Sprintf("[PLUGIN] %s", c.Description),
    38  				Aliases: c.Aliases,
    39  				RunE: func(cmd *cobra.Command, args []string) error {
    40  					ax := []string{c.Name}
    41  					ax = append(ax, args...)
    42  					ex := exec.Command(c.Binary, ax...)
    43  					ex.Stdin = os.Stdin
    44  					ex.Stdout = os.Stdout
    45  					ex.Stderr = os.Stderr
    46  					return ex.Run()
    47  				},
    48  			}
    49  			cc.DisableFlagParsing = true
    50  			cmd.AddCommand(cc)
    51  		}(c)
    52  	}
    53  }