package main import ( "os" "path/filepath" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) func doRepos() error { if argv.Repos.List != nil { return doReposList() } log.Infof("Repos len=%d\n", me.forge.Repos.Len()) me.forge.PrintHumanTableFull(me.forge.Repos) return nil } func doReposInit() { log.Info("do pull here") dirs, err := scanForgedDir(FORGEDIR) if err != nil { badExit(err) } os.Chdir(FORGEDIR) for _, dir := range dirs { // log.Info("found repo", i, dir) // repo, err := me.forge.AddNamespaceDir(ns string, fullpath string) repo, err := readGitPB(dir) if err != nil { log.Info(dir, err) continue } // check to see if 'git clone' has already been run _, err = os.Stat(filepath.Join(dir, "git.clone")) if os.IsNotExist(err) { log.Info("repo needs cloning:", repo.Namespace, repo.URL, dir) if err := tryGitClone(repo, dir); err == nil { continue } // check for GO lang specific 'git clone' redirects if pkgurl, err := forgepb.RunGoList(repo.Namespace); err == nil { log.Info("NEED TO TRY", pkgurl) // if repo, err := f.urlClone(gopath, pkgurl); repo != nil { // return repo, err // } if err := forgepb.RunGitClone("git.clone", dir, pkgurl); err == nil { } else { badExit(err) } } else { badExit(err) } } else { // log.Info("repo is already cloned", dir, repo.Namespace) } } okExit("") } func tryGitClone(repo *gitpb.Repo, dir string) error { if err := forgepb.RunGitClone("git.clone", dir, "https://"+repo.Namespace); err == nil { return nil } giturl, err := forgepb.FindGoImport("https://" + repo.Namespace) if err == nil { log.Info("TRY THIS INSTEAD!!!!", giturl) if err := forgepb.RunGitClone("git.clone", dir, giturl); err != nil { log.Info("git clone still failed", giturl, err) return err } return nil } log.Info("git clone failed", err) return err } func initForged() error { log.Info("do pull here") dirs, err := scanForgedDir(FORGEDIR) if err != nil { return err } log.Printf("forged has %d repos\n", me.forge.Repos.Len()) // me.forge.PrintHumanTable(me.forge.Repos) for _, dir := range dirs { oldr, err := readGitPB(dir) if err != nil { log.Info("readGitPB() failed", dir, err) continue } fullpath := filepath.Join(dir, "git.clone") if check := me.forge.Repos.FindByFullPath(fullpath); check != nil { // log.Info(oldr.Namespace, fullpath, "already added") continue } // check to see if 'git clone' has already been run _, err = os.Stat(fullpath) if os.IsNotExist(err) { log.Info("repo needs cloning:", oldr.Namespace, oldr.FullPath, dir) } else { log.Info("repo is already cloned", dir, oldr.Namespace) } } return nil } /* func verifyForged() { var changed bool = false for repo := range me.forge.Repos.IterAll() { if strings.HasPrefix(repo.GetFullPath(), os.Getenv("FORGE_GOSRC")) { // log.Info(os.Getenv("FORGE_GOSRC"), repo.GetFullPath()) } else { log.Info("not here", os.Getenv("FORGE_GOSRC"), repo.GetFullPath()) me.forge.Repos.Delete(repo) changed = true } } if changed { f.Repos.ConfigSave() } } */ func doReposList() error { log.Info("do pull here") dirs, err := scanForgedDir(FORGEDIR) if err != nil { badExit(err) return err } count := 0 for _, dir := range dirs { // log.Info("found repo", i, dir) // repo, err := forge.AddNamespaceDir(ns string, fullpath string) oldr, err := readGitPB(dir) if err != nil { log.Info(dir, err) continue } fullpath := filepath.Join(dir, "git.clone") if check := me.forge.Repos.FindByFullPath(fullpath); check != nil { log.Info(oldr.Namespace, fullpath, "already added") continue } // check to see if 'git clone' has already been run _, err = os.Stat(fullpath) if os.IsNotExist(err) { // log.Info("repo needs cloning:", oldr.Namespace, repo.URL, dir) } else { log.Info("repo is already cloned", dir, oldr.Namespace) // me.forge.Repos.Append(newr) // break if count > 50 { // break } count += 1 } } return nil }