diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2020-12-27 11:34:19 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-27 11:34:19 +0800 |
commit | dd08853b10781177253b581fde482fe67ab14edf (patch) | |
tree | c0e065cfe86ae130371568f1e75c6560758ff31c /modules/migrations/gitlab.go | |
parent | 212fa340cfb499297bf76cb9dd5751895700a2af (diff) | |
download | gitea-dd08853b10781177253b581fde482fe67ab14edf.tar.gz gitea-dd08853b10781177253b581fde482fe67ab14edf.zip |
Dump github/gitlab/gitea repository data to a local directory and restore to gitea (#12244)
* Dump github/gitlab repository data to a local directory
* Fix lint
* Adjust directory structure
* Allow migration special units
* Allow migration ignore release assets
* Fix lint
* Add restore repository
* stage the changes
* Merge
* Fix lint
* Update the interface
* Add some restore methods
* Finish restore
* Add comments
* Fix restore
* Add a token flag
* Fix bug
* Fix test
* Fix test
* Fix bug
* Fix bug
* Fix lint
* Fix restore
* refactor downloader
* fmt
* Fix bug isEnd detection on getIssues
* Refactor maxPerPage
* Remove unused codes
* Remove unused codes
* Fix bug
* Fix restore
* Fix dump
* Uploader should not depend downloader
* use release attachment name but not id
* Fix restore bug
* Fix lint
* Fix restore bug
* Add a method of DownloadFunc for base.Release to make uploader not depend on downloader
* fix Release yml marshal
* Fix trace information
* Fix bug when dump & restore
* Save relative path on yml file
* Fix bug
* Use relative path
* Update docs
* Use git service string but not int
* Recognize clone addr to service type
Diffstat (limited to 'modules/migrations/gitlab.go')
-rw-r--r-- | modules/migrations/gitlab.go | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/modules/migrations/gitlab.go b/modules/migrations/gitlab.go index b1027c4f64..e3fa956758 100644 --- a/modules/migrations/gitlab.go +++ b/modules/migrations/gitlab.go @@ -295,12 +295,32 @@ func (g *GitlabDownloader) convertGitlabRelease(rel *gitlab.Release) *base.Relea } for k, asset := range rel.Assets.Links { - r.Assets = append(r.Assets, base.ReleaseAsset{ + r.Assets = append(r.Assets, &base.ReleaseAsset{ ID: int64(asset.ID), Name: asset.Name, ContentType: &rel.Assets.Sources[k].Format, Size: &zero, DownloadCount: &zero, + DownloadFunc: func() (io.ReadCloser, error) { + link, _, err := g.client.ReleaseLinks.GetReleaseLink(g.repoID, rel.TagName, asset.ID, gitlab.WithContext(g.ctx)) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", link.URL, nil) + if err != nil { + return nil, err + } + req = req.WithContext(g.ctx) + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + + // resp.Body is closed by the uploader + return resp.Body, nil + }, }) } return r @@ -329,28 +349,6 @@ func (g *GitlabDownloader) GetReleases() ([]*base.Release, error) { return releases, nil } -// GetAsset returns an asset -func (g *GitlabDownloader) GetAsset(tag string, _, id int64) (io.ReadCloser, error) { - link, _, err := g.client.ReleaseLinks.GetReleaseLink(g.repoID, tag, int(id), gitlab.WithContext(g.ctx)) - if err != nil { - return nil, err - } - - req, err := http.NewRequest("GET", link.URL, nil) - if err != nil { - return nil, err - } - req = req.WithContext(g.ctx) - - resp, err := http.DefaultClient.Do(req) - if err != nil { - return nil, err - } - - // resp.Body is closed by the uploader - return resp.Body, nil -} - // GetIssues returns issues according start and limit // Note: issue label description and colors are not supported by the go-gitlab library at this time func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, error) { |