Skip to content

Commit e644cc9

Browse files
lunnywolfogre
andauthored
Fix wrong xorm get usage on migration (#27111)
Fix the bug on try.gitea.io ```log 2023/09/18 01:48:41 ...ations/migrations.go:635:Migrate() [I] Migration[276]: Add RemoteAddress to mirrors 2023/09/18 01:48:41 routers/common/db.go:34:InitDBEngine() [E] ORM engine initialization attempt #7/10 failed. Error: migrate: migration[276]: Add RemoteAddress to mirrors failed: exit status 128 - fatal: not a git repository (or any parent up to mount point /) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). - fatal: not a git repository (or any parent up to mount point /) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). ``` Caused by #26952 --------- Co-authored-by: Jason Song <[email protected]>
1 parent 323135b commit e644cc9

File tree

1 file changed

+14
-19
lines changed

1 file changed

+14
-19
lines changed

models/migrations/v1_21/v276.go

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ func migratePullMirrors(x *xorm.Engine) error {
4141
ID int64 `xorm:"pk autoincr"`
4242
RepoID int64 `xorm:"INDEX"`
4343
RemoteAddress string `xorm:"VARCHAR(2048)"`
44+
RepoOwner string
45+
RepoName string
4446
}
4547

4648
sess := x.NewSession()
@@ -59,7 +61,9 @@ func migratePullMirrors(x *xorm.Engine) error {
5961

6062
for {
6163
var mirrors []Mirror
62-
if err := sess.Limit(limit, start).Find(&mirrors); err != nil {
64+
if err := sess.Select("mirror.id, mirror.repo_id, mirror.remote_address, repository.owner_name as repo_owner, repository.name as repo_name").
65+
Join("INNER", "repository", "repository.id = mirror.repo_id").
66+
Limit(limit, start).Find(&mirrors); err != nil {
6367
return err
6468
}
6569

@@ -69,7 +73,7 @@ func migratePullMirrors(x *xorm.Engine) error {
6973
start += len(mirrors)
7074

7175
for _, m := range mirrors {
72-
remoteAddress, err := getRemoteAddress(sess, m.RepoID, "origin")
76+
remoteAddress, err := getRemoteAddress(m.RepoOwner, m.RepoName, "origin")
7377
if err != nil {
7478
return err
7579
}
@@ -100,6 +104,8 @@ func migratePushMirrors(x *xorm.Engine) error {
100104
RepoID int64 `xorm:"INDEX"`
101105
RemoteName string
102106
RemoteAddress string `xorm:"VARCHAR(2048)"`
107+
RepoOwner string
108+
RepoName string
103109
}
104110

105111
sess := x.NewSession()
@@ -118,7 +124,9 @@ func migratePushMirrors(x *xorm.Engine) error {
118124

119125
for {
120126
var mirrors []PushMirror
121-
if err := sess.Limit(limit, start).Find(&mirrors); err != nil {
127+
if err := sess.Select("push_mirror.id, push_mirror.repo_id, push_mirror.remote_name, push_mirror.remote_address, repository.owner_name as repo_owner, repository.name as repo_name").
128+
Join("INNER", "repository", "repository.id = push_mirror.repo_id").
129+
Limit(limit, start).Find(&mirrors); err != nil {
122130
return err
123131
}
124132

@@ -128,7 +136,7 @@ func migratePushMirrors(x *xorm.Engine) error {
128136
start += len(mirrors)
129137

130138
for _, m := range mirrors {
131-
remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RemoteName)
139+
remoteAddress, err := getRemoteAddress(m.RepoOwner, m.RepoName, m.RemoteName)
132140
if err != nil {
133141
return err
134142
}
@@ -153,25 +161,12 @@ func migratePushMirrors(x *xorm.Engine) error {
153161
return sess.Commit()
154162
}
155163

156-
func getRemoteAddress(sess *xorm.Session, repoID int64, remoteName string) (string, error) {
157-
var ownerName string
158-
var repoName string
159-
has, err := sess.
160-
Table("repository").
161-
Cols("owner_name", "lower_name").
162-
Where("id=?", repoID).
163-
Get(&ownerName, &repoName)
164-
if err != nil {
165-
return "", err
166-
} else if !has {
167-
return "", fmt.Errorf("repository [%v] not found", repoID)
168-
}
169-
164+
func getRemoteAddress(ownerName, repoName, remoteName string) (string, error) {
170165
repoPath := filepath.Join(setting.RepoRootPath, strings.ToLower(ownerName), strings.ToLower(repoName)+".git")
171166

172167
remoteURL, err := git.GetRemoteAddress(context.Background(), repoPath, remoteName)
173168
if err != nil {
174-
return "", err
169+
return "", fmt.Errorf("get remote %s's address of %s/%s failed: %v", remoteName, ownerName, repoName, err)
175170
}
176171

177172
u, err := giturl.Parse(remoteURL)

0 commit comments

Comments
 (0)