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 }