forged/doPull.go

202 lines
4.9 KiB
Go

package main
import (
"os"
"path/filepath"
"strings"
"go.wit.com/lib/protobuf/forgepb"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
func doPull() {
log.Info("do pull here")
dirs, err := scanForgedDir(FORGEDIR)
if err != nil {
badExit(err)
}
os.Chdir(FORGEDIR)
forge := forgepb.InitPB()
log.Info("forge len", forge.Repos.Len())
forge.PrintHumanTable(forge.Repos)
for _, dir := range dirs {
// log.Info("found repo", i, dir)
// repo, err := 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() *forgepb.Forge {
log.Info("do pull here")
dirs, err := scanForgedDir(FORGEDIR)
if err != nil {
badExit(err)
return nil
}
os.Chdir(FORGEDIR)
forge := forgepb.InitPB()
log.Printf("forged has %d repos\n", forge.Repos.Len())
// forge.PrintHumanTable(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 := 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 forge
}
func verifyForged(f *forgepb.Forge) {
var changed bool = false
for repo := range f.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())
f.Repos.Delete(repo)
changed = true
}
}
if changed {
f.Repos.ConfigSave()
}
}
func doInit() *forgepb.Forge {
forge := initForged()
verifyForged(forge)
forge.PrintForgedTable(forge.Repos)
return forge
}
func doList() any {
log.Info("do pull here")
dirs, err := scanForgedDir(FORGEDIR)
if err != nil {
badExit(err)
return err
}
os.Chdir(FORGEDIR)
forge := forgepb.InitPB()
log.Info("forge len", forge.Repos.Len())
forge.PrintHumanTable(forge.Repos)
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 := 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)
newr, err := forge.Repos.NewGoRepo(fullpath, oldr.Namespace)
if err != nil {
log.Info("repo add failed", err)
}
log.Info("REPO namespace:", newr.Namespace)
log.Info("REPO fullpath:", newr.FullPath)
log.Info("REPO URL:", newr.URL)
os.Chdir(newr.FullPath)
newr.Reload()
log.Info("NEWR namespace:", newr.Namespace)
log.Info("NEWR fullpath:", newr.FullPath)
log.Info("NEWR Master Branch:", newr.GetMasterBranchName())
log.Info("NEWR URL:", newr.URL)
log.Info("repo scan worked", newr.Namespace, newr.GetMasterBranchName(), newr.URL)
// forge.Repos.Append(newr)
// break
if count > 50 {
// break
}
count += 1
}
}
forge.PrintHumanTable(forge.Repos)
forge.Repos.ConfigSave()
okExit("")
return nil
}