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  }