From eafff6523acfa25812a6dc0a1452ba0b8b887b09 Mon Sep 17 00:00:00 2001 From: tony Date: Tue, 29 Oct 2024 22:24:38 +0200 Subject: [PATCH] zit command to use app.Config --- cmd/zit/main.go | 18 ++++- internal/app/appconfig.go | 10 +++ internal/config/config_cmd.go | 119 ++++++++++++++++------------------ 3 files changed, 84 insertions(+), 63 deletions(-) create mode 100644 internal/app/appconfig.go diff --git a/cmd/zit/main.go b/cmd/zit/main.go index 2183da3..ac38d99 100644 --- a/cmd/zit/main.go +++ b/cmd/zit/main.go @@ -3,17 +3,33 @@ package main import ( "fmt" "os" + "zit/internal/app" "zit/internal/config" "zit/internal/doctor" "zit/internal/identity" "zit/internal/version" + "github.com/spf13/afero" "github.com/urfave/cli/v2" ) const AppVersion = "v3.1.0-alpha.2" func main() { + + userHomeDir, err := os.UserHomeDir() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + appConfig := app.Config{ + FS: afero.NewOsFs(), + UserHomeDir: userHomeDir, + ConfigPathFromEnv: os.Getenv(config.EnvVarName), + XDGHomePathFromEnv: os.Getenv(config.XdgEnvVarName), + } + app := &cli.App{ Name: "zit", Usage: "git identity manager", @@ -21,7 +37,7 @@ func main() { version.VersionCmd(AppVersion), doctor.DoctorCmd, identity.SetCmd, - config.ConfigCmd, + config.ConfigCmd(appConfig), }, } diff --git a/internal/app/appconfig.go b/internal/app/appconfig.go new file mode 100644 index 0000000..50abfa8 --- /dev/null +++ b/internal/app/appconfig.go @@ -0,0 +1,10 @@ +package app + +import "github.com/spf13/afero" + +type Config struct { + FS afero.Fs + UserHomeDir string + ConfigPathFromEnv string + XDGHomePathFromEnv string +} diff --git a/internal/config/config_cmd.go b/internal/config/config_cmd.go index d655d21..79c1155 100644 --- a/internal/config/config_cmd.go +++ b/internal/config/config_cmd.go @@ -3,74 +3,69 @@ package config import ( "encoding/json" "fmt" - "os" + "zit/internal/app" - "github.com/spf13/afero" "github.com/urfave/cli/v2" ) -var ConfigCmd = &cli.Command{ - Name: "config", - Subcommands: []*cli.Command{ - configPathCmd, - configShowCmd, - }, +func ConfigCmd(appConfig app.Config) *cli.Command { + return &cli.Command{ + Name: "config", + Subcommands: []*cli.Command{ + configPathCmd(appConfig), + configShowCmd(appConfig), + }, + } } -var configPathCmd = &cli.Command{ - Name: "path", - Action: func(_ *cli.Context) error { - fs := afero.NewOsFs() - - userHomeDir, err := os.UserHomeDir() - if err != nil { - return fmt.Errorf("cannot user home dir: %v", err) - } - - configPathFromEnv := os.Getenv(EnvVarName) - xdgHomePathFromEnv := os.Getenv(XdgEnvVarName) - - confPath, err := LocateConfFile(fs, userHomeDir, configPathFromEnv, xdgHomePathFromEnv) - if err != nil { - return fmt.Errorf("could not locate config file: %w", err) - } - - fmt.Println(confPath) - - return nil - }, +func configPathCmd(appConfig app.Config) *cli.Command { + return &cli.Command{ + Name: "path", + Action: func(_ *cli.Context) error { + confPath, err := LocateConfFile( + appConfig.FS, + appConfig.UserHomeDir, + appConfig.ConfigPathFromEnv, + appConfig.XDGHomePathFromEnv, + ) + if err != nil { + return fmt.Errorf("could not locate config file: %w", err) + } + + fmt.Println(confPath) + + return nil + }, + } } -var configShowCmd = &cli.Command{ - Name: "show", - Action: func(_ *cli.Context) error { - fs := afero.NewOsFs() - - userHomeDir, err := os.UserHomeDir() - if err != nil { - return fmt.Errorf("cannot user home dir: %v", err) - } - - configPathFromEnv := os.Getenv(EnvVarName) - xdgHomePathFromEnv := os.Getenv(XdgEnvVarName) - - confPath, err := LocateConfFile(fs, userHomeDir, configPathFromEnv, xdgHomePathFromEnv) - if err != nil { - return fmt.Errorf("could not locate config file: %w", err) - } - - conf, err := Load(confPath) - if err != nil { - return err - } - - confJson, err := json.MarshalIndent(conf, "", " ") - if err != nil { - return err - } - - fmt.Println(string(confJson)) - - return nil - }, +func configShowCmd(appConfig app.Config) *cli.Command { + return &cli.Command{ + Name: "show", + Action: func(_ *cli.Context) error { + confPath, err := LocateConfFile( + appConfig.FS, + appConfig.UserHomeDir, + appConfig.ConfigPathFromEnv, + appConfig.XDGHomePathFromEnv, + ) + if err != nil { + return fmt.Errorf("could not locate config file: %w", err) + } + + conf, err := Load(confPath) + if err != nil { + return err + } + + confJson, err := json.MarshalIndent(conf, "", " ") + if err != nil { + return err + } + + fmt.Println(string(confJson)) + + return nil + }, + } }