202 lines
4.9 KiB
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
|
|
}
|