55package migrations
66
77import (
8+ "fmt"
9+
810 "code.gitea.io/git"
911 "code.gitea.io/gitea/models"
12+
1013 "github.com/go-xorm/xorm"
1114)
1215
@@ -18,6 +21,17 @@ func fixReleaseSha1OnReleaseTable(x *xorm.Engine) error {
1821 TagName string
1922 }
2023
24+ type Repository struct {
25+ ID int64
26+ OwnerID int64
27+ Name string
28+ }
29+
30+ type User struct {
31+ ID int64
32+ Name string
33+ }
34+
2135 // Update release sha1
2236 const batchSize = 100
2337 sess := x .NewSession ()
@@ -27,7 +41,8 @@ func fixReleaseSha1OnReleaseTable(x *xorm.Engine) error {
2741 err error
2842 count int
2943 gitRepoCache = make (map [int64 ]* git.Repository )
30- repoCache = make (map [int64 ]* models.Repository )
44+ repoCache = make (map [int64 ]* Repository )
45+ userCache = make (map [int64 ]* User )
3146 )
3247
3348 if err = sess .Begin (); err != nil {
@@ -48,27 +63,46 @@ func fixReleaseSha1OnReleaseTable(x *xorm.Engine) error {
4863 if ! ok {
4964 repo , ok := repoCache [release .RepoID ]
5065 if ! ok {
51- repo , err = models .GetRepositoryByID (release .RepoID )
66+ repo = new (Repository )
67+ has , err := sess .ID (release .RepoID ).Get (repo )
5268 if err != nil {
5369 return err
70+ } else if ! has {
71+ return fmt .Errorf ("Repository %d is not exist" , release .RepoID )
5472 }
73+
5574 repoCache [release .RepoID ] = repo
5675 }
5776
58- gitRepo , err = git .OpenRepository (repo .RepoPath ())
77+ user , ok := userCache [repo .OwnerID ]
78+ if ! ok {
79+ user = new (User )
80+ has , err := sess .ID (repo .OwnerID ).Get (user )
81+ if err != nil {
82+ return err
83+ } else if ! has {
84+ return fmt .Errorf ("User %d is not exist" , repo .OwnerID )
85+ }
86+
87+ userCache [repo .OwnerID ] = user
88+ }
89+
90+ gitRepo , err = git .OpenRepository (models .RepoPath (user .Name , repo .Name ))
5991 if err != nil {
6092 return err
6193 }
6294 gitRepoCache [release .RepoID ] = gitRepo
6395 }
6496
6597 release .Sha1 , err = gitRepo .GetTagCommitID (release .TagName )
66- if err != nil {
98+ if err != nil && ! git . IsErrNotExist ( err ) {
6799 return err
68100 }
69101
70- if _ , err = sess .ID (release .ID ).Cols ("sha1" ).Update (release ); err != nil {
71- return err
102+ if err == nil {
103+ if _ , err = sess .ID (release .ID ).Cols ("sha1" ).Update (release ); err != nil {
104+ return err
105+ }
72106 }
73107
74108 count ++
0 commit comments