@@ -15,6 +15,7 @@ import (
1515 repo_model "code.gitea.io/gitea/models/repo"
1616 system_model "code.gitea.io/gitea/models/system"
1717 user_model "code.gitea.io/gitea/models/user"
18+ "code.gitea.io/gitea/modules/container"
1819 "code.gitea.io/gitea/modules/git"
1920 "code.gitea.io/gitea/modules/hostmatcher"
2021 "code.gitea.io/gitea/modules/log"
@@ -328,6 +329,9 @@ func migrateRepository(_ context.Context, doer *user_model.User, downloader base
328329 messenger ("repo.migrate.migrating_issues" )
329330 issueBatchSize := uploader .MaxBatchInsertSize ("issue" )
330331
332+ // because when the migrating is running, some issues maybe removed, so after the next page
333+ // some of issue maybe duplicated, so we need to record the inserted issue indexes
334+ mapInsertedIssueIndexes := container.Set [int64 ]{}
331335 for i := 1 ; ; i ++ {
332336 issues , isEnd , err := downloader .GetIssues (i , issueBatchSize )
333337 if err != nil {
@@ -337,6 +341,14 @@ func migrateRepository(_ context.Context, doer *user_model.User, downloader base
337341 log .Warn ("migrating issues is not supported, ignored" )
338342 break
339343 }
344+ for i := 0 ; i < len (issues ); i ++ {
345+ if mapInsertedIssueIndexes .Contains (issues [i ].Number ) {
346+ issues = append (issues [:i ], issues [i + 1 :]... )
347+ i --
348+ continue
349+ }
350+ mapInsertedIssueIndexes .Add (issues [i ].Number )
351+ }
340352
341353 if err := uploader .CreateIssues (issues ... ); err != nil {
342354 return err
@@ -382,6 +394,7 @@ func migrateRepository(_ context.Context, doer *user_model.User, downloader base
382394 log .Trace ("migrating pull requests and comments" )
383395 messenger ("repo.migrate.migrating_pulls" )
384396 prBatchSize := uploader .MaxBatchInsertSize ("pullrequest" )
397+ mapInsertedIssueIndexes := container.Set [int64 ]{}
385398 for i := 1 ; ; i ++ {
386399 prs , isEnd , err := downloader .GetPullRequests (i , prBatchSize )
387400 if err != nil {
@@ -391,6 +404,14 @@ func migrateRepository(_ context.Context, doer *user_model.User, downloader base
391404 log .Warn ("migrating pull requests is not supported, ignored" )
392405 break
393406 }
407+ for i := 0 ; i < len (prs ); i ++ {
408+ if mapInsertedIssueIndexes .Contains (prs [i ].Number ) {
409+ prs = append (prs [:i ], prs [i + 1 :]... )
410+ i --
411+ continue
412+ }
413+ mapInsertedIssueIndexes .Add (prs [i ].Number )
414+ }
394415
395416 if err := uploader .CreatePullRequests (prs ... ); err != nil {
396417 return err
0 commit comments