migration

package
v1.21.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2024 License: MIT Imports: 15 Imported by: 6

Documentation

Index

Constants

View Source
const (
	ReviewStatePending          = "PENDING"
	ReviewStateApproved         = "APPROVED"
	ReviewStateChangesRequested = "CHANGES_REQUESTED"
	ReviewStateCommented        = "COMMENTED"
	ReviewStateRequestReview    = "REQUEST_REVIEW"
)

enumerate all review states

Variables

This section is empty.

Functions

func IsErrNotSupported

func IsErrNotSupported(err error) bool

IsErrNotSupported checks if an error is an ErrNotSupported

func Load added in v1.17.0

func Load(filename string, data any, validation bool) error

Load project data from file, with optional validation

func NilMessenger

func NilMessenger(string, ...any)

NilMessenger represents an empty formatting function

Types

type Comment

type Comment struct {
	IssueIndex  int64 `yaml:"issue_index"`
	Index       int64
	CommentType string `yaml:"comment_type"` // see `commentStrings` in models/issues/comment.go
	PosterID    int64  `yaml:"poster_id"`
	PosterName  string `yaml:"poster_name"`
	PosterEmail string `yaml:"poster_email"`
	Created     time.Time
	Updated     time.Time
	Content     string
	Reactions   []*Reaction
	Meta        map[string]any `yaml:"meta,omitempty"` // see models/issues/comment.go for fields in Comment struct
}

Comment is a standard comment information

func (*Comment) GetExternalID added in v1.17.0

func (c *Comment) GetExternalID() int64

ExternalID ExternalUserMigrated interface

func (*Comment) GetExternalName added in v1.17.0

func (c *Comment) GetExternalName() string

GetExternalName ExternalUserMigrated interface

type Commentable added in v1.17.0

type Commentable interface {
	Reviewable
	GetContext() DownloaderContext
}

Commentable can be commented upon

type Downloader

type Downloader interface {
	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(commentable Commentable) ([]*Comment, bool, error)
	GetAllComments(page, perPage int) ([]*Comment, bool, error)
	SupportGetRepoComments() bool
	GetPullRequests(page, perPage int) ([]*PullRequest, bool, error)
	GetReviews(reviewable Reviewable) ([]*Review, error)
	FormatCloneURL(opts MigrateOptions, remoteAddr string) (string, error)
}

Downloader downloads the site repo information

type DownloaderContext added in v1.17.0

type DownloaderContext any

DownloaderContext has opaque information only relevant to a given downloader

type DownloaderFactory

type DownloaderFactory interface {
	New(ctx context.Context, opts MigrateOptions) (Downloader, error)
	GitServiceType() structs.GitServiceType
}

DownloaderFactory defines an interface to match a downloader implementation and create a downloader

type ErrNotSupported

type ErrNotSupported struct {
	Entity string
}

ErrNotSupported represents status if a downloader do not supported something.

func (ErrNotSupported) Error

func (err ErrNotSupported) Error() string

Error return error message

type Issue

type Issue struct {
	Number       int64             `json:"number"`
	PosterID     int64             `yaml:"poster_id" json:"poster_id"`
	PosterName   string            `yaml:"poster_name" json:"poster_name"`
	PosterEmail  string            `yaml:"poster_email" json:"poster_email"`
	Title        string            `json:"title"`
	Content      string            `json:"content"`
	Ref          string            `json:"ref"`
	Milestone    string            `json:"milestone"`
	State        string            `json:"state"` // closed, open
	IsLocked     bool              `yaml:"is_locked" json:"is_locked"`
	Created      time.Time         `json:"created"`
	Updated      time.Time         `json:"updated"`
	Closed       *time.Time        `json:"closed"`
	Labels       []*Label          `json:"labels"`
	Reactions    []*Reaction       `json:"reactions"`
	Assignees    []string          `json:"assignees"`
	ForeignIndex int64             `json:"foreign_id"`
	Context      DownloaderContext `yaml:"-"`
}

Issue is a standard issue information

func (*Issue) GetContext added in v1.17.0

func (issue *Issue) GetContext() DownloaderContext

func (*Issue) GetExternalID added in v1.17.0

func (issue *Issue) GetExternalID() int64

GetExternalID ExternalUserMigrated interface

func (*Issue) GetExternalName added in v1.17.0

func (issue *Issue) GetExternalName() string

GetExternalName ExternalUserMigrated interface

func (*Issue) GetForeignIndex added in v1.17.0

func (issue *Issue) GetForeignIndex() int64

func (*Issue) GetLocalIndex added in v1.17.0

func (issue *Issue) GetLocalIndex() int64

type Label

type Label struct {
	Name        string `json:"name"`
	Color       string `json:"color"`
	Description string `json:"description"`
	Exclusive   bool   `json:"exclusive"`
}

Label defines a standard label information

type Messenger

type Messenger func(key string, args ...any)

Messenger is a formatting function similar to i18n.Tr

type MigrateOptions

type MigrateOptions struct {
	// required: true
	CloneAddr             string `json:"clone_addr" binding:"Required"`
	CloneAddrEncrypted    string `json:"clone_addr_encrypted,omitempty"`
	AuthUsername          string `json:"auth_username"`
	AuthPassword          string `json:"-"`
	AuthPasswordEncrypted string `json:"auth_password_encrypted,omitempty"`
	AuthToken             string `json:"-"`
	AuthTokenEncrypted    string `json:"auth_token_encrypted,omitempty"`
	// required: true
	UID int `json:"uid" binding:"Required"`
	// required: true
	RepoName        string `json:"repo_name" binding:"Required"`
	Mirror          bool   `json:"mirror"`
	LFS             bool   `json:"lfs"`
	LFSEndpoint     string `json:"lfs_endpoint"`
	Private         bool   `json:"private"`
	Description     string `json:"description"`
	OriginalURL     string
	GitServiceType  structs.GitServiceType
	Wiki            bool
	Issues          bool
	Milestones      bool
	Labels          bool
	Releases        bool
	Comments        bool
	PullRequests    bool
	ReleaseAssets   bool
	MigrateToRepoID int64
	MirrorInterval  string `json:"mirror_interval"`
}

MigrateOptions defines the way a repository gets migrated this is for internal usage by migrations module and func who interact with it

type Milestone

type Milestone struct {
	Title       string     `json:"title"`
	Description string     `json:"description"`
	Deadline    *time.Time `json:"deadline"`
	Created     time.Time  `json:"created"`
	Updated     *time.Time `json:"updated"`
	Closed      *time.Time `json:"closed"`
	State       string     `json:"state"` // open, closed
}

Milestone defines a standard milestone

type NullDownloader

type NullDownloader struct{}

NullDownloader implements a blank downloader

func (NullDownloader) FormatCloneURL

func (n NullDownloader) FormatCloneURL(opts MigrateOptions, remoteAddr string) (string, error)

FormatCloneURL add authentication into remote URLs

func (NullDownloader) GetAllComments added in v1.17.0

func (n NullDownloader) GetAllComments(page, perPage int) ([]*Comment, bool, error)

GetAllComments returns paginated comments

func (NullDownloader) GetComments

func (n NullDownloader) GetComments(commentable Commentable) ([]*Comment, bool, error)

GetComments returns comments of an issue or PR

func (NullDownloader) GetIssues

func (n NullDownloader) GetIssues(page, perPage int) ([]*Issue, bool, error)

GetIssues returns issues according start and limit

func (NullDownloader) GetLabels

func (n NullDownloader) GetLabels() ([]*Label, error)

GetLabels returns labels

func (NullDownloader) GetMilestones

func (n NullDownloader) GetMilestones() ([]*Milestone, error)

GetMilestones returns milestones

func (NullDownloader) GetPullRequests

func (n NullDownloader) GetPullRequests(page, perPage int) ([]*PullRequest, bool, error)

GetPullRequests returns pull requests according page and perPage

func (NullDownloader) GetReleases

func (n NullDownloader) GetReleases() ([]*Release, error)

GetReleases returns releases

func (NullDownloader) GetRepoInfo

func (n NullDownloader) GetRepoInfo() (*Repository, error)

GetRepoInfo returns a repository information

func (NullDownloader) GetReviews

func (n NullDownloader) GetReviews(reviewable Reviewable) ([]*Review, error)

GetReviews returns pull requests review

func (NullDownloader) GetTopics

func (n NullDownloader) GetTopics() ([]string, error)

GetTopics return repository topics

func (NullDownloader) SetContext

func (n NullDownloader) SetContext(_ context.Context)

SetContext set context

func (NullDownloader) SupportGetRepoComments

func (n NullDownloader) SupportGetRepoComments() bool

SupportGetRepoComments return true if it supports get repo comments

type PullRequest

type PullRequest struct {
	Number         int64
	Title          string
	PosterName     string `yaml:"poster_name"`
	PosterID       int64  `yaml:"poster_id"`
	PosterEmail    string `yaml:"poster_email"`
	Content        string
	Milestone      string
	State          string
	Created        time.Time
	Updated        time.Time
	Closed         *time.Time
	Labels         []*Label
	PatchURL       string `yaml:"patch_url"` // SECURITY: This must be safe to download directly from
	Merged         bool
	MergedTime     *time.Time `yaml:"merged_time"`
	MergeCommitSHA string     `yaml:"merge_commit_sha"`
	Head           PullRequestBranch
	Base           PullRequestBranch
	Assignees      []string
	IsLocked       bool `yaml:"is_locked"`
	Reactions      []*Reaction
	ForeignIndex   int64
	Context        DownloaderContext `yaml:"-"`
	EnsuredSafe    bool              `yaml:"ensured_safe"`
}

PullRequest defines a standard pull request information

func (*PullRequest) GetContext added in v1.17.0

func (p *PullRequest) GetContext() DownloaderContext

func (*PullRequest) GetExternalID added in v1.17.0

func (p *PullRequest) GetExternalID() int64

ExternalID ExternalUserMigrated interface

func (*PullRequest) GetExternalName added in v1.17.0

func (p *PullRequest) GetExternalName() string

GetExternalName ExternalUserMigrated interface

func (*PullRequest) GetForeignIndex added in v1.17.0

func (p *PullRequest) GetForeignIndex() int64

func (PullRequest) GetGitRefName

func (p PullRequest) GetGitRefName() string

GetGitRefName returns pull request relative path to head

func (*PullRequest) GetLocalIndex added in v1.17.0

func (p *PullRequest) GetLocalIndex() int64

func (*PullRequest) IsForkPullRequest

func (p *PullRequest) IsForkPullRequest() bool

IsForkPullRequest returns true if the pull request from a forked repository but not the same repository

type PullRequestBranch

type PullRequestBranch struct {
	CloneURL  string `yaml:"clone_url"` // SECURITY: This must be safe to download from
	Ref       string // SECURITY: this must be a git.IsValidRefPattern
	SHA       string // SECURITY: this must be a git.IsValidSHAPattern
	RepoName  string `yaml:"repo_name"`
	OwnerName string `yaml:"owner_name"`
}

PullRequestBranch represents a pull request branch

func (PullRequestBranch) RepoPath

func (p PullRequestBranch) RepoPath() string

RepoPath returns pull request repo path

type Reaction

type Reaction struct {
	UserID   int64  `yaml:"user_id" json:"user_id"`
	UserName string `yaml:"user_name" json:"user_name"`
	Content  string `json:"content"`
}

Reaction represents a reaction to an issue/pr/comment.

func (*Reaction) GetExternalID added in v1.17.0

func (r *Reaction) GetExternalID() int64

GetExternalID ExternalUserMigrated interface

func (*Reaction) GetExternalName added in v1.17.0

func (r *Reaction) GetExternalName() string

GetExternalName ExternalUserMigrated interface

type Release

type Release struct {
	TagName         string `yaml:"tag_name"`         // SECURITY: This must pass git.IsValidRefPattern
	TargetCommitish string `yaml:"target_commitish"` // SECURITY: This must pass git.IsValidRefPattern
	Name            string
	Body            string
	Draft           bool
	Prerelease      bool
	PublisherID     int64  `yaml:"publisher_id"`
	PublisherName   string `yaml:"publisher_name"`
	PublisherEmail  string `yaml:"publisher_email"`
	Assets          []*ReleaseAsset
	Created         time.Time
	Published       time.Time
}

Release represents a release

func (*Release) GetExternalID added in v1.17.0

func (r *Release) GetExternalID() int64

GetExternalID ExternalUserMigrated interface

func (*Release) GetExternalName added in v1.17.0

func (r *Release) GetExternalName() string

GetExternalName ExternalUserMigrated interface

type ReleaseAsset

type ReleaseAsset struct {
	ID            int64
	Name          string
	ContentType   *string `yaml:"content_type"`
	Size          *int
	DownloadCount *int `yaml:"download_count"`
	Created       time.Time
	Updated       time.Time

	DownloadURL *string `yaml:"download_url"` // SECURITY: It is the responsibility of downloader to make sure this is safe
	// if DownloadURL is nil, the function should be invoked
	DownloadFunc func() (io.ReadCloser, error) `yaml:"-"` // SECURITY: It is the responsibility of downloader to make sure this is safe
}

ReleaseAsset represents a release asset

type Repository

type Repository struct {
	Name          string
	Owner         string
	IsPrivate     bool `yaml:"is_private"`
	IsMirror      bool `yaml:"is_mirror"`
	Description   string
	CloneURL      string `yaml:"clone_url"` // SECURITY: This must be checked to ensure that is safe to be used
	OriginalURL   string `yaml:"original_url"`
	DefaultBranch string
}

Repository defines a standard repository information

type RetryDownloader

type RetryDownloader struct {
	Downloader

	RetryTimes int // the total execute times
	RetryDelay int // time to delay seconds
	// contains filtered or unexported fields
}

RetryDownloader retry the downloads

func NewRetryDownloader

func NewRetryDownloader(ctx context.Context, downloader Downloader, retryTimes, retryDelay int) *RetryDownloader

NewRetryDownloader creates a retry downloader

func (*RetryDownloader) GetComments

func (d *RetryDownloader) GetComments(commentable Commentable) ([]*Comment, bool, error)

GetComments returns a repository's comments with retry

func (*RetryDownloader) GetIssues

func (d *RetryDownloader) GetIssues(page, perPage int) ([]*Issue, bool, error)

GetIssues returns a repository's issues with retry

func (*RetryDownloader) GetLabels

func (d *RetryDownloader) GetLabels() ([]*Label, error)

GetLabels returns a repository's labels with retry

func (*RetryDownloader) GetMilestones

func (d *RetryDownloader) GetMilestones() ([]*Milestone, error)

GetMilestones returns a repository's milestones with retry

func (*RetryDownloader) GetPullRequests

func (d *RetryDownloader) GetPullRequests(page, perPage int) ([]*PullRequest, bool, error)

GetPullRequests returns a repository's pull requests with retry

func (*RetryDownloader) GetReleases

func (d *RetryDownloader) GetReleases() ([]*Release, error)

GetReleases returns a repository's releases with retry

func (*RetryDownloader) GetRepoInfo

func (d *RetryDownloader) GetRepoInfo() (*Repository, error)

GetRepoInfo returns a repository information with retry

func (*RetryDownloader) GetReviews

func (d *RetryDownloader) GetReviews(reviewable Reviewable) ([]*Review, error)

GetReviews returns pull requests reviews

func (*RetryDownloader) GetTopics

func (d *RetryDownloader) GetTopics() ([]string, error)

GetTopics returns a repository's topics with retry

func (*RetryDownloader) SetContext

func (d *RetryDownloader) SetContext(ctx context.Context)

SetContext set context

type Review

type Review struct {
	ID           int64
	IssueIndex   int64  `yaml:"issue_index"`
	ReviewerID   int64  `yaml:"reviewer_id"`
	ReviewerName string `yaml:"reviewer_name"`
	Official     bool
	CommitID     string `yaml:"commit_id"`
	Content      string
	CreatedAt    time.Time `yaml:"created_at"`
	State        string    // PENDING, APPROVED, REQUEST_CHANGES, or COMMENT
	Comments     []*ReviewComment
}

Review is a standard review information

func (*Review) GetExternalID added in v1.17.0

func (r *Review) GetExternalID() int64

GetExternalID ExternalUserMigrated interface

func (*Review) GetExternalName added in v1.17.0

func (r *Review) GetExternalName() string

GetExternalName ExternalUserMigrated interface

type ReviewComment

type ReviewComment struct {
	ID        int64
	InReplyTo int64 `yaml:"in_reply_to"`
	Content   string
	TreePath  string `yaml:"tree_path"`
	DiffHunk  string `yaml:"diff_hunk"`
	Position  int
	Line      int
	CommitID  string `yaml:"commit_id"`
	PosterID  int64  `yaml:"poster_id"`
	Reactions []*Reaction
	CreatedAt time.Time `yaml:"created_at"`
	UpdatedAt time.Time `yaml:"updated_at"`
}

ReviewComment represents a review comment

type Reviewable added in v1.17.0

type Reviewable interface {
	GetLocalIndex() int64

	// GetForeignIndex presents the foreign index, which could be misused:
	// For example, if there are 2 Gitea sites: site-A exports a dataset, then site-B imports it:
	// * if site-A exports files by using its LocalIndex
	// * from site-A's view, LocalIndex is site-A's IssueIndex while ForeignIndex is site-B's IssueIndex
	// * but from site-B's view, LocalIndex is site-B's IssueIndex while ForeignIndex is site-A's IssueIndex
	//
	// So the exporting/importing must be paired, but the meaning of them looks confusing then:
	// * either site-A and site-B both use LocalIndex during dumping/restoring
	// * or site-A and site-B both use ForeignIndex
	GetForeignIndex() int64
}

Reviewable can be reviewed

type Uploader

type Uploader interface {
	MaxBatchInsertSize(tp string) int
	CreateRepo(repo *Repository, opts MigrateOptions) error
	CreateTopics(topic ...string) error
	CreateMilestones(milestones ...*Milestone) error
	CreateReleases(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
	Finish() error
	Close()
}

Uploader uploads all the information of one repository

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL