From d01dc53022f27ef4550138eba1915ad472b11b0a Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 27 Sep 2025 01:49:17 -0500 Subject: restructure code --- doRepos.go | 178 ++++---------------------------------------------------- forgeDir.go | 94 ------------------------------ old.go | 120 ++++++++++++++++++++++++++++++++++++++ scanReposDir.go | 116 ++++++++++++++++++++++++++++++++++++ 4 files changed, 248 insertions(+), 260 deletions(-) delete mode 100644 forgeDir.go create mode 100644 old.go create mode 100644 scanReposDir.go diff --git a/doRepos.go b/doRepos.go index 74c7031..0c79704 100644 --- a/doRepos.go +++ b/doRepos.go @@ -2,8 +2,6 @@ package main import ( "os" - "path/filepath" - "strings" "time" "go.wit.com/lib/gui/shell" @@ -87,131 +85,6 @@ func doRepos() error { return nil } -/* -func doReposInit() { - log.Info("do pull here") - dirs, err := scanForgedDir(me.forge.Config.ReposDir) - if err != nil { - badExit(err) - } - os.Chdir(me.forge.Config.ReposDir) - - 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 -} - -// must be "/foo/bar/" + "git.clone/" and then have a .git/ dir -func addGitRepoDir(dir string) (bool, error) { - fullpath := filepath.Join(dir, "git.clone") - if check := me.forge.Repos.FindByFullPath(fullpath); check != nil { - // log.Info(oldr.Namespace, fullpath, "already added") - return false, nil - } - - var namespace string - if oldr, err := readGitPB(dir); err == nil { - namespace = oldr.Namespace - } else { - log.Info("readGitPB() failed", dir, err) - namespace = strings.TrimPrefix(dir, "/home/repos") - } - namespace = strings.Trim(namespace, "/") - - // check to see if 'git clone' has already been run - _, err := os.Stat(fullpath) - if os.IsNotExist(err) { - log.Info("repo needs cloning:", namespace, dir) - return false, err - } - if repo, err := me.forge.AddNamespaceDir(namespace, fullpath); err == nil { - log.Info("repo added", repo.FullPath) - return true, nil - } else { - log.Info("repo add failed", repo.FullPath, err) - return false, err - } - return false, err -} - -/* -func initForged() error { - var changed bool - log.Info("do pull here") - dirs, err := scanForgedDir(me.forge.Config.ReposDir) - 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 { - fullpath := filepath.Join(dir, "git.clone") - ok, err := addGitRepoDir(fullpath); - if ok { - changed = true - } - if err != nil { - log.Info("repo add problem", fullpath, err) - } - } - if changed { - me.forge.SaveRepos() - } - return nil -} -*/ - func verifyForged() { var changed bool = false for repo := range me.forge.Repos.IterAll() { @@ -234,46 +107,19 @@ func verifyForged() { } } -/* -func doReposList() error { - log.Info("do pull here") - dirs, err := scanForgedDir(me.forge.Config.ReposDir) - if err != nil { - badExit(err) - return err +func tryGitClone(repo *gitpb.Repo, dir string) error { + if err := forgepb.RunGitClone("git.clone", dir, "https://"+repo.Namespace); err == nil { + return nil } - - 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 + 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 } - return nil + log.Info("git clone failed", err) + return err } -*/ diff --git a/forgeDir.go b/forgeDir.go deleted file mode 100644 index 5dc9ea8..0000000 --- a/forgeDir.go +++ /dev/null @@ -1,94 +0,0 @@ -package main - -import ( - "fmt" - "os" - "path/filepath" - - "go.wit.com/lib/protobuf/gitpb" - "go.wit.com/log" -) - -func readGitPB(fullpath string) (*gitpb.Repo, error) { - // fmt.Fprintln(w, "repo:", repo.FullPath, repo.Namespace) - gitfile := filepath.Join(fullpath, "git.pb") - bytes, err := os.ReadFile(gitfile) - if err != nil { - log.Info("todo: git.pb non-existant:", gitfile) - return nil, err - } - newr := new(gitpb.Repo) - if err := newr.Unmarshal(bytes); err != nil { - log.Info("unmarshal failed: NEED TO DELETE:", gitfile) - return nil, fmt.Errorf("todo: re-generate git.pb for " + fullpath) - } - return newr, nil -} - -// doesn't enter the directory any further when it finds a .git/ -// not stupid like my old version -func scanForgedDir(srcDir string) ([]string, error) { - var all []string - var trip bool - err := filepath.WalkDir(srcDir, func(path string, d os.DirEntry, err error) error { - if err != nil { - // Handle possible errors, like permission issues - log.Infof("error accessing path %q: %v\n", path, err) - return err - } - - if d.IsDir() { - // log.Info("WHAT IS THIS?", path) - } else { - _, fname := filepath.Split(path) - switch fname { - case "repos.pb": - case "git.pb": - case "go.work.last": - case "go.work.sum": - default: - // todo: figure out a way to do padding for init() - if trip == false { - log.Info("WARNING:") - } - log.Info("WARNING: you have an untracked file outside of any .git repository:", path) - trip = true - } - return nil - } - - gitfile := filepath.Join(path, "git.pb") - _, err2 := os.Stat(gitfile) - if !os.IsNotExist(err2) { - // log.Info("IS THIS THE ONE?", path) - if ok, err := addGitRepoDir(path); ok { - log.Info("added", path) - } else { - if err != nil { - log.Info("add failed", path, err) - } - } - return filepath.SkipDir - } - // log.Info("BAD ?", path) - // all = append(all, path) - - /* - if ok, err := addGitRepoDir(path); ok { - log.Info("added", path) - } else { - log.Info("err", path, err) - } - */ - // todo: check if dir is empty here and delete dir? - return nil - }) - - // probably always leave this here forever - // this check, along with CheckDirty() makes sure you can safely delete ~/go/src or the go.work directory - // because everything is either checked in or deleted. An important thing to know! - if trip { - log.Info("WARNING: junk in", srcDir) - } - return all, err -} diff --git a/old.go b/old.go new file mode 100644 index 0000000..ed16e42 --- /dev/null +++ b/old.go @@ -0,0 +1,120 @@ +package main + +/* +func doReposInit() { + log.Info("do pull here") + dirs, err := scanForgedDir(me.forge.Config.ReposDir) + if err != nil { + badExit(err) + } + os.Chdir(me.forge.Config.ReposDir) + + 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 initForged() error { + var changed bool + log.Info("do pull here") + dirs, err := scanForgedDir(me.forge.Config.ReposDir) + 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 { + fullpath := filepath.Join(dir, "git.clone") + ok, err := addGitRepoDir(fullpath); + if ok { + changed = true + } + if err != nil { + log.Info("repo add problem", fullpath, err) + } + } + if changed { + me.forge.SaveRepos() + } + return nil +} +*/ + +/* +func doReposList() error { + log.Info("do pull here") + dirs, err := scanForgedDir(me.forge.Config.ReposDir) + 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 +} +*/ diff --git a/scanReposDir.go b/scanReposDir.go new file mode 100644 index 0000000..9c62e55 --- /dev/null +++ b/scanReposDir.go @@ -0,0 +1,116 @@ +package main + +import ( + "fmt" + "os" + "path/filepath" + "strings" + + "go.wit.com/lib/protobuf/gitpb" + "go.wit.com/log" +) + +func readGitPB(fullpath string) (*gitpb.Repo, error) { + // fmt.Fprintln(w, "repo:", repo.FullPath, repo.Namespace) + gitfile := filepath.Join(fullpath, "git.pb") + bytes, err := os.ReadFile(gitfile) + if err != nil { + log.Info("todo: git.pb non-existant:", gitfile) + return nil, err + } + newr := new(gitpb.Repo) + if err := newr.Unmarshal(bytes); err != nil { + log.Info("unmarshal failed: NEED TO DELETE:", gitfile) + return nil, fmt.Errorf("todo: re-generate git.pb for " + fullpath) + } + return newr, nil +} + +// doesn't enter the directory any further when it finds a .git/ +// not stupid like my old version +func scanForgedDir(srcDir string) ([]string, error) { + var all []string + var trip bool + err := filepath.WalkDir(srcDir, func(path string, d os.DirEntry, err error) error { + if err != nil { + // Handle possible errors, like permission issues + log.Infof("error accessing path %q: %v\n", path, err) + return err + } + + if d.IsDir() { + // log.Info("WHAT IS THIS?", path) + } else { + _, fname := filepath.Split(path) + switch fname { + case "repos.pb": + case "git.pb": + case "go.work.last": + case "go.work.sum": + default: + // todo: figure out a way to do padding for init() + if trip == false { + log.Info("WARNING:") + } + log.Info("WARNING: you have an untracked file outside of any .git repository:", path) + trip = true + } + return nil + } + + gitfile := filepath.Join(path, "git.pb") + _, err2 := os.Stat(gitfile) + if !os.IsNotExist(err2) { + // log.Info("IS THIS THE ONE?", path) + if ok, err := addGitRepoDir(path); ok { + log.Info("added", path) + } else { + if err != nil { + log.Info("add failed", path, err) + } + } + return filepath.SkipDir + } + + // todo: check if dir is empty here and delete dir? + return nil + }) + + if trip { + log.Info("WARNING: junk in", srcDir) + } + return all, err +} + +// must be "/foo/bar/" + "git.clone/" and then have a .git/ dir +func addGitRepoDir(dir string) (bool, error) { + fullpath := filepath.Join(dir, "git.clone") + if check := me.forge.Repos.FindByFullPath(fullpath); check != nil { + // log.Info(oldr.Namespace, fullpath, "already added") + return false, nil + } + + var namespace string + if oldr, err := readGitPB(dir); err == nil { + namespace = oldr.Namespace + } else { + log.Info("readGitPB() failed", dir, err) + namespace = strings.TrimPrefix(dir, "/home/repos") + } + namespace = strings.Trim(namespace, "/") + + // check to see if 'git clone' has already been run + _, err := os.Stat(fullpath) + if os.IsNotExist(err) { + log.Info("repo needs cloning:", namespace, dir) + return false, err + } + if repo, err := me.forge.AddNamespaceDir(namespace, fullpath); err == nil { + log.Info("repo added", repo.FullPath) + return true, nil + } else { + log.Info("repo add failed", repo.FullPath, err) + return false, err + } + return false, err +} -- cgit v1.2.3