@@ -46,6 +46,7 @@ type GiteaLocalUploader struct {
46
46
issues map [int64 ]* models.Issue
47
47
gitRepo * git.Repository
48
48
prHeadCache map [string ]struct {}
49
+ sameApp bool
49
50
userMap map [int64 ]int64 // external user id mapping to user id
50
51
prCache map [int64 ]* models.PullRequest
51
52
gitServiceType structs.GitServiceType
@@ -128,6 +129,7 @@ func (g *GiteaLocalUploader) CreateRepo(repo *base.Repository, opts base.Migrate
128
129
MirrorInterval : opts .MirrorInterval ,
129
130
}, NewMigrationHTTPTransport ())
130
131
132
+ g .sameApp = strings .HasPrefix (repo .OriginalURL , setting .AppURL )
131
133
g .repo = r
132
134
if err != nil {
133
135
return err
@@ -256,7 +258,7 @@ func (g *GiteaLocalUploader) CreateReleases(releases ...*base.Release) error {
256
258
CreatedUnix : timeutil .TimeStamp (release .Created .Unix ()),
257
259
}
258
260
259
- if err := g .remapExternalUser (release , & rel ); err != nil {
261
+ if err := g .remapUser (release , & rel ); err != nil {
260
262
return err
261
263
}
262
264
@@ -373,7 +375,7 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error {
373
375
UpdatedUnix : timeutil .TimeStamp (issue .Updated .Unix ()),
374
376
}
375
377
376
- if err := g .remapExternalUser (issue , & is ); err != nil {
378
+ if err := g .remapUser (issue , & is ); err != nil {
377
379
return err
378
380
}
379
381
@@ -386,7 +388,7 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error {
386
388
Type : reaction .Content ,
387
389
CreatedUnix : timeutil .TimeStampNow (),
388
390
}
389
- if err := g .remapExternalUser (reaction , & res ); err != nil {
391
+ if err := g .remapUser (reaction , & res ); err != nil {
390
392
return err
391
393
}
392
394
is .Reactions = append (is .Reactions , & res )
@@ -437,7 +439,7 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
437
439
UpdatedUnix : timeutil .TimeStamp (comment .Updated .Unix ()),
438
440
}
439
441
440
- if err := g .remapExternalUser (comment , & cm ); err != nil {
442
+ if err := g .remapUser (comment , & cm ); err != nil {
441
443
return err
442
444
}
443
445
@@ -447,7 +449,7 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
447
449
Type : reaction .Content ,
448
450
CreatedUnix : timeutil .TimeStampNow (),
449
451
}
450
- if err := g .remapExternalUser (reaction , & res ); err != nil {
452
+ if err := g .remapUser (reaction , & res ); err != nil {
451
453
return err
452
454
}
453
455
cm .Reactions = append (cm .Reactions , & res )
@@ -471,7 +473,7 @@ func (g *GiteaLocalUploader) CreatePullRequests(prs ...*base.PullRequest) error
471
473
return err
472
474
}
473
475
474
- if err := g .remapExternalUser (pr , gpr .Issue ); err != nil {
476
+ if err := g .remapUser (pr , gpr .Issue ); err != nil {
475
477
return err
476
478
}
477
479
@@ -626,7 +628,7 @@ func (g *GiteaLocalUploader) newPullRequest(pr *base.PullRequest) (*models.PullR
626
628
UpdatedUnix : timeutil .TimeStamp (pr .Updated .Unix ()),
627
629
}
628
630
629
- if err := g .remapExternalUser (pr , & issue ); err != nil {
631
+ if err := g .remapUser (pr , & issue ); err != nil {
630
632
return nil , err
631
633
}
632
634
@@ -636,7 +638,7 @@ func (g *GiteaLocalUploader) newPullRequest(pr *base.PullRequest) (*models.PullR
636
638
Type : reaction .Content ,
637
639
CreatedUnix : timeutil .TimeStampNow (),
638
640
}
639
- if err := g .remapExternalUser (reaction , & res ); err != nil {
641
+ if err := g .remapUser (reaction , & res ); err != nil {
640
642
return nil , err
641
643
}
642
644
issue .Reactions = append (issue .Reactions , & res )
@@ -710,7 +712,7 @@ func (g *GiteaLocalUploader) CreateReviews(reviews ...*base.Review) error {
710
712
UpdatedUnix : timeutil .TimeStamp (review .CreatedAt .Unix ()),
711
713
}
712
714
713
- if err := g .remapExternalUser (review , & cm ); err != nil {
715
+ if err := g .remapUser (review , & cm ); err != nil {
714
716
return err
715
717
}
716
718
@@ -773,7 +775,7 @@ func (g *GiteaLocalUploader) CreateReviews(reviews ...*base.Review) error {
773
775
UpdatedUnix : timeutil .TimeStamp (comment .UpdatedAt .Unix ()),
774
776
}
775
777
776
- if err := g .remapExternalUser (review , & c ); err != nil {
778
+ if err := g .remapUser (review , & c ); err != nil {
777
779
return err
778
780
}
779
781
@@ -816,23 +818,52 @@ func (g *GiteaLocalUploader) Finish() error {
816
818
return repo_model .UpdateRepositoryCols (g .repo , "status" )
817
819
}
818
820
819
- func (g * GiteaLocalUploader ) remapExternalUser (source user_model.ExternalUserMigrated , target user_model.ExternalUserRemappable ) (err error ) {
821
+ func (g * GiteaLocalUploader ) remapUser (source user_model.ExternalUserMigrated , target user_model.ExternalUserRemappable ) error {
822
+ var userid int64
823
+ var err error
824
+ if g .sameApp {
825
+ userid , err = g .remapLocalUser (source , target )
826
+ } else {
827
+ userid , err = g .remapExternalUser (source , target )
828
+ }
829
+
830
+ if err != nil {
831
+ return err
832
+ }
833
+
834
+ if userid > 0 {
835
+ return target .RemapExternalUser ("" , 0 , userid )
836
+ }
837
+ return target .RemapExternalUser (source .GetExternalName (), source .GetExternalID (), g .doer .ID )
838
+ }
839
+
840
+ func (g * GiteaLocalUploader ) remapLocalUser (source user_model.ExternalUserMigrated , target user_model.ExternalUserRemappable ) (int64 , error ) {
820
841
userid , ok := g .userMap [source .GetExternalID ()]
821
- tp := g .gitServiceType .Name ()
822
- if ! ok && tp != "" {
823
- userid , err = user_model .GetUserIDByExternalUserID (tp , fmt .Sprintf ("%d" , source .GetExternalID ()))
842
+ if ! ok {
843
+ name , err := user_model .GetUserNameByID (g .ctx , source .GetExternalID ())
824
844
if err != nil {
825
- log . Error ( "GetUserIDByExternalUserID: %v" , err )
845
+ return 0 , err
826
846
}
827
- if userid > 0 {
828
- g .userMap [source .GetExternalID ()] = userid
847
+ // let's not reuse an ID when the user was deleted or has a different user name
848
+ if name != source .GetExternalName () {
849
+ userid = 0
850
+ } else {
851
+ userid = source .GetExternalID ()
829
852
}
853
+ g .userMap [source .GetExternalID ()] = userid
830
854
}
855
+ return userid , nil
856
+ }
831
857
832
- if userid > 0 {
833
- err = target .RemapExternalUser ("" , 0 , userid )
834
- } else {
835
- err = target .RemapExternalUser (source .GetExternalName (), source .GetExternalID (), g .doer .ID )
858
+ func (g * GiteaLocalUploader ) remapExternalUser (source user_model.ExternalUserMigrated , target user_model.ExternalUserRemappable ) (userid int64 , err error ) {
859
+ userid , ok := g .userMap [source .GetExternalID ()]
860
+ if ! ok {
861
+ userid , err = user_model .GetUserIDByExternalUserID (g .gitServiceType .Name (), fmt .Sprintf ("%d" , source .GetExternalID ()))
862
+ if err != nil {
863
+ log .Error ("GetUserIDByExternalUserID: %v" , err )
864
+ return 0 , err
865
+ }
866
+ g .userMap [source .GetExternalID ()] = userid
836
867
}
837
- return
868
+ return userid , nil
838
869
}
0 commit comments