From 9a4a013ebe7b635bcc0e17ba5a036f2eee5c54c2 Mon Sep 17 00:00:00 2001 From: tony Date: Sat, 8 Jun 2024 13:50:33 +0300 Subject: [PATCH] refactoring --- internal/identity/set_cmd.go | 133 +++++++++++++++++++---------------- 1 file changed, 74 insertions(+), 59 deletions(-) diff --git a/internal/identity/set_cmd.go b/internal/identity/set_cmd.go index 4db27b4..717b045 100644 --- a/internal/identity/set_cmd.go +++ b/internal/identity/set_cmd.go @@ -25,96 +25,111 @@ var SetCmd = &cli.Command{ }, }, Action: func(cCtx *cli.Context) error { - gitClient := git.NewGitClient() - fs := afero.NewOsFs() - if err := gitutil.EnsureGitDir(gitClient); err != nil { - return err - } + dryRun := cCtx.Bool(dryRunFlag) + + gitClient := git.NewGitClient() userHomeDir, err := os.UserHomeDir() if err != nil { - return err + return fmt.Errorf("cannot user home dir: %v", err) } - confPath, err := config.LocateConfFile( - fs, - userHomeDir, - os.Getenv(config.EnvVarName), - ) - if err != nil { - return err - } + configPathFromEnv := os.Getenv(config.EnvVarName) - conf, err := config.Load(confPath) - if err != nil { - return err - } + return setIdentityAction(fs, gitClient, userHomeDir, dryRun, configPathFromEnv) + }, +} - host, err := gitutil.RemoteURL(gitClient, "origin") - if err != nil { - if _, ok := err.(*gitutil.ErrNoRemoteURL); ok { - fmt.Printf(`Error: %s +func setIdentityAction( + fs afero.Fs, + gitClient git.GitClient, + userHomeDir string, + dryRun bool, + configPathFromEnv string, +) error { + if err := gitutil.EnsureGitDir(gitClient); err != nil { + return err + } + + confPath, err := config.LocateConfFile( + fs, + userHomeDir, + configPathFromEnv, + ) + if err != nil { + return err + } + + conf, err := config.Load(confPath) + if err != nil { + return err + } + + host, err := gitutil.RemoteURL(gitClient, "origin") + if err != nil { + if _, ok := err.(*gitutil.ErrNoRemoteURL); ok { + fmt.Printf(`Error: %s Add remote URL so that zit could use it for choosing the correct git identity as defined in the configuration file: - git remote add origin +git remote add origin `, err) - os.Exit(1) - } else { - return err - } - } - - repo, err := gitutil.ExtractRepoInfo(host) - if err != nil { + os.Exit(1) // TODO: return "FriendlyError" instead of os.Exit + } else { return err } + } - hostConf, err := conf.Get(repo.Host) - if err != nil { + repo, err := gitutil.ExtractRepoInfo(host) + if err != nil { + return err + } + + hostConf, err := conf.Get(repo.Host) + if err != nil { + return err + } + + cred := findBestMatch(*hostConf, *repo) + if cred == nil { + return fmt.Errorf("cannot find a match for host %q", repo.Host) + } + + if !dryRun { + if err := gitutil.SetConfig(gitClient, "--local", "user.name", cred.Name); err != nil { return err } - cred := findBestMatch(*hostConf, *repo) - if cred == nil { - return fmt.Errorf("cannot find a match for host %q", repo.Host) + if err := gitutil.SetConfig(gitClient, "--local", "user.email", cred.Email); err != nil { + return err } - dryRun := cCtx.Bool(dryRunFlag) - - if !dryRun { - if err := gitutil.SetConfig(gitClient, "--local", "user.name", cred.Name); err != nil { + if sign := cred.Signing; sign != nil { + if err := gitutil.SetConfig(gitClient, "--local", "commit.gpgsign", "true"); err != nil { return err } - if err := gitutil.SetConfig(gitClient, "--local", "user.email", cred.Email); err != nil { + if err := gitutil.SetConfig(gitClient, "--local", "user.signingKey", sign.Key); err != nil { return err } - if sign := cred.Signing; sign != nil { - if err := gitutil.SetConfig(gitClient, "--local", "commit.gpgsign", "true"); err != nil { - return err - } - - if err := gitutil.SetConfig(gitClient, "--local", "user.signingKey", sign.Key); err != nil { - return err - } - - if err := gitutil.SetConfig(gitClient, "--local", "gpg.format", sign.Format); err != nil { - return err - } + if err := gitutil.SetConfig(gitClient, "--local", "gpg.format", sign.Format); err != nil { + return err } } + } - if dryRun { - fmt.Printf("[dry-run] ") - } + if dryRun { + fmt.Printf("[dry-run]\n") + } - fmt.Printf("set user: %s <%s>\n", cred.Name, cred.Email) + fmt.Printf("set user: %s <%s>\n", cred.Name, cred.Email) + if sign := cred.Signing; sign != nil { + fmt.Printf("set signing key: %s key at %s\n", sign.Format, sign.Key) + } - return nil - }, + return nil }