diff options
| author | Jeff Carr <[email protected]> | 2025-07-09 03:18:29 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-07-09 23:24:06 -0500 |
| commit | 8a788bef6d201b50dd066a62167a23378e4162a7 (patch) | |
| tree | ab18e3b8af5eab617b48bdceae38759ca4320aee /forgeDir.go | |
| parent | 3588440aed55e81864c1afd2d96d6b037242befd (diff) | |
make git clone work in forged
Diffstat (limited to 'forgeDir.go')
| -rw-r--r-- | forgeDir.go | 76 |
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 +} |
