rill repo.Update()

This commit is contained in:
Jeff Carr 2024-12-17 20:48:08 -06:00
parent 23b2b26643
commit 7cdb2bf6a0
2 changed files with 66 additions and 21 deletions

24
init.go
View File

@ -34,7 +34,8 @@ func Init() *Forge {
log.Info("forgepb.Scan() Scan found", end-start, "new git repositories. Total =", end)
}
f.updateAll()
f.rillUpdate(20, 10)
// f.updateAll()
if f.configSave {
f.ConfigSave()
@ -49,26 +50,7 @@ func (f *Forge) updateAll() {
for all.Scan() {
repo := all.Next()
if !repo.IsValidDir() {
log.Printf("%10s %-50s", "bad git dir\n", repo.FullPath)
f.Repos.DeleteByFullPath(repo.FullPath)
f.configSave = true
continue
}
if repo.RepoChanged() {
f.configSave = true
log.Info("repo changed", repo.StateChange, repo.FullPath)
repo.Reload()
}
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
}
}
f.updateRepo(repo)
}
}

63
rill.go Normal file
View File

@ -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
}