github.com/cheikhshift/buffalo@v0.9.5/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  					plugCmd := c.Name
    41  					if c.UseCommand != "" {
    42  						plugCmd = c.UseCommand
    43  					}
    44  
    45  					ax := []string{plugCmd}
    46  					if plugCmd == "-" {
    47  						ax = []string{}
    48  					}
    49  
    50  					ax = append(ax, args...)
    51  					ex := exec.Command(c.Binary, ax...)
    52  					ex.Env = append(os.Environ(), "BUFFALO_PLUGIN=1")
    53  					ex.Stdin = os.Stdin
    54  					ex.Stdout = os.Stdout
    55  					ex.Stderr = os.Stderr
    56  					return ex.Run()
    57  				},
    58  			}
    59  			cc.DisableFlagParsing = true
    60  			cmd.AddCommand(cc)
    61  		}(c)
    62  	}
    63  }