6
0
mirror of https://github.com/grdl/git-get.git synced 2026-02-08 17:29:18 +00:00

Replace two separate binaries with a single one

This commit is contained in:
Grzegorz Dlugoszewski
2025-08-23 21:49:49 +02:00
parent 71e7f76063
commit e1f73dc99d
3 changed files with 113 additions and 28 deletions

63
cmd/list.go Normal file
View File

@@ -0,0 +1,63 @@
package main
import (
"fmt"
"git-get/pkg"
"git-get/pkg/cfg"
"git-get/pkg/git"
"os"
"strings"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
func newListCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "git list",
Short: "List all repositories cloned by 'git get' and their status.",
RunE: runListCommand,
Args: cobra.NoArgs,
Version: cfg.Version(),
SilenceUsage: true, // We don't want to show usage on legit errors (eg, wrong path, repo already existing etc.)
}
cmd.PersistentFlags().BoolP(cfg.KeyFetch, "f", false, "First fetch from remotes before listing repositories.")
cmd.PersistentFlags().StringP(cfg.KeyOutput, "o", cfg.Defaults[cfg.KeyOutput], fmt.Sprintf("Output format. Allowed values: [%s].", strings.Join(cfg.AllowedOut, ", ")))
cmd.PersistentFlags().StringP(cfg.KeyReposRoot, "r", cfg.Defaults[cfg.KeyReposRoot], "Path to repos root where repositories are cloned.")
cmd.PersistentFlags().BoolP("help", "h", false, "Print this help and exit.")
cmd.PersistentFlags().BoolP("version", "v", false, "Print version and exit.")
viper.BindPFlag(cfg.KeyFetch, cmd.PersistentFlags().Lookup(cfg.KeyFetch))
viper.BindPFlag(cfg.KeyOutput, cmd.PersistentFlags().Lookup(cfg.KeyOutput))
viper.BindPFlag(cfg.KeyReposRoot, cmd.PersistentFlags().Lookup(cfg.KeyReposRoot))
return cmd
}
func runListCommand(cmd *cobra.Command, args []string) error {
cfg.Expand(cfg.KeyReposRoot)
config := &pkg.ListCfg{
Fetch: viper.GetBool(cfg.KeyFetch),
Output: viper.GetString(cfg.KeyOutput),
Root: viper.GetString(cfg.KeyReposRoot),
}
return pkg.List(config)
}
func runList(args []string) {
// Initialize configuration
cfg.Init(&git.ConfigGlobal{})
// Create and execute the list command
cmd := newListCommand()
// Set args for cobra to parse
cmd.SetArgs(args)
if err := cmd.Execute(); err != nil {
os.Exit(1)
}
}