@@ -10,6 +10,7 @@ import (
10
10
"strings"
11
11
12
12
"code.gitea.io/gitea/modules/git"
13
+ "code.gitea.io/gitea/modules/log"
13
14
"code.gitea.io/gitea/modules/setting"
14
15
15
16
"xorm.io/xorm"
@@ -35,9 +36,10 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error {
35
36
}
36
37
37
38
type Repository struct {
38
- ID int64
39
- OwnerID int64
40
- Name string
39
+ ID int64
40
+ OwnerID int64
41
+ OwnerName string
42
+ Name string
41
43
}
42
44
43
45
type User struct {
@@ -50,13 +52,10 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error {
50
52
sess := x .NewSession ()
51
53
defer sess .Close ()
52
54
53
-
54
-
55
55
var (
56
56
gitRepoCache = make (map [int64 ]* git.Repository )
57
57
gitRepo * git.Repository
58
58
repoCache = make (map [int64 ]* Repository )
59
- userCache = make (map [int64 ]* User )
60
59
ok bool
61
60
err error
62
61
)
@@ -90,26 +89,32 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error {
90
89
if err != nil {
91
90
return err
92
91
} else if ! has {
93
- return fmt .Errorf ("Repository %d is not exist" , release .RepoID )
92
+ log .Warn ("Release[%d] is orphaned and refers to non-existing repository %d" , release .ID , release .RepoID )
93
+ log .Warn ("This release should be deleted" )
94
+ continue
94
95
}
95
96
96
- repoCache [release .RepoID ] = repo
97
- }
97
+ if repo .OwnerName == "" {
98
+ // v120.go migration may not have been run correctly - we'll just replicate it here
99
+ // because this appears to be a common-ish problem.
100
+ if _ , err := sess .Exec ("UPDATE repository SET owner_name = (SELECT name FROM `user` WHERE `user`.id = repository.owner_id)" ); err != nil {
101
+ return err
102
+ }
98
103
99
- user , ok := userCache [repo .OwnerID ]
100
- if ! ok {
101
- user = new (User )
102
- has , err := sess .ID (repo .OwnerID ).Get (user )
103
- if err != nil {
104
- return err
105
- } else if ! has {
106
- return fmt .Errorf ("User %d is not exist" , repo .OwnerID )
104
+ if _ , err := sess .ID (release .RepoID ).Get (repo ); err != nil {
105
+ return err
106
+ }
107
107
}
108
108
109
- userCache [repo .OwnerID ] = user
109
+ repoCache [release .RepoID ] = repo
110
+ }
111
+
112
+ if repo .OwnerName == "" {
113
+ log .Warn ("Release[%d] refers to Repo[%d] Name: %s with OwnerID: %d but does not have OwnerName set" , release .ID , release .RepoID , repo .Name , repo .OwnerID )
114
+ continue
110
115
}
111
116
112
- gitRepo , err = git .OpenRepository (repoPath (user . Name , repo .Name ))
117
+ gitRepo , err = git .OpenRepository (repoPath (repo . OwnerName , repo .Name ))
113
118
if err != nil {
114
119
return err
115
120
}
0 commit comments