summaryrefslogtreecommitdiff
path: root/forgeDir.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-07-09 03:18:29 -0500
committerJeff Carr <[email protected]>2025-07-09 23:24:06 -0500
commit8a788bef6d201b50dd066a62167a23378e4162a7 (patch)
treeab18e3b8af5eab617b48bdceae38759ca4320aee /forgeDir.go
parent3588440aed55e81864c1afd2d96d6b037242befd (diff)
make git clone work in forged
Diffstat (limited to 'forgeDir.go')
-rw-r--r--forgeDir.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/forgeDir.go b/forgeDir.go
new file mode 100644
index 0000000..c11554b
--- /dev/null
+++ b/forgeDir.go
@@ -0,0 +1,76 @@
+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)
+ bytes, err := os.ReadFile(filepath.Join(fullpath, "git.pb"))
+ if err != nil {
+ log.Info("todo: git.pb non-existant:", fullpath)
+ return nil, err
+ }
+ newr := new(gitpb.Repo)
+ if err := newr.Unmarshal(bytes); err != nil {
+ log.Info("todo: unmarshal failed for git.pb:", fullpath)
+ return nil, fmt.Errorf("todo: 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
+ fmt.Fprintf(os.Stderr, "error accessing path %q: %v\n", path, err)
+ return err
+ }
+
+ if d.IsDir() {
+ // log.Info("path is dir", 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
+ }
+
+ gitdir := filepath.Join(path, "git.pb")
+ _, err2 := os.Stat(gitdir)
+ if !os.IsNotExist(err2) {
+ all = append(all, path)
+ return filepath.SkipDir
+ }
+ // 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
+}