github.com/Benchkram/bob@v0.0.0-20220321080157-7c8f3876e225/cli/cmd_clone.go (about) 1 package cli 2 3 import ( 4 "errors" 5 "fmt" 6 "os" 7 8 "github.com/Benchkram/bob/bob" 9 "github.com/Benchkram/bob/pkg/usererror" 10 "github.com/Benchkram/errz" 11 12 "github.com/logrusorgru/aurora" 13 "github.com/spf13/cobra" 14 ) 15 16 var CmdClone = &cobra.Command{ 17 Use: "clone", 18 Short: "Clone a bob workspace and child repositorys", 19 Long: ``, 20 Run: func(cmd *cobra.Command, args []string) { 21 failFast, err := cmd.Flags().GetBool("fail-fast") 22 errz.Fatal(err) 23 24 var url string 25 if len(args) > 0 { 26 url = args[0] 27 } 28 runClone(url, failFast) 29 }, 30 } 31 32 func runClone(url string, failFast bool) { 33 34 if len(url) == 0 { 35 bob, err := bob.Bob(bob.WithRequireBobConfig()) 36 errz.Fatal(err) 37 38 // Try to clone dependencies of current repo 39 err = bob.Clone(failFast) 40 errz.Fatal(err) 41 42 fmt.Printf("%s\n", aurora.Green("Cloned")) 43 } else { 44 bob, err := bob.Bob() 45 errz.Fatal(err) 46 47 // Try to clone a new bob repo to the current working directory 48 repoName, err := bob.CloneRepo(url, failFast) 49 if errors.As(err, &usererror.Err) { 50 fmt.Printf("%s\n", aurora.Red(errors.Unwrap(err).Error())) 51 os.Exit(1) 52 } else { 53 errz.Fatal(err) 54 } 55 56 fmt.Printf("%s\n", aurora.Green(fmt.Sprintf("Cloned to %s", repoName))) 57 } 58 59 }