// GetRepo retrieves a Masterminds/vcs repo object configured for the root // of the package being retrieved. func (d *Dependency) GetRepo(dest string) (vcs.Repo, error) { // The remote location is either the configured repo or the package // name as an https url. var remote string if len(d.Repository) > 0 { remote = d.Repository } else { remote = "https://" + d.Name } // If the VCS type has a value we try that first. if len(d.VcsType) > 0 && d.VcsType != "None" { switch vcs.Type(d.VcsType) { case vcs.Git: return vcs.NewGitRepo(remote, dest) case vcs.Svn: return vcs.NewSvnRepo(remote, dest) case vcs.Hg: return vcs.NewHgRepo(remote, dest) case vcs.Bzr: return vcs.NewBzrRepo(remote, dest) default: return nil, fmt.Errorf("Unknown VCS type %s set for %s", d.VcsType, d.Name) } } // When no type set we try to autodetect. return vcs.NewRepo(remote, dest) }
// ensureRepo ensures that the repo exists and is checked out. func ensureRepo(repo, home string) *vcs.GitRepo { if err := os.Chdir(home); err != nil { log.Die("Could not change to directory %q: %s", home, err) } git, err := vcs.NewGitRepo(repo, home) if err != nil { log.Die("Could not get repository %q: %s", repo, err) } if !git.CheckLocal() { log.Info("Cloning repo into %q. Please wait.", home) if err := git.Get(); err != nil { log.Die("Could not create repository in %q: %s", home, err) } } return git }
func ensureRepo(repo, dir string) (*vcs.GitRepo, error) { if fi, err := os.Stat(dir); err != nil { if err := os.MkdirAll(dir, 0755); err != nil { return nil, err } } else if !fi.IsDir() { return nil, fmt.Errorf("File %s exists, but is not a directory.", dir) } git, err := vcs.NewGitRepo(repo, dir) if err != nil { return nil, err } git.Logger = log.New() if !git.CheckLocal() { if err := git.Get(); err != nil { return git, err } } return git, nil }