wip: version cmd/flag use common functions
This commit is contained in:
38
cmd/cli/splitargs.go
Normal file
38
cmd/cli/splitargs.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
)
|
||||
|
||||
func SplitArgs() ([]string, []string, error) {
|
||||
var (
|
||||
i int
|
||||
arg string
|
||||
selfArgs []string
|
||||
childArgs []string
|
||||
)
|
||||
found := false
|
||||
for i, arg = range os.Args {
|
||||
if arg == "--" {
|
||||
found = true
|
||||
if i+1 == len(os.Args) {
|
||||
return nil, nil, errors.New("invalid argument")
|
||||
}
|
||||
|
||||
if len(os.Args[i+1:]) == 0 {
|
||||
return nil, nil, errors.New("invalid argument")
|
||||
}
|
||||
|
||||
selfArgs = os.Args[1:i]
|
||||
childArgs = os.Args[i+1:]
|
||||
break
|
||||
}
|
||||
|
||||
if !found {
|
||||
return nil, nil, errors.New("invalid argument")
|
||||
}
|
||||
}
|
||||
return selfArgs, childArgs, nil
|
||||
|
||||
}
|
||||
38
cmd/cli/version.go
Normal file
38
cmd/cli/version.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
"os"
|
||||
)
|
||||
|
||||
type Version string
|
||||
|
||||
const versionFlag = "version"
|
||||
|
||||
func (v Version) Print() {
|
||||
fmt.Print(v)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
func (v Version) Cmd(cmd *cobra.Command) {
|
||||
cmd.AddCommand(&cobra.Command{
|
||||
Use: "version",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
v.Print()
|
||||
return nil
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func (v Version) Flag(cmd *cobra.Command) {
|
||||
cmd.PersistentFlags().Bool(versionFlag, false, "print version")
|
||||
_ = viper.BindPFlag(versionFlag, cmd.PersistentFlags().Lookup(versionFlag))
|
||||
}
|
||||
|
||||
func (v Version) FlagHook() {
|
||||
if viper.GetBool(versionFlag) {
|
||||
v.Print()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user