mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-26 06:16:56 +09:00
Supports migrating from Gitea-compatible forges like Forgejo and fixes many migration bugs. 1. Pre-release and `+gitea-` suffixed server versions no longer drop reviews, reactions and pagination. 2. Review states, dismissals, scoped and archived labels and merge bases are migrated. 3. Disabled units, external trackers, unavailable release assets, and GitLab confidential issues and internal notes are skipped. 4. Credentials are only sent to the source host, and `Retry-After` rate limits are waited out. 5. GitHub migrations of only issues or pull requests, basic auth clones and dismissed reviews work again. 6. The API returns 404 for releases of a disabled unit and shows migrated authors as mannequins, replacing the never populated `original_author` and `original_author_id` fields. Fixes: https://github.com/go-gitea/gitea/issues/19533 Fixes: https://github.com/go-gitea/gitea/issues/35885 Fixes: https://github.com/go-gitea/gitea/issues/18275 Fixes: https://github.com/go-gitea/gitea/issues/35069 Fixes: https://github.com/go-gitea/gitea/issues/17763 Fixes: https://github.com/go-gitea/gitea/issues/39548 Co-authored-by: bircni <bircni@icloud.com>
71 lines
2.3 KiB
Go
71 lines
2.3 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package migration
|
|
|
|
import "time"
|
|
|
|
// Reviewable can be reviewed
|
|
type Reviewable interface {
|
|
GetLocalIndex() int64
|
|
GetContext() DownloaderContext
|
|
|
|
// 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
|
|
}
|
|
|
|
// enumerate all review states
|
|
const (
|
|
ReviewStatePending = "PENDING"
|
|
ReviewStateApproved = "APPROVED"
|
|
ReviewStateChangesRequested = "CHANGES_REQUESTED"
|
|
ReviewStateCommented = "COMMENTED"
|
|
ReviewStateRequestReview = "REQUEST_REVIEW"
|
|
)
|
|
|
|
// Review is a standard review information
|
|
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
|
|
Dismissed bool
|
|
Comments []*ReviewComment
|
|
}
|
|
|
|
// GetExternalName ExternalUserMigrated interface
|
|
func (r *Review) GetExternalName() string { return r.ReviewerName }
|
|
|
|
// GetExternalID ExternalUserMigrated interface
|
|
func (r *Review) GetExternalID() int64 { return r.ReviewerID }
|
|
|
|
// ReviewComment represents a review comment
|
|
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"`
|
|
Resolved bool // the conversation of this (first) comment is resolved
|
|
Reactions []*Reaction
|
|
CreatedAt time.Time `yaml:"created_at"`
|
|
UpdatedAt time.Time `yaml:"updated_at"`
|
|
}
|