package main import ( "fmt" "git-get/pkg/cfg" "git-get/pkg/path" "git-get/pkg/repo" "os" pathpkg "path" "github.com/spf13/cobra" "github.com/spf13/viper" ) var cmd = &cobra.Command{ Use: "git-get ", Short: "git get", Run: Run, Args: cobra.MaximumNArgs(1), // TODO: add custom validator Version: cfg.Version(), } func init() { cmd.PersistentFlags().StringP(cfg.KeyReposRoot, "r", "", "repos root") cmd.PersistentFlags().StringP(cfg.KeyPrivateKey, "p", "", "SSH private key path") cmd.PersistentFlags().StringP(cfg.KeyDump, "d", "", "Dump file path") cmd.PersistentFlags().StringP(cfg.KeyBranch, "b", cfg.DefBranch, "Branch (or tag) to checkout after cloning") viper.BindPFlag(cfg.KeyReposRoot, cmd.PersistentFlags().Lookup(cfg.KeyReposRoot)) viper.BindPFlag(cfg.KeyPrivateKey, cmd.PersistentFlags().Lookup(cfg.KeyReposRoot)) viper.BindPFlag(cfg.KeyDump, cmd.PersistentFlags().Lookup(cfg.KeyDump)) viper.BindPFlag(cfg.KeyBranch, cmd.PersistentFlags().Lookup(cfg.KeyBranch)) } func Run(cmd *cobra.Command, args []string) { cfg.InitConfig() root := viper.GetString(cfg.KeyReposRoot) if bundle := viper.GetString(cfg.KeyDump); bundle != "" { opts, err := path.ParseBundleFile(bundle) exitIfError(err) for _, opt := range opts { path := pathpkg.Join(root, path.URLToPath(opt.URL)) opt.Path = path _, _ = repo.Clone(opt) } os.Exit(0) } url, err := path.ParseURL(args[0]) exitIfError(err) branch := viper.GetString(cfg.KeyBranch) path := pathpkg.Join(root, path.URLToPath(url)) cloneOpts := &repo.CloneOpts{ URL: url, Path: path, Branch: branch, } _, err = repo.Clone(cloneOpts) exitIfError(err) } func main() { if err := cmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) } } func exitIfError(err error) { if err != nil { fmt.Println(err) os.Exit(1) } }