From 62392883fb1cc74473231b57c730fdc2cf3dab08 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 18 Sep 2023 11:46:57 +0800 Subject: [PATCH 1/4] Fix wrong xomr get usage on migration --- models/migrations/v1_21/v276.go | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/models/migrations/v1_21/v276.go b/models/migrations/v1_21/v276.go index 8746c8851e63a..248c62a5b9012 100644 --- a/models/migrations/v1_21/v276.go +++ b/models/migrations/v1_21/v276.go @@ -5,7 +5,6 @@ package v1_21 //nolint import ( "context" - "fmt" "path/filepath" "strings" @@ -41,6 +40,8 @@ func migratePullMirrors(x *xorm.Engine) error { ID int64 `xorm:"pk autoincr"` RepoID int64 `xorm:"INDEX"` RemoteAddress string `xorm:"VARCHAR(2048)"` + RepoOwner string + RepoName string } sess := x.NewSession() @@ -59,7 +60,9 @@ func migratePullMirrors(x *xorm.Engine) error { for { var mirrors []Mirror - if err := sess.Limit(limit, start).Find(&mirrors); err != nil { + if err := sess.Select("mirror.id, mirror.repo_id, mirror.remote_address, repository.owner_name as repo_owner, repository.name as repo_name"). + Join("INNER", "repository", "repository.id = mirror.repo_id"). + Limit(limit, start).Find(&mirrors); err != nil { return err } @@ -69,7 +72,7 @@ func migratePullMirrors(x *xorm.Engine) error { start += len(mirrors) for _, m := range mirrors { - remoteAddress, err := getRemoteAddress(sess, m.RepoID, "origin") + remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RepoOwner, m.RepoName, "origin") if err != nil { return err } @@ -100,6 +103,8 @@ func migratePushMirrors(x *xorm.Engine) error { RepoID int64 `xorm:"INDEX"` RemoteName string RemoteAddress string `xorm:"VARCHAR(2048)"` + RepoOwner string + RepoName string } sess := x.NewSession() @@ -118,7 +123,9 @@ func migratePushMirrors(x *xorm.Engine) error { for { var mirrors []PushMirror - if err := sess.Limit(limit, start).Find(&mirrors); err != nil { + 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"). + Join("INNER", "repository", "repository.id = push_mirror.repo_id"). + Limit(limit, start).Find(&mirrors); err != nil { return err } @@ -128,7 +135,7 @@ func migratePushMirrors(x *xorm.Engine) error { start += len(mirrors) for _, m := range mirrors { - remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RemoteName) + remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RepoOwner, m.RepoName, m.RemoteName) if err != nil { return err } @@ -153,20 +160,7 @@ func migratePushMirrors(x *xorm.Engine) error { return sess.Commit() } -func getRemoteAddress(sess *xorm.Session, repoID int64, remoteName string) (string, error) { - var ownerName string - var repoName string - has, err := sess. - Table("repository"). - Cols("owner_name", "lower_name"). - Where("id=?", repoID). - Get(&ownerName, &repoName) - if err != nil { - return "", err - } else if !has { - return "", fmt.Errorf("repository [%v] not found", repoID) - } - +func getRemoteAddress(sess *xorm.Session, repoID int64, ownerName, repoName, remoteName string) (string, error) { repoPath := filepath.Join(setting.RepoRootPath, strings.ToLower(ownerName), strings.ToLower(repoName)+".git") remoteURL, err := git.GetRemoteAddress(context.Background(), repoPath, remoteName) From adbd89a08a3fdb65bbe85fb22b21ae2577eb1901 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 18 Sep 2023 16:15:55 +0800 Subject: [PATCH 2/4] Update models/migrations/v1_21/v276.go Co-authored-by: Jason Song --- models/migrations/v1_21/v276.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/migrations/v1_21/v276.go b/models/migrations/v1_21/v276.go index 248c62a5b9012..bbfb5999fa0fa 100644 --- a/models/migrations/v1_21/v276.go +++ b/models/migrations/v1_21/v276.go @@ -160,7 +160,7 @@ func migratePushMirrors(x *xorm.Engine) error { return sess.Commit() } -func getRemoteAddress(sess *xorm.Session, repoID int64, ownerName, repoName, remoteName string) (string, error) { +func getRemoteAddress(ownerName, repoName, remoteName string) (string, error) { repoPath := filepath.Join(setting.RepoRootPath, strings.ToLower(ownerName), strings.ToLower(repoName)+".git") remoteURL, err := git.GetRemoteAddress(context.Background(), repoPath, remoteName) From 5ee502588dbc5d7a2259b3369f86f882292c475f Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 18 Sep 2023 16:18:23 +0800 Subject: [PATCH 3/4] Fix error --- models/migrations/v1_21/v276.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/migrations/v1_21/v276.go b/models/migrations/v1_21/v276.go index bbfb5999fa0fa..5186ac9babcd0 100644 --- a/models/migrations/v1_21/v276.go +++ b/models/migrations/v1_21/v276.go @@ -72,7 +72,7 @@ func migratePullMirrors(x *xorm.Engine) error { start += len(mirrors) for _, m := range mirrors { - remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RepoOwner, m.RepoName, "origin") + remoteAddress, err := getRemoteAddress(m.RepoOwner, m.RepoName, "origin") if err != nil { return err } @@ -135,7 +135,7 @@ func migratePushMirrors(x *xorm.Engine) error { start += len(mirrors) for _, m := range mirrors { - remoteAddress, err := getRemoteAddress(sess, m.RepoID, m.RepoOwner, m.RepoName, m.RemoteName) + remoteAddress, err := getRemoteAddress(m.RepoOwner, m.RepoName, m.RemoteName) if err != nil { return err } From 2ac38f69316c3d44c36767a8a1a23de5b6cf9a2c Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 18 Sep 2023 16:23:12 +0800 Subject: [PATCH 4/4] Add error track --- models/migrations/v1_21/v276.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/migrations/v1_21/v276.go b/models/migrations/v1_21/v276.go index 5186ac9babcd0..ed1bc3bda5241 100644 --- a/models/migrations/v1_21/v276.go +++ b/models/migrations/v1_21/v276.go @@ -5,6 +5,7 @@ package v1_21 //nolint import ( "context" + "fmt" "path/filepath" "strings" @@ -165,7 +166,7 @@ func getRemoteAddress(ownerName, repoName, remoteName string) (string, error) { remoteURL, err := git.GetRemoteAddress(context.Background(), repoPath, remoteName) if err != nil { - return "", err + return "", fmt.Errorf("get remote %s's address of %s/%s failed: %v", remoteName, ownerName, repoName, err) } u, err := giturl.Parse(remoteURL)