var (
_ base.Downloader = &GithubDownloaderV3{}
_ base.DownloaderFactory = &GithubDownloaderV3Factory{}
+ // GithubLimitRateRemaining limit to wait for new rate to apply
+ GithubLimitRateRemaining = 0
)
func init() {
}
func (g *GithubDownloaderV3) sleep() {
- for g.rate != nil && g.rate.Remaining <= 0 {
+ for g.rate != nil && g.rate.Remaining <= GithubLimitRateRemaining {
timer := time.NewTimer(time.Until(g.rate.Reset.Time))
select {
case <-g.ctx.Done():
case <-timer.C:
}
- rates, _, err := g.client.RateLimits(g.ctx)
+ err := g.RefreshRate()
if err != nil {
log.Error("g.client.RateLimits: %s", err)
}
+ }
+}
- g.rate = rates.GetCore()
+// RefreshRate update the current rate (doesn't count in rate limit)
+func (g *GithubDownloaderV3) RefreshRate() error {
+ rates, _, err := g.client.RateLimits(g.ctx)
+ if err != nil {
+ return err
}
+
+ g.rate = rates.GetCore()
+ return nil
}
// GetRepoInfo returns a repository information
package migrations
import (
+ "os"
"testing"
"time"
}
func TestGitHubDownloadRepo(t *testing.T) {
- downloader := NewGithubDownloaderV3("", "", "go-gitea", "test_repo")
+ GithubLimitRateRemaining = 3 //Wait at 3 remaining since we could have 3 CI in //
+ downloader := NewGithubDownloaderV3(os.Getenv("GITHUB_READ_TOKEN"), "", "go-gitea", "test_repo")
+ err := downloader.RefreshRate()
+ assert.NoError(t, err)
+
repo, err := downloader.GetRepoInfo()
assert.NoError(t, err)
assert.EqualValues(t, &base.Repository{