]> source.dussan.org Git - gitea.git/commitdiff
Fix github download on migration (#14703)
authorLunny Xiao <xiaolunwen@gmail.com>
Thu, 18 Feb 2021 00:36:49 +0000 (08:36 +0800)
committerGitHub <noreply@github.com>
Thu, 18 Feb 2021 00:36:49 +0000 (01:36 +0100)
* Fix github download on migration

* Use Context for Client

Co-authored-by: zeripath <art27@cantab.net>
modules/migrations/github.go

index 8d49f9308e8ab92ef2024d3b03784ef31dd55346..cb61086b2ad6b3d4dc689df6b23b994847bd6795 100644 (file)
@@ -6,11 +6,9 @@
 package migrations
 
 import (
-       "bytes"
        "context"
        "fmt"
        "io"
-       "io/ioutil"
        "net/http"
        "net/url"
        "strings"
@@ -292,6 +290,7 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease)
        }
 
        for _, asset := range rel.Assets {
+               var assetID = *asset.ID // Don't optimize this, for closure we need a local variable
                r.Assets = append(r.Assets, &base.ReleaseAsset{
                        ID:            *asset.ID,
                        Name:          *asset.Name,
@@ -302,7 +301,7 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease)
                        Updated:       asset.UpdatedAt.Time,
                        DownloadFunc: func() (io.ReadCloser, error) {
                                g.sleep()
-                               asset, redir, err := g.client.Repositories.DownloadReleaseAsset(g.ctx, g.repoOwner, g.repoName, *asset.ID, http.DefaultClient)
+                               asset, redir, err := g.client.Repositories.DownloadReleaseAsset(g.ctx, g.repoOwner, g.repoName, assetID, nil)
                                if err != nil {
                                        return nil, err
                                }
@@ -311,7 +310,23 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease)
                                        log.Error("g.client.RateLimits: %s", err)
                                }
                                if asset == nil {
-                                       return ioutil.NopCloser(bytes.NewBufferString(redir)), nil
+                                       if redir != "" {
+                                               g.sleep()
+                                               req, err := http.NewRequestWithContext(g.ctx, "GET", redir, nil)
+                                               if err != nil {
+                                                       return nil, err
+                                               }
+                                               resp, err := http.DefaultClient.Do(req)
+                                               err1 := g.RefreshRate()
+                                               if err1 != nil {
+                                                       log.Error("g.client.RateLimits: %s", err1)
+                                               }
+                                               if err != nil {
+                                                       return nil, err
+                                               }
+                                               return resp.Body, nil
+                                       }
+                                       return nil, fmt.Errorf("No release asset found for %d", assetID)
                                }
                                return asset, nil
                        },