diff options
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 +} |
