github.com/ianfoo/lab@v0.9.5-0.20180123060006-5ed79f2ccfc7/cmd/clone.go (about)

     1  package cmd
     2  
     3  import (
     4  	"log"
     5  	"strings"
     6  
     7  	"github.com/spf13/cobra"
     8  	"github.com/zaquestion/lab/internal/git"
     9  	"github.com/zaquestion/lab/internal/gitlab"
    10  )
    11  
    12  // cloneCmd represents the clone command
    13  // NOTE: There is special handling for "clone" in cmd/root.go
    14  var cloneCmd = &cobra.Command{
    15  	Use:   "clone",
    16  	Short: "",
    17  	Long: `Clone supports these shorthands
    18  - repo
    19  - namespace/repo`,
    20  	Run: func(cmd *cobra.Command, args []string) {
    21  		project, err := gitlab.FindProject(args[0])
    22  		if err == gitlab.ErrProjectNotFound {
    23  			err = git.New(append([]string{"clone"}, args...)...).Run()
    24  			if err != nil {
    25  				log.Fatal(err)
    26  			}
    27  			return
    28  		} else if err != nil {
    29  			log.Fatal(err)
    30  		}
    31  		path := project.SSHURLToRepo
    32  		err = git.New(append([]string{"clone", path}, args[1:]...)...).Run()
    33  		if err != nil {
    34  			log.Fatal(err)
    35  		}
    36  
    37  		// Clone project was a fork belonging to the user so user is
    38  		// treating forks as origin. Add upstream as remoted pointing
    39  		// to forked from repo
    40  		if project.ForkedFromProject != nil &&
    41  			strings.Contains(project.PathWithNamespace, gitlab.User()) {
    42  			var dir string
    43  			if len(args) > 1 {
    44  				dir = args[1]
    45  			} else {
    46  				dir = project.Name
    47  			}
    48  			ffProject, err := gitlab.FindProject(project.ForkedFromProject.PathWithNamespace)
    49  			if err != nil {
    50  				log.Fatal(err)
    51  			}
    52  			err = git.RemoteAdd("upstream", ffProject.SSHURLToRepo, "./"+dir)
    53  			if err != nil {
    54  				log.Fatal(err)
    55  			}
    56  		}
    57  	},
    58  }
    59  
    60  func init() {
    61  	RootCmd.AddCommand(cloneCmd)
    62  }