github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/cmds/setup/main.go (about)

     1  package setup
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/gobuffalo/plugins"
     7  	"github.com/gobuffalo/plugins/plugio"
     8  	"github.com/gobuffalo/plugins/plugprint"
     9  )
    10  
    11  func (cmd *Cmd) Main(ctx context.Context, root string, args []string) error {
    12  	plugs := cmd.ScopedPlugins()
    13  	if p := FindSetuperFromArgs(args, plugs); p != nil {
    14  		return p.Setup(ctx, root, args[1:])
    15  	}
    16  
    17  	flags := cmd.Flags()
    18  	if err := flags.Parse(args); err != nil {
    19  		return plugins.Wrap(cmd, err)
    20  	}
    21  
    22  	args = flags.Args()
    23  
    24  	if cmd.help {
    25  		return plugprint.Print(plugio.Stdout(plugs...), cmd)
    26  	}
    27  
    28  	err := cmd.run(ctx, root, args)
    29  	return cmd.afterSetup(ctx, root, args, err)
    30  }
    31  
    32  func (cmd *Cmd) run(ctx context.Context, root string, args []string) error {
    33  	if err := cmd.beforeSetup(ctx, root, args); err != nil {
    34  		return plugins.Wrap(cmd, err)
    35  	}
    36  
    37  	for _, p := range cmd.ScopedPlugins() {
    38  		if s, ok := p.(Setuper); ok {
    39  			if err := s.Setup(ctx, root, args); err != nil {
    40  				return plugins.Wrap(s, err)
    41  			}
    42  		}
    43  	}
    44  
    45  	return nil
    46  }
    47  
    48  func (cmd *Cmd) beforeSetup(ctx context.Context, root string, args []string) error {
    49  	plugs := cmd.ScopedPlugins()
    50  
    51  	for _, p := range plugs {
    52  		if bb, ok := p.(BeforeSetuper); ok {
    53  			if err := bb.BeforeSetup(ctx, root, args); err != nil {
    54  				return plugins.Wrap(bb, err)
    55  			}
    56  		}
    57  	}
    58  
    59  	return nil
    60  }
    61  
    62  func (cmd *Cmd) afterSetup(ctx context.Context, root string, args []string, err error) error {
    63  	plugs := cmd.ScopedPlugins()
    64  
    65  	for _, p := range plugs {
    66  		if bb, ok := p.(AfterSetuper); ok {
    67  			if err := bb.AfterSetup(ctx, root, args, err); err != nil {
    68  				return plugins.Wrap(bb, err)
    69  			}
    70  		}
    71  	}
    72  	return err
    73  }