diff --git a/pkg/get.go b/pkg/get.go index 3257462..a3e14c1 100644 --- a/pkg/get.go +++ b/pkg/get.go @@ -3,6 +3,7 @@ package pkg import ( "fmt" "git-get/pkg/git" + "git-get/pkg/io" "path" ) @@ -37,13 +38,13 @@ func cloneSingleRepo(c *GetCfg) error { return err } - cloneOpts := &git.CloneOpts{ + opts := &git.CloneOpts{ URL: url, Path: path.Join(c.Root, URLToPath(url)), Branch: c.Branch, } - _, err = git.Clone(cloneOpts) + _, err = git.Clone(opts) return err } @@ -60,14 +61,19 @@ func cloneDumpFile(c *GetCfg) error { return err } - cloneOpts := &git.CloneOpts{ - URL: url, - Path: path.Join(c.Root, URLToPath(url)), - Branch: line.branch, - IgnoreExisting: true, + opts := &git.CloneOpts{ + URL: url, + Path: path.Join(c.Root, URLToPath(url)), + Branch: line.branch, } - _, err = git.Clone(cloneOpts) + // If target path already exists, skip cloning this repo + if exists, _ := io.Exists(opts.Path); exists { + continue + } + + fmt.Printf("Cloning %s...\n", opts.URL.String()) + _, err = git.Clone(opts) if err != nil { return err } diff --git a/pkg/git/repo.go b/pkg/git/repo.go index b905deb..78e5c87 100644 --- a/pkg/git/repo.go +++ b/pkg/git/repo.go @@ -35,11 +35,10 @@ type repo struct { // CloneOpts specify detail about repository to clone. type CloneOpts struct { - URL *url.URL - Path string // TODO: should Path be a part of clone opts? - Branch string - Quiet bool - IgnoreExisting bool + URL *url.URL + Path string // TODO: should Path be a part of clone opts? + Branch string + Quiet bool } // Open checks if given path can be accessed and returns a Repo instance pointing to it. @@ -56,11 +55,6 @@ func Open(path string) (Repo, error) { // Clone clones repository specified with CloneOpts. func Clone(opts *CloneOpts) (Repo, error) { - // TODO: not sure if this check should be here - if opts.IgnoreExisting { - return nil, nil - } - runGit := run.Git("clone", opts.URL.String(), opts.Path) if opts.Branch != "" { runGit = run.Git("clone", "--branch", opts.Branch, "--single-branch", opts.URL.String(), opts.Path)