github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/main.go (about) 1 package cli 2 3 import ( 4 "context" 5 6 "github.com/gobuffalo/plugins" 7 "github.com/gobuffalo/plugins/plugcmd" 8 "github.com/gobuffalo/plugins/plugio" 9 "github.com/gobuffalo/plugins/plugprint" 10 "github.com/spf13/pflag" 11 ) 12 13 // Main is the entry point of the `buffalo` command 14 func (b *Buffalo) Main(ctx context.Context, root string, args []string) error { 15 var help bool 16 flags := pflag.NewFlagSet(b.String(), pflag.ContinueOnError) 17 flags.BoolVarP(&help, "help", "h", false, "print this help") 18 flags.Parse(args) 19 pfn := func() []plugins.Plugin { 20 return b.Plugins 21 } 22 23 plugs := b.Plugins 24 for _, p := range plugs { 25 switch t := p.(type) { 26 case Needer: 27 t.WithPlugins(pfn) 28 case StdinNeeder: 29 if err := t.SetStdin(plugio.Stdin(plugs...)); err != nil { 30 return err 31 } 32 case StdoutNeeder: 33 if err := t.SetStdout(plugio.Stdout(plugs...)); err != nil { 34 return err 35 } 36 case StderrNeeder: 37 if err := t.SetStderr(plugio.Stderr(plugs...)); err != nil { 38 return err 39 } 40 } 41 } 42 43 c := plugcmd.FindFromArgs(args, plugs) 44 if c != nil { 45 return c.Main(ctx, root, args[1:]) 46 } 47 48 return plugprint.Print(plugio.Stdout(plugs...), b) 49 50 }