From 59910a461dbc6918e85f3dbc2a726d2f1c212b6c Mon Sep 17 00:00:00 2001 From: Gusted Date: Sun, 2 Feb 2025 12:06:02 +0000 Subject: [PATCH] fix: use correct default branch for migrated wiki (#6754) - Instead of getting the default branch of the 'code' repository, get the default branch of the wiki repository. - It's a bug of forgejo/forgejo#2264, likely caused by the confusion between `gitrepo` (the package name) and `gitRepo` (the git repo for the just migrated wiki repository). - Adjusted existing integration test. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6754 Reviewed-by: Earl Warren Co-authored-by: Gusted Co-committed-by: Gusted --- services/repository/migrate.go | 5 ++--- tests/integration/migrate_test.go | 22 +++++++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/services/repository/migrate.go b/services/repository/migrate.go index b5735ac5b2..c8f65dd63d 100644 --- a/services/repository/migrate.go +++ b/services/repository/migrate.go @@ -15,7 +15,6 @@ import ( repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/lfs" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/migration" @@ -97,7 +96,7 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User, } defer gitRepo.Close() - branch, err := gitrepo.GetDefaultBranch(ctx, repo) + branch, err := gitRepo.GetHEADBranch() if err != nil { log.Warn("Failed to get the default branch of a migrated wiki repo: %v", err) if err := util.RemoveAll(wikiPath); err != nil { @@ -106,7 +105,7 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User, return repo, err } - repo.WikiBranch = branch + repo.WikiBranch = branch.Name if err := git.WriteCommitGraph(ctx, wikiPath); err != nil { return repo, err diff --git a/tests/integration/migrate_test.go b/tests/integration/migrate_test.go index c1e12f8267..0b03a4136b 100644 --- a/tests/integration/migrate_test.go +++ b/tests/integration/migrate_test.go @@ -19,6 +19,7 @@ import ( "code.gitea.io/gitea/models/unit" "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/modules/optional" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/test" @@ -119,10 +120,13 @@ func TestMigrateWithWiki(t *testing.T) { defer test.MockVariableValue(&setting.AppVer, "1.16.0")() require.NoError(t, migrations.Init()) - ownerName := "user2" - repoName := "repo1" - repoOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: ownerName}) - session := loginUser(t, ownerName) + user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) + repo, _, f := tests.CreateDeclarativeRepoWithOptions(t, user, tests.DeclarativeRepoOptions{ + WikiBranch: optional.Some("obscure-name"), + }) + defer f() + + session := loginUser(t, user.Name) token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeReadMisc) for _, s := range []struct { @@ -134,7 +138,7 @@ func TestMigrateWithWiki(t *testing.T) { t.Run(s.svc.Name(), func(t *testing.T) { defer tests.PrintCurrentTest(t)() // Step 0: verify the repo is available - req := NewRequestf(t, "GET", "/%s/%s", ownerName, repoName) + req := NewRequestf(t, "GET", "/%s", repo.FullName()) _ = session.MakeRequest(t, req, http.StatusOK) // Step 1: get the Gitea migration form req = NewRequestf(t, "GET", "/repo/migrate/?service_type=%d", s.svc) @@ -149,19 +153,19 @@ func TestMigrateWithWiki(t *testing.T) { req = NewRequestWithValues(t, "POST", "/repo/migrate", map[string]string{ "_csrf": GetCSRF(t, session, "/repo/migrate"), "service": fmt.Sprintf("%d", s.svc), - "clone_addr": fmt.Sprintf("%s%s/%s", u, ownerName, repoName), + "clone_addr": fmt.Sprintf("%s%s", u, repo.FullName()), "auth_token": token, "issues": "on", "wiki": "on", "repo_name": migratedRepoName, "description": "", - "uid": fmt.Sprintf("%d", repoOwner.ID), + "uid": fmt.Sprintf("%d", user.ID), }) resp = session.MakeRequest(t, req, http.StatusSeeOther) // Step 5: a redirection displays the migrated repository - assert.EqualValues(t, fmt.Sprintf("/%s/%s", ownerName, migratedRepoName), test.RedirectURL(resp)) + assert.EqualValues(t, fmt.Sprintf("/%s/%s", user.Name, migratedRepoName), test.RedirectURL(resp)) // Step 6: check the repo was created and load the repo - migratedRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: migratedRepoName}) + migratedRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: migratedRepoName, WikiBranch: "obscure-name"}) // Step 7: check if the wiki is enabled assert.True(t, migratedRepo.UnitEnabled(db.DefaultContext, unit.TypeWiki)) })