mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 06:21:11 +00:00 
			
		
		
		
	Backport #27887 by @Zettat123
We should not use `asset.ID` in DownloadFunc because DownloadFunc is a
closure.
1bf5527eac/services/migrations/gitea_downloader.go (L284-L295)
A similar bug when migrating from GitHub has been fixed in #14703. This
PR fixes the bug when migrating from Gitea and GitLab.
Co-authored-by: Zettat123 <zettat123@gmail.com>
	
	
This commit is contained in:
		
					parent
					
						
							
								9ca1853495
							
						
					
				
			
			
				commit
				
					
						8d0a4d7e9d
					
				
			
		
					 2 changed files with 9 additions and 6 deletions
				
			
		|  | @ -282,6 +282,8 @@ func (g *GiteaDownloader) convertGiteaRelease(rel *gitea_sdk.Release) *base.Rele | ||||||
| 	httpClient := NewMigrationHTTPClient() | 	httpClient := NewMigrationHTTPClient() | ||||||
| 
 | 
 | ||||||
| 	for _, asset := range rel.Attachments { | 	for _, asset := range rel.Attachments { | ||||||
|  | 		assetID := asset.ID // Don't optimize this, for closure we need a local variable | ||||||
|  | 		assetDownloadURL := asset.DownloadURL | ||||||
| 		size := int(asset.Size) | 		size := int(asset.Size) | ||||||
| 		dlCount := int(asset.DownloadCount) | 		dlCount := int(asset.DownloadCount) | ||||||
| 		r.Assets = append(r.Assets, &base.ReleaseAsset{ | 		r.Assets = append(r.Assets, &base.ReleaseAsset{ | ||||||
|  | @ -292,18 +294,18 @@ func (g *GiteaDownloader) convertGiteaRelease(rel *gitea_sdk.Release) *base.Rele | ||||||
| 			Created:       asset.Created, | 			Created:       asset.Created, | ||||||
| 			DownloadURL:   &asset.DownloadURL, | 			DownloadURL:   &asset.DownloadURL, | ||||||
| 			DownloadFunc: func() (io.ReadCloser, error) { | 			DownloadFunc: func() (io.ReadCloser, error) { | ||||||
| 				asset, _, err := g.client.GetReleaseAttachment(g.repoOwner, g.repoName, rel.ID, asset.ID) | 				asset, _, err := g.client.GetReleaseAttachment(g.repoOwner, g.repoName, rel.ID, assetID) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					return nil, err | 					return nil, err | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if !hasBaseURL(asset.DownloadURL, g.baseURL) { | 				if !hasBaseURL(assetDownloadURL, g.baseURL) { | ||||||
| 					WarnAndNotice("Unexpected AssetURL for assetID[%d] in %s: %s", asset.ID, g, asset.DownloadURL) | 					WarnAndNotice("Unexpected AssetURL for assetID[%d] in %s: %s", assetID, g, assetDownloadURL) | ||||||
| 					return io.NopCloser(strings.NewReader(asset.DownloadURL)), nil | 					return io.NopCloser(strings.NewReader(asset.DownloadURL)), nil | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				// FIXME: for a private download? | 				// FIXME: for a private download? | ||||||
| 				req, err := http.NewRequest("GET", asset.DownloadURL, nil) | 				req, err := http.NewRequest("GET", assetDownloadURL, nil) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					return nil, err | 					return nil, err | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|  | @ -310,6 +310,7 @@ func (g *GitlabDownloader) convertGitlabRelease(rel *gitlab.Release) *base.Relea | ||||||
| 	httpClient := NewMigrationHTTPClient() | 	httpClient := NewMigrationHTTPClient() | ||||||
| 
 | 
 | ||||||
| 	for k, asset := range rel.Assets.Links { | 	for k, asset := range rel.Assets.Links { | ||||||
|  | 		assetID := asset.ID // Don't optimize this, for closure we need a local variable | ||||||
| 		r.Assets = append(r.Assets, &base.ReleaseAsset{ | 		r.Assets = append(r.Assets, &base.ReleaseAsset{ | ||||||
| 			ID:            int64(asset.ID), | 			ID:            int64(asset.ID), | ||||||
| 			Name:          asset.Name, | 			Name:          asset.Name, | ||||||
|  | @ -317,13 +318,13 @@ func (g *GitlabDownloader) convertGitlabRelease(rel *gitlab.Release) *base.Relea | ||||||
| 			Size:          &zero, | 			Size:          &zero, | ||||||
| 			DownloadCount: &zero, | 			DownloadCount: &zero, | ||||||
| 			DownloadFunc: func() (io.ReadCloser, error) { | 			DownloadFunc: func() (io.ReadCloser, error) { | ||||||
| 				link, _, err := g.client.ReleaseLinks.GetReleaseLink(g.repoID, rel.TagName, asset.ID, gitlab.WithContext(g.ctx)) | 				link, _, err := g.client.ReleaseLinks.GetReleaseLink(g.repoID, rel.TagName, assetID, gitlab.WithContext(g.ctx)) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					return nil, err | 					return nil, err | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if !hasBaseURL(link.URL, g.baseURL) { | 				if !hasBaseURL(link.URL, g.baseURL) { | ||||||
| 					WarnAndNotice("Unexpected AssetURL for assetID[%d] in %s: %s", asset.ID, g, link.URL) | 					WarnAndNotice("Unexpected AssetURL for assetID[%d] in %s: %s", assetID, g, link.URL) | ||||||
| 					return io.NopCloser(strings.NewReader(link.URL)), nil | 					return io.NopCloser(strings.NewReader(link.URL)), nil | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue