diff options
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | doRepos.go | 162 | ||||
| -rw-r--r-- | main.go | 3 |
3 files changed, 162 insertions, 6 deletions
@@ -5,8 +5,7 @@ VERSION = $(shell git describe --tags) BUILDTIME = $(shell date +%s) all: build - FORGE_VERBOSE=true ./forged patches list - # FORGE_VERBOSE=true ./forged list + ./forged repos build: goimports GO111MODULE=off go build \ @@ -1,6 +1,11 @@ package main import ( + "os" + "path/filepath" + + "go.wit.com/lib/protobuf/forgepb" + "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) @@ -9,11 +14,162 @@ func doRepos() error { return doReposList() } - 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.Infof("Repos.Len()=%d\n", me.forge.Repos.Len()) - // me.forge.Repos.PrintTable() + 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 } @@ -21,7 +21,7 @@ var resources embed.FS var HOSTNAME string = "forge.wit.com" var LIBDIR string = "/var/lib/forged/" // need to deprecate this -// var FORGEDIR string = "/home/forge" // deprecated? +var FORGEDIR string = "/home/forge" // deprecated? func main() { me = new(mainType) @@ -29,6 +29,7 @@ func main() { me.auto = prep.Bash(&argv) // this line should be: prep.Bash(&argv) me.forge = forgepb.InitByAppname(ARGNAME) + me.forge.Config.DumpENV() if err := me.forge.InitPatchsets(); err != nil { log.Info("patches failed to open", err) |
