Skip to content

Commit bf7b43a

Browse files
authored
Merge pull request #9 from zeripath/lunny/release_commit
Fix go-gitea#13255
2 parents c808a5d + 0ae7bd2 commit bf7b43a

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

models/migrations/v156.go

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"strings"
1111

1212
"code.gitea.io/gitea/modules/git"
13+
"code.gitea.io/gitea/modules/log"
1314
"code.gitea.io/gitea/modules/setting"
1415

1516
"xorm.io/xorm"
@@ -35,9 +36,10 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error {
3536
}
3637

3738
type Repository struct {
38-
ID int64
39-
OwnerID int64
40-
Name string
39+
ID int64
40+
OwnerID int64
41+
OwnerName string
42+
Name string
4143
}
4244

4345
type User struct {
@@ -50,13 +52,10 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error {
5052
sess := x.NewSession()
5153
defer sess.Close()
5254

53-
54-
5555
var (
5656
gitRepoCache = make(map[int64]*git.Repository)
5757
gitRepo *git.Repository
5858
repoCache = make(map[int64]*Repository)
59-
userCache = make(map[int64]*User)
6059
ok bool
6160
err error
6261
)
@@ -90,26 +89,32 @@ func fixPublisherIDforTagReleases(x *xorm.Engine) error {
9089
if err != nil {
9190
return err
9291
} 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
9495
}
9596

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+
}
98103

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+
}
107107
}
108108

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
110115
}
111116

112-
gitRepo, err = git.OpenRepository(repoPath(user.Name, repo.Name))
117+
gitRepo, err = git.OpenRepository(repoPath(repo.OwnerName, repo.Name))
113118
if err != nil {
114119
return err
115120
}

0 commit comments

Comments
 (0)