summaryrefslogtreecommitdiffstats
path: root/modules/migration
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2023-02-07 09:18:52 +0800
committerGitHub <noreply@github.com>2023-02-07 09:18:52 +0800
commitd5fa2e7510844ad092804b7c11bf6847f7c4e45d (patch)
tree0b5dcd61f279db9474bc33f684a6cb274dde864a /modules/migration
parent3ae78bc0a9408ca2b8ed5a1ffafdcf66639449e5 (diff)
downloadgitea-d5fa2e7510844ad092804b7c11bf6847f7c4e45d.tar.gz
gitea-d5fa2e7510844ad092804b7c11bf6847f7c4e45d.zip
Fix restore repo bug, clarify the problem of ForeignIndex (#22776)
Fix #22581 TLDR: #18446 made a mess with ForeignIndex and triggered a design flaw/bug of #16356, then a quick patch #21271 helped #18446, then the the bug was re-triggered by #21721 . Related: * #16356 * BasicIssueContext https://github.com/go-gitea/gitea/pull/16356/files#diff-7938eb670d42a5ead6b08121e16aa4537a4d716c1cf37923c70470020fb9d036R16-R27 * #18446 * If some issues were dumped without ForeignIndex, then they would be imported as ForeignIndex=0 https://github.com/go-gitea/gitea/pull/18446/files#diff-1624a3e715d8fc70edf2db1630642b7d6517f8c359cc69d58c3958b34ba4ce5eR38-R39 * #21271 * It patched the above bug (somewhat), made the issues without ForeignIndex could have the same value as LocalIndex * #21721 * It re-triggered the zero-ForeignIndex bug. ps: I am not sure whether the changes in `GetForeignIndex` are ideal (at least, now it has almost the same behavior as BasicIssueContext in #16356), it's just a quick fix. Feel free to edit on this PR directly or replace it. Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'modules/migration')
-rw-r--r--modules/migration/comment.go3
-rw-r--r--modules/migration/issue.go13
-rw-r--r--modules/migration/review.go12
3 files changed, 23 insertions, 5 deletions
diff --git a/modules/migration/comment.go b/modules/migration/comment.go
index f994e972ed..92ce30e302 100644
--- a/modules/migration/comment.go
+++ b/modules/migration/comment.go
@@ -8,8 +8,7 @@ import "time"
// Commentable can be commented upon
type Commentable interface {
- GetLocalIndex() int64
- GetForeignIndex() int64
+ Reviewable
GetContext() DownloaderContext
}
diff --git a/modules/migration/issue.go b/modules/migration/issue.go
index 7cb9f84b0d..3d1d1b4e0d 100644
--- a/modules/migration/issue.go
+++ b/modules/migration/issue.go
@@ -34,6 +34,15 @@ func (issue *Issue) GetExternalName() string { return issue.PosterName }
// GetExternalID ExternalUserMigrated interface
func (issue *Issue) GetExternalID() int64 { return issue.PosterID }
-func (issue *Issue) GetLocalIndex() int64 { return issue.Number }
-func (issue *Issue) GetForeignIndex() int64 { return issue.ForeignIndex }
+func (issue *Issue) GetLocalIndex() int64 { return issue.Number }
+
+func (issue *Issue) GetForeignIndex() int64 {
+ // see the comment of Reviewable.GetForeignIndex
+ // if there is no ForeignIndex, then use LocalIndex
+ if issue.ForeignIndex == 0 {
+ return issue.Number
+ }
+ return issue.ForeignIndex
+}
+
func (issue *Issue) GetContext() DownloaderContext { return issue.Context }
diff --git a/modules/migration/review.go b/modules/migration/review.go
index a420c130c7..79e821b2e1 100644
--- a/modules/migration/review.go
+++ b/modules/migration/review.go
@@ -8,6 +8,16 @@ import "time"
// Reviewable can be reviewed
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
}
@@ -37,7 +47,7 @@ type Review struct {
// GetExternalName ExternalUserMigrated interface
func (r *Review) GetExternalName() string { return r.ReviewerName }
-// ExternalID ExternalUserMigrated interface
+// GetExternalID ExternalUserMigrated interface
func (r *Review) GetExternalID() int64 { return r.ReviewerID }
// ReviewComment represents a review comment