77 lines
2.0 KiB
Go
77 lines
2.0 KiB
Go
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
|
|
}
|