@@ -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