diff options
Diffstat (limited to 'goSrcScan.go')
| -rw-r--r-- | goSrcScan.go | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/goSrcScan.go b/goSrcScan.go new file mode 100644 index 0000000..0f85c33 --- /dev/null +++ b/goSrcScan.go @@ -0,0 +1,118 @@ +package forgepb + +import ( + "os" + "os/user" + "path/filepath" + "strings" + + "go.wit.com/log" +) + +func (f *Forge) ScanGoSrc() (bool, error) { + dirs, err := gitDirectories(f.goSrc) + if err != nil { + return false, err + } + + for _, dir := range dirs { + if strings.HasPrefix(dir, f.goSrc) { + gopath := strings.TrimPrefix(dir, f.goSrc) + gopath = strings.Trim(gopath, "/") + // log.Info("ScanGoSrc() ok:", f.goSrc, gopath) + newr, err := f.Repos.NewGoPath(f.goSrc, gopath) + if err != nil { + log.Log(FORGEPBWARN, "init failed", err) + panic("crapnuts") + } + log.Info("init worked for", newr.GoPath) + // try to guess what the 'master' branch is + if newr.IsBranch("guimaster") { + newr.SetMasterBranchName("guimaster") + } else if newr.IsBranch("master") { + newr.SetMasterBranchName("master") + } else if newr.IsBranch("main") { + newr.SetMasterBranchName("main") + } else { + newr.SetMasterBranchName("masterFIXME") + } + + if newr.IsBranch("guidevel") { + newr.SetDevelBranchName("guidevel") + } else if newr.IsBranch("devel") { + newr.SetDevelBranchName("devel") + } else { + newr.SetDevelBranchName("develFIXME") + } + + usr, _ := user.Current() + uname := usr.Username + if newr.IsBranch(uname) { + newr.SetUserBranchName(uname) + } else { + newr.SetUserBranchName(uname + "FIXME") + } + } else { + log.Log(FORGEPBWARN, "ScanGoSrc() bad:", dir) + } + } + return true, err +} + +func gitDirectories(srcDir string) ([]string, error) { + var all []string + err := filepath.Walk(srcDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + log.Log(FORGEPBWARN, "Error accessing path:", path, err) + return nil + } + + // Check if the path is a directory and has a .git subdirectory + if info.IsDir() && IsGitDir(path) { + all = append(all, path) + } + + return nil + }) + + if err != nil { + log.Log(FORGEPBWARN, "Error walking the path:", srcDir, err) + } + + return all, err +} + +// IsGitDir checks if a .git directory exists inside the given directory +func IsGitDir(dir string) bool { + gitDir := filepath.Join(dir, ".git") + info, err := os.Stat(gitDir) + if os.IsNotExist(err) { + return false + } + return info.IsDir() +} + +/* +// rill is awesome. long live rill +func rillAddDirs(gopaths []string) { + // Convert a slice of user IDs into a channel + ids := rill.FromSlice(gopaths, nil) + + // Read users from the API. + // Concurrency = 20 + dirs := rill.Map(ids, 20, func(id string) (*repolist.RepoRow, error) { + return me.repos.View.FindByName(id), nil + }) + + // Activate users. + // Concurrency = 10 + err := rill.ForEach(dirs, 10, func(repo *repolist.RepoRow) error { + fmt.Printf("Repo found : %s\n", repo.GoPath()) + repo.Run([]string{"git", "pull"}) + return nil + }) + + // Handle errors + fmt.Println("Error:", err) +} +*/ |
