5
5
package migrations
6
6
7
7
import (
8
+ "fmt"
9
+
8
10
"code.gitea.io/git"
9
11
"code.gitea.io/gitea/models"
12
+
10
13
"github.com/go-xorm/xorm"
11
14
)
12
15
@@ -18,6 +21,17 @@ func fixReleaseSha1OnReleaseTable(x *xorm.Engine) error {
18
21
TagName string
19
22
}
20
23
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
+
21
35
// Update release sha1
22
36
const batchSize = 100
23
37
sess := x .NewSession ()
@@ -27,7 +41,8 @@ func fixReleaseSha1OnReleaseTable(x *xorm.Engine) error {
27
41
err error
28
42
count int
29
43
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 )
31
46
)
32
47
33
48
if err = sess .Begin (); err != nil {
@@ -48,27 +63,46 @@ func fixReleaseSha1OnReleaseTable(x *xorm.Engine) error {
48
63
if ! ok {
49
64
repo , ok := repoCache [release .RepoID ]
50
65
if ! ok {
51
- repo , err = models .GetRepositoryByID (release .RepoID )
66
+ repo = new (Repository )
67
+ has , err := sess .ID (release .RepoID ).Get (repo )
52
68
if err != nil {
53
69
return err
70
+ } else if ! has {
71
+ return fmt .Errorf ("Repository %d is not exist" , release .RepoID )
54
72
}
73
+
55
74
repoCache [release .RepoID ] = repo
56
75
}
57
76
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 ))
59
91
if err != nil {
60
92
return err
61
93
}
62
94
gitRepoCache [release .RepoID ] = gitRepo
63
95
}
64
96
65
97
release .Sha1 , err = gitRepo .GetTagCommitID (release .TagName )
66
- if err != nil {
98
+ if err != nil && ! git . IsErrNotExist ( err ) {
67
99
return err
68
100
}
69
101
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
+ }
72
106
}
73
107
74
108
count ++
0 commit comments