From 8bd6805e91b88a8dbfe8ca00f593f76d1b40cbf0 Mon Sep 17 00:00:00 2001 From: visualfc Date: Thu, 23 Jun 2022 22:33:04 +0800 Subject: [PATCH] #1300, gop build pass flags --- cmd/internal/base/base.go | 14 ++++++++++++++ cmd/internal/build/build.go | 15 ++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cmd/internal/base/base.go b/cmd/internal/base/base.go index 5d52962533..fa5e5bebcb 100644 --- a/cmd/internal/base/base.go +++ b/cmd/internal/base/base.go @@ -112,3 +112,17 @@ func Main(c *Command, app string, args []string) { } c.Run(c, args) } + +// SkipSwitches skips all switches and returns non-switch arguments. +func SkipSwitches(args []string, f *flag.FlagSet) []string { + out := make([]string, 0, len(args)) + for _, arg := range args { + if strings.HasPrefix(arg, "-") { + if f.Lookup(arg[1:]) == nil { // flag not found + continue + } + } + out = append(out, arg) + } + return out +} diff --git a/cmd/internal/build/build.go b/cmd/internal/build/build.go index 068dc28cc8..ecb9b9f152 100644 --- a/cmd/internal/build/build.go +++ b/cmd/internal/build/build.go @@ -51,7 +51,7 @@ func init() { } func runCmd(_ *base.Command, args []string) { - err := flag.Parse(args) + err := flag.Parse(base.SkipSwitches(args, flag)) if err != nil { log.Panicln("parse input arguments failed:", err) } @@ -62,17 +62,17 @@ func runCmd(_ *base.Command, args []string) { cl.SetDisableRecover(true) } - args = flag.Args() - if len(args) == 0 { - args = []string{"."} + sargs := flag.Args() + if len(sargs) == 0 { + sargs = []string{"."} } + proj, sargs, err := gopprojs.ParseOne(sargs...) - proj, args, err := gopprojs.ParseOne(args...) if err != nil { log.Panicln(err) } - if len(args) != 0 { - log.Panicln("too many arguments:", args) + if len(sargs) != 0 { + log.Panicln("too many arguments:", sargs) } gopEnv := gopenv.Get() @@ -85,6 +85,7 @@ func runCmd(_ *base.Command, args []string) { } confCmd.Flags = []string{"-o", output} } + confCmd.Flags = append(confCmd.Flags, args...) build(proj, conf, confCmd) }