2.7 KiB
date | title | slug | weight | toc | draft | menu |
---|---|---|---|---|---|---|
2019-04-15T17:29:00+08:00 | Advanced: Migrations Interfaces | migrations-interfaces | 30 | true | false | [{sidebar [{parent advanced} {name Migrations Interfaces} {weight 55} {identifier migrations-interfaces}]}] |
Migration Features
The new migration features were introduced in Gitea 1.9.0. It defines two interfaces to support migrating repositories data from other git host platforms to gitea or, in the future migrating gitea data to other git host platforms. Currently, migrations from Github, Gitlab and Gitea to Gitea is implemented.
First of all, Gitea defines some standard objects in packages modules/migrations/base
. They are
Repository
, Milestone
, Release
, ReleaseAsset
, Label
, Issue
, Comment
, PullRequest
, Reaction
, Review
, ReviewComment
.
Downloader Interfaces
To migrate from a new git host platform, there are two steps to be updated.
- You should implement a
Downloader
which will get all kinds of repository informations. - You should implement a
DownloaderFactory
which is used to detect if the URL matches and create a Downloader. - You'll need to register the
DownloaderFactory
viaRegisterDownloaderFactory
on init.
type Downloader interface {
GetAsset(relTag string, relID, id int64) (io.ReadCloser, error)
SetContext(context.Context)
GetRepoInfo() (*Repository, error)
GetTopics() ([]string, error)
GetMilestones() ([]*Milestone, error)
GetReleases() ([]*Release, error)
GetLabels() ([]*Label, error)
GetIssues(page, perPage int) ([]*Issue, bool, error)
GetComments(issueNumber int64) ([]*Comment, error)
GetPullRequests(page, perPage int) ([]*PullRequest, bool, error)
GetReviews(pullRequestNumber int64) ([]*Review, error)
}
type DownloaderFactory interface {
New(ctx context.Context, opts MigrateOptions) (Downloader, error)
GitServiceType() structs.GitServiceType
}
Uploader Interface
Currently, only a GiteaLocalUploader
is implemented, so we only save downloaded
data via this Uploader
on the local Gitea instance. Other uploaders are not supported
and will be implemented in future.
// Uploader uploads all the informations
type Uploader interface {
MaxBatchInsertSize(tp string) int
CreateRepo(repo *Repository, opts MigrateOptions) error
CreateTopics(topic ...string) error
CreateMilestones(milestones ...*Milestone) error
CreateReleases(downloader Downloader, releases ...*Release) error
SyncTags() error
CreateLabels(labels ...*Label) error
CreateIssues(issues ...*Issue) error
CreateComments(comments ...*Comment) error
CreatePullRequests(prs ...*PullRequest) error
CreateReviews(reviews ...*Review) error
Rollback() error
Close()
}