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  }