Allow for flags being passed in after arguments
This commit is contained in:
+25
-8
@@ -1,18 +1,19 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Command struct {
|
||||
Name string
|
||||
ShortName string
|
||||
Usage string
|
||||
Description string
|
||||
Action func(context *Context)
|
||||
Flags []Flag
|
||||
Name string
|
||||
ShortName string
|
||||
Usage string
|
||||
Description string
|
||||
Action func (context *Context)
|
||||
Flags []Flag
|
||||
}
|
||||
|
||||
func (c Command) Run(ctx *Context) {
|
||||
@@ -24,7 +25,23 @@ func (c Command) Run(ctx *Context) {
|
||||
|
||||
set := flagSet(c.Name, c.Flags)
|
||||
set.SetOutput(ioutil.Discard)
|
||||
err := set.Parse(ctx.Args()[1:])
|
||||
|
||||
firstFlagIndex := -1
|
||||
for index, arg := range ctx.Args() {
|
||||
if strings.HasPrefix(arg, "-") {
|
||||
firstFlagIndex = index
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
var err error
|
||||
if firstFlagIndex > -1 {
|
||||
args := ctx.Args()[1:firstFlagIndex]
|
||||
flags := ctx.Args()[firstFlagIndex:]
|
||||
err = set.Parse(append(flags, args...))
|
||||
} else {
|
||||
err = set.Parse(ctx.Args()[1:])
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Incorrect Usage.\n")
|
||||
|
||||
Reference in New Issue
Block a user