wip: version cmd/flag use common functions

This commit is contained in:
2024-01-11 11:47:50 +11:00
parent fe465ad031
commit 6a68209629
4 changed files with 133 additions and 100 deletions

38
cmd/cli/splitargs.go Normal file
View 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
View 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()
}
}