Skip to content

Commit 229b20b

Browse files
committed
Merge branch 'main' into lunny/refactor_compare
2 parents a2c8e9c + 69700f9 commit 229b20b

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

services/migrations/migrate.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
repo_model "code.gitea.io/gitea/models/repo"
1717
system_model "code.gitea.io/gitea/models/system"
1818
user_model "code.gitea.io/gitea/models/user"
19+
"code.gitea.io/gitea/modules/container"
1920
"code.gitea.io/gitea/modules/git"
2021
"code.gitea.io/gitea/modules/hostmatcher"
2122
"code.gitea.io/gitea/modules/log"
@@ -327,6 +328,9 @@ func migrateRepository(ctx context.Context, doer *user_model.User, downloader ba
327328
messenger("repo.migrate.migrating_issues")
328329
issueBatchSize := uploader.MaxBatchInsertSize("issue")
329330

331+
// because when the migrating is running, some issues maybe removed, so after the next page
332+
// some of issue maybe duplicated, so we need to record the inserted issue indexes
333+
mapInsertedIssueIndexes := container.Set[int64]{}
330334
for i := 1; ; i++ {
331335
issues, isEnd, err := downloader.GetIssues(ctx, i, issueBatchSize)
332336
if err != nil {
@@ -336,6 +340,14 @@ func migrateRepository(ctx context.Context, doer *user_model.User, downloader ba
336340
log.Warn("migrating issues is not supported, ignored")
337341
break
338342
}
343+
for i := 0; i < len(issues); i++ {
344+
if mapInsertedIssueIndexes.Contains(issues[i].Number) {
345+
issues = append(issues[:i], issues[i+1:]...)
346+
i--
347+
continue
348+
}
349+
mapInsertedIssueIndexes.Add(issues[i].Number)
350+
}
339351

340352
if err := uploader.CreateIssues(ctx, issues...); err != nil {
341353
return err
@@ -381,6 +393,7 @@ func migrateRepository(ctx context.Context, doer *user_model.User, downloader ba
381393
log.Trace("migrating pull requests and comments")
382394
messenger("repo.migrate.migrating_pulls")
383395
prBatchSize := uploader.MaxBatchInsertSize("pullrequest")
396+
mapInsertedPRIndexes := container.Set[int64]{}
384397
for i := 1; ; i++ {
385398
prs, isEnd, err := downloader.GetPullRequests(ctx, i, prBatchSize)
386399
if err != nil {
@@ -390,6 +403,14 @@ func migrateRepository(ctx context.Context, doer *user_model.User, downloader ba
390403
log.Warn("migrating pull requests is not supported, ignored")
391404
break
392405
}
406+
for i := 0; i < len(prs); i++ {
407+
if mapInsertedPRIndexes.Contains(prs[i].Number) {
408+
prs = append(prs[:i], prs[i+1:]...)
409+
i--
410+
continue
411+
}
412+
mapInsertedPRIndexes.Add(prs[i].Number)
413+
}
393414

394415
if err := uploader.CreatePullRequests(ctx, prs...); err != nil {
395416
return err

0 commit comments

Comments
 (0)