GoSungrow/cmd/cobra.go
2022-02-25 18:14:08 +11:00

113 lines
2.4 KiB
Go

package cmd
import (
"GoSungrow/Only"
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"os"
"path/filepath"
"strings"
)
var rootCmd *cobra.Command
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() error {
for range Only.Once {
Cmd.ConfigDir, Cmd.Error = os.UserHomeDir()
if Cmd.Error != nil {
break
}
Cmd.ConfigDir = filepath.Join(Cmd.ConfigDir, "."+DefaultBinaryName)
_, Cmd.Error = os.Stat(Cmd.ConfigDir)
if os.IsExist(Cmd.Error) {
break
}
Cmd.Error = os.MkdirAll(Cmd.ConfigDir, 0700)
if Cmd.Error != nil {
break
}
Cmd.CacheDir, Cmd.Error = os.UserHomeDir()
if Cmd.Error != nil {
break
}
Cmd.CacheDir = filepath.Join(Cmd.CacheDir, "."+DefaultBinaryName, "cache")
_, Cmd.Error = os.Stat(Cmd.CacheDir)
if os.IsExist(Cmd.Error) {
break
}
Cmd.Error = os.MkdirAll(Cmd.CacheDir, 0700)
if Cmd.Error != nil {
break
}
Cmd.ConfigFile = filepath.Join(Cmd.ConfigDir, defaultConfigFile)
Cmd.ApiTokenFile = filepath.Join(Cmd.ConfigDir, defaultTokenFile)
rootViper = viper.New()
rootCmd = AttachRootCmd(nil)
_ = AttachCmdConfig(rootCmd)
_ = AttachCmdApi(rootCmd)
_ = AttachCmdData(rootCmd)
_ = AttachCmdMqtt(rootCmd)
_ = AttachCmdGit(rootCmd)
_ = AttachCmdGoogle(rootCmd)
_ = AttachCmdCron(rootCmd)
_ = AttachCmdVersion(rootCmd)
_ = AttachCmdHelpFlags(rootCmd)
// cobra.OnInitialize(initConfig) // Bound to rootCmd now.
cobra.EnableCommandSorting = false
err := rootCmd.Execute()
if err != nil {
break
}
if Cmd.Error != nil {
break
}
}
return Cmd.Error
}
//goland:noinspection GoUnusedFunction
func showArgs(cmd *cobra.Command, args []string) {
for range Only.Once {
flargs := cmd.Flags().Args()
if flargs != nil {
fmt.Printf("'%s' called with '%s'\n", cmd.CommandPath(), strings.Join(flargs, " "))
break
}
fmt.Printf("'%s' called with '%s'\n", cmd.CommandPath(), strings.Join(args, " "))
break
}
fmt.Println("")
}
func fillArray(count int, args []string) []string {
var ret []string
for range Only.Once {
//
// if len(args) == 0 {
// break
// }
ret = make([]string, count)
for i, e := range args {
ret[i] = e
}
}
return ret
}
func AddJsonSuffix(fn string) string {
return strings.TrimSuffix(fn, ".json") + ".json"
}