github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/built/app.go (about) 1 package built 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 8 "github.com/gobuffalo/buffalo-cli/v2/internal/garlic" 9 "github.com/gobuffalo/plugins" 10 "github.com/gobuffalo/plugins/plugio" 11 ) 12 13 type App struct { 14 Plugger plugins.Scoper 15 BuildTime string 16 BuildVersion string 17 Fallthrough func(ctx context.Context, root string, args []string) error 18 OriginalMain func() 19 } 20 21 func (b *App) ScopedPlugins() []plugins.Plugin { 22 var plugs []plugins.Plugin 23 if b.Plugger == nil { 24 return plugs 25 } 26 return b.Plugger.ScopedPlugins() 27 } 28 29 func (b *App) Main(ctx context.Context, root string, args []string) error { 30 plugs := b.ScopedPlugins() 31 32 for _, p := range plugs { 33 bl, ok := p.(Initer) 34 if !ok { 35 continue 36 } 37 if err := bl.BuiltInit(ctx, root, args); err != nil { 38 return err 39 } 40 } 41 42 var originalArgs []string 43 for i, arg := range args { 44 if arg == "--" { 45 originalArgs = append([]string{args[0]}, args[i+1:]...) 46 args = args[:i] 47 break 48 } 49 } 50 if len(args) == 0 { 51 if b.OriginalMain == nil { 52 if b.Fallthrough != nil { 53 return b.Fallthrough(ctx, root, args) 54 } 55 return nil 56 } 57 if len(originalArgs) != 0 { 58 os.Args = originalArgs 59 } 60 b.OriginalMain() 61 return nil 62 } 63 64 c := args[0] 65 switch c { 66 case "version": 67 fmt.Fprintln(plugio.Stdout(plugs...), b.BuildVersion) 68 return nil 69 } 70 if b.Fallthrough != nil { 71 return b.Fallthrough(ctx, root, args) 72 } 73 return garlic.Run(ctx, root, args) 74 }