6
6
package migrations
7
7
8
8
import (
9
- "bytes"
10
9
"context"
11
10
"fmt"
12
11
"io"
13
- "io/ioutil"
14
12
"net/http"
15
13
"net/url"
16
14
"strings"
@@ -292,6 +290,7 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease)
292
290
}
293
291
294
292
for _ , asset := range rel .Assets {
293
+ var assetID = * asset .ID // Don't optimize this, for closure we need a local variable
295
294
r .Assets = append (r .Assets , & base.ReleaseAsset {
296
295
ID : * asset .ID ,
297
296
Name : * asset .Name ,
@@ -302,7 +301,7 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease)
302
301
Updated : asset .UpdatedAt .Time ,
303
302
DownloadFunc : func () (io.ReadCloser , error ) {
304
303
g .sleep ()
305
- asset , redir , err := g .client .Repositories .DownloadReleaseAsset (g .ctx , g .repoOwner , g .repoName , * asset . ID , http . DefaultClient )
304
+ asset , redir , err := g .client .Repositories .DownloadReleaseAsset (g .ctx , g .repoOwner , g .repoName , assetID , nil )
306
305
if err != nil {
307
306
return nil , err
308
307
}
@@ -311,7 +310,23 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease)
311
310
log .Error ("g.client.RateLimits: %s" , err )
312
311
}
313
312
if asset == nil {
314
- return ioutil .NopCloser (bytes .NewBufferString (redir )), nil
313
+ if redir != "" {
314
+ g .sleep ()
315
+ req , err := http .NewRequestWithContext (g .ctx , "GET" , redir , nil )
316
+ if err != nil {
317
+ return nil , err
318
+ }
319
+ resp , err := http .DefaultClient .Do (req )
320
+ err1 := g .RefreshRate ()
321
+ if err1 != nil {
322
+ log .Error ("g.client.RateLimits: %s" , err1 )
323
+ }
324
+ if err != nil {
325
+ return nil , err
326
+ }
327
+ return resp .Body , nil
328
+ }
329
+ return nil , fmt .Errorf ("No release asset found for %d" , assetID )
315
330
}
316
331
return asset , nil
317
332
},
0 commit comments