diff --git a/database/GetRepositories.go b/database/GetRepositories.go index 2cb669e..fa0d74e 100644 --- a/database/GetRepositories.go +++ b/database/GetRepositories.go @@ -1,6 +1,8 @@ package database import ( + "sync" + "github.com/gitarchived/updater/git" "github.com/gitarchived/updater/models" "gorm.io/gorm" @@ -16,20 +18,34 @@ func GetRepositories(db *gorm.DB, host models.Host, force bool) ([]Repository, e var results []Repository data := db.Where("host = ? AND deleted = ?", host.Name, false).Find(&repositories) + limiter := make(chan int, 10) + wg := sync.WaitGroup{} + wg.Add(len(repositories)) for _, r := range repositories { - commit, err := git.GetLastCommit(r, host) - - if err != nil { - if err := db.Model(&models.Repository{}).Where("id = ?", r.ID).Update("deleted", true); err.Error != nil { - continue + limiter <- 1 + go func(r models.Repository) { + defer func() { + <-limiter + wg.Done() + }() + + commit, err := git.GetLastCommit(r, host) + + if err != nil { + if err := db.Model(&models.Repository{}).Where("id = ?", r.ID).Update("deleted", true); err.Error != nil { + data.Error = err.Error + } } - } - if commit != r.LastCommit || force { - results = append(results, Repository{Repository: r, NewCommitHash: commit}) - } + if commit != r.LastCommit || force { + results = append(results, Repository{Repository: r, NewCommitHash: commit}) + } + }(r) } + wg.Wait() + close(limiter) + return results, data.Error }