diff options
| author | Jeff Carr <[email protected]> | 2024-12-17 20:48:08 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-12-17 20:48:08 -0600 |
| commit | 7cdb2bf6a0c88ac860b03a547918bb6d85e6fdb6 (patch) | |
| tree | 999bf70b7a54d3f64f1e40e5ed4ff26a5f350de3 /rill.go | |
| parent | 23b2b26643596aa1aeba229067b14a97d297f8bf (diff) | |
rill repo.Update()
Diffstat (limited to 'rill.go')
| -rw-r--r-- | rill.go | 63 |
1 files changed, 63 insertions, 0 deletions
@@ -0,0 +1,63 @@ +package forgepb + +import ( + "github.com/destel/rill" + "go.wit.com/lib/protobuf/gitpb" + "go.wit.com/log" +) + +// rill is awesome. long live rill +// attempt scan with rill +func (f *Forge) rillUpdate(pool1 int, pool2 int) (int, error) { + var repos []*gitpb.Repo + all := f.Repos.SortByFullPath() + for all.Scan() { + repo := all.Next() + repos = append(repos, repo) + } + + // Convert a slice of user IDs into a channel + ids := rill.FromSlice(repos, nil) + + // Read users from the API. + // Concurrency = 20 + rills := rill.Map(ids, pool1, func(repo *gitpb.Repo) (*gitpb.Repo, error) { + return repo, nil + }) + + var counter int + // Activate users. + // Concurrency = 10 + err := rill.ForEach(rills, pool2, func(repo *gitpb.Repo) error { + counter += 1 + return f.updateRepo(repo) + }) + + return counter, err +} + +func (f *Forge) updateRepo(repo *gitpb.Repo) error { + if !repo.IsValidDir() { + log.Printf("%10s %-50s", "bad git dir\n", repo.FullPath) + f.Repos.DeleteByFullPath(repo.FullPath) + f.configSave = true + return nil + } + + if repo.DidRepoChange() { + f.configSave = true + log.Info("repo changed", repo.StateChange, repo.FullPath) + if err := repo.Reload(); err != nil { + return err + } + } + if f.Config.IsReadOnly(repo.GetGoPath()) { + if repo.ReadOnly { + } else { + log.Info("readonly flag on repo is wrong", repo.GetGoPath()) + repo.ReadOnly = true + f.configSave = true + } + } + return nil +} |
