* add GetTopics interface * CreateTopics * remove un-needed commenttags/v1.21.12.1
| @@ -34,6 +34,7 @@ create a Downloader. | |||||
| ```Go | ```Go | ||||
| type Downloader interface { | type Downloader interface { | ||||
| GetRepoInfo() (*Repository, error) | GetRepoInfo() (*Repository, error) | ||||
| GetTopics() ([]string, error) | |||||
| GetMilestones() ([]*Milestone, error) | GetMilestones() ([]*Milestone, error) | ||||
| GetReleases() ([]*Release, error) | GetReleases() ([]*Release, error) | ||||
| GetLabels() ([]*Label, error) | GetLabels() ([]*Label, error) | ||||
| @@ -8,6 +8,7 @@ package base | |||||
| // Downloader downloads the site repo informations | // Downloader downloads the site repo informations | ||||
| type Downloader interface { | type Downloader interface { | ||||
| GetRepoInfo() (*Repository, error) | GetRepoInfo() (*Repository, error) | ||||
| GetTopics() ([]string, error) | |||||
| GetMilestones() ([]*Milestone, error) | GetMilestones() ([]*Milestone, error) | ||||
| GetReleases() ([]*Release, error) | GetReleases() ([]*Release, error) | ||||
| GetLabels() ([]*Label, error) | GetLabels() ([]*Label, error) | ||||
| @@ -9,6 +9,7 @@ package base | |||||
| type Uploader interface { | type Uploader interface { | ||||
| MaxBatchInsertSize(tp string) int | MaxBatchInsertSize(tp string) int | ||||
| CreateRepo(repo *Repository, opts MigrateOptions) error | CreateRepo(repo *Repository, opts MigrateOptions) error | ||||
| CreateTopics(topic ...string) error | |||||
| CreateMilestones(milestones ...*Milestone) error | CreateMilestones(milestones ...*Milestone) error | ||||
| CreateReleases(releases ...*Release) error | CreateReleases(releases ...*Release) error | ||||
| CreateLabels(labels ...*Label) error | CreateLabels(labels ...*Label) error | ||||
| @@ -38,6 +38,11 @@ func (g *PlainGitDownloader) GetRepoInfo() (*base.Repository, error) { | |||||
| }, nil | }, nil | ||||
| } | } | ||||
| // GetTopics returns empty list for plain git repo | |||||
| func (g *PlainGitDownloader) GetTopics() ([]string, error) { | |||||
| return []string{}, nil | |||||
| } | |||||
| // GetMilestones returns milestones | // GetMilestones returns milestones | ||||
| func (g *PlainGitDownloader) GetMilestones() ([]*base.Milestone, error) { | func (g *PlainGitDownloader) GetMilestones() ([]*base.Milestone, error) { | ||||
| return nil, ErrNotSupported | return nil, ErrNotSupported | ||||
| @@ -97,6 +97,11 @@ func (g *GiteaLocalUploader) CreateRepo(repo *base.Repository, opts base.Migrate | |||||
| return err | return err | ||||
| } | } | ||||
| // CreateTopics creates topics | |||||
| func (g *GiteaLocalUploader) CreateTopics(topics ...string) error { | |||||
| return models.SaveTopics(g.repo.ID, topics...) | |||||
| } | |||||
| // CreateMilestones creates milestones | // CreateMilestones creates milestones | ||||
| func (g *GiteaLocalUploader) CreateMilestones(milestones ...*base.Milestone) error { | func (g *GiteaLocalUploader) CreateMilestones(milestones ...*base.Milestone) error { | ||||
| var mss = make([]*models.Milestone, 0, len(milestones)) | var mss = make([]*models.Milestone, 0, len(milestones)) | ||||
| @@ -118,6 +118,12 @@ func (g *GithubDownloaderV3) GetRepoInfo() (*base.Repository, error) { | |||||
| }, nil | }, nil | ||||
| } | } | ||||
| // GetTopics return github topics | |||||
| func (g *GithubDownloaderV3) GetTopics() ([]string, error) { | |||||
| r, _, err := g.client.Repositories.Get(g.ctx, g.repoOwner, g.repoName) | |||||
| return r.Topics, err | |||||
| } | |||||
| // GetMilestones returns milestones | // GetMilestones returns milestones | ||||
| func (g *GithubDownloaderV3) GetMilestones() ([]*base.Milestone, error) { | func (g *GithubDownloaderV3) GetMilestones() ([]*base.Milestone, error) { | ||||
| var perPage = 100 | var perPage = 100 | ||||
| @@ -71,6 +71,10 @@ func TestGitHubDownloadRepo(t *testing.T) { | |||||
| OriginalURL: "https://github.com/go-gitea/gitea", | OriginalURL: "https://github.com/go-gitea/gitea", | ||||
| }, repo) | }, repo) | ||||
| topics, err := downloader.GetTopics() | |||||
| assert.NoError(t, err) | |||||
| assert.Contains(t, topics, "gitea") | |||||
| milestones, err := downloader.GetMilestones() | milestones, err := downloader.GetMilestones() | ||||
| assert.NoError(t, err) | assert.NoError(t, err) | ||||
| // before this tool release, we have 39 milestones on github.com/go-gitea/gitea | // before this tool release, we have 39 milestones on github.com/go-gitea/gitea | ||||
| @@ -82,6 +82,17 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts | |||||
| return err | return err | ||||
| } | } | ||||
| log.Trace("migrating topics") | |||||
| topics, err := downloader.GetTopics() | |||||
| if err != nil { | |||||
| return err | |||||
| } | |||||
| if len(topics) > 0 { | |||||
| if err := uploader.CreateTopics(topics...); err != nil { | |||||
| return err | |||||
| } | |||||
| } | |||||
| if opts.Milestones { | if opts.Milestones { | ||||
| log.Trace("migrating milestones") | log.Trace("migrating milestones") | ||||
| milestones, err := downloader.GetMilestones() | milestones, err := downloader.GetMilestones() | ||||