diff --git a/routers/web/repo/wiki_test.go b/routers/web/repo/wiki_test.go index 719cca304923f..4426529094659 100644 --- a/routers/web/repo/wiki_test.go +++ b/routers/web/repo/wiki_test.go @@ -9,6 +9,7 @@ import ( "net/url" "testing" + "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/git" @@ -221,3 +222,31 @@ func TestWikiRaw(t *testing.T) { } } } + +func TestDefaultWikiBranch(t *testing.T) { + unittest.PrepareTestEnv(t) + + ctx, _ := contexttest.MockContext(t, "user2/repo1/wiki") + ctx.SetParams("*", "Home") + contexttest.LoadRepo(t, ctx, 1) + // by default the test fixture doesn't have "default wiki branch" + assert.Equal(t, "", ctx.Repo.Repository.DefaultWikiBranch) + Wiki(ctx) // after the visiting, the out-of-sync database record will update the branch name to "master" + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) + assert.Equal(t, "master", ctx.Repo.Repository.DefaultWikiBranch) + + // invalid branch name should fail + assert.Error(t, wiki_service.ChangeDefaultWikiBranch(db.DefaultContext, repo, "the bad name")) + repo = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) + assert.Equal(t, "master", repo.DefaultWikiBranch) + + // the same branch name, should succeed (actually a no-op) + assert.NoError(t, wiki_service.ChangeDefaultWikiBranch(db.DefaultContext, repo, "master")) + repo = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) + assert.Equal(t, "master", repo.DefaultWikiBranch) + + // change to another name + assert.NoError(t, wiki_service.ChangeDefaultWikiBranch(db.DefaultContext, repo, "main")) + repo = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) + assert.Equal(t, "main", repo.DefaultWikiBranch) +} diff --git a/services/repository/migrate.go b/services/repository/migrate.go index 17de922d1a725..aae2ddc1200ea 100644 --- a/services/repository/migrate.go +++ b/services/repository/migrate.go @@ -67,7 +67,7 @@ func cloneWiki(ctx context.Context, u *user_model.User, opts migration.MigrateOp defaultBranch, err := wikiRepo.GetDefaultBranch() if err != nil { cleanIncompleteWikiPath() - return "", fmt.Errorf("failed to get wiki repo defaul branch for %q, err: %w", wikiPath, err) + return "", fmt.Errorf("failed to get wiki repo default branch for %q, err: %w", wikiPath, err) } return defaultBranch, nil diff --git a/services/wiki/wiki.go b/services/wiki/wiki.go index 628364e5fc1df..43da153e7dae7 100644 --- a/services/wiki/wiki.go +++ b/services/wiki/wiki.go @@ -20,6 +20,7 @@ import ( "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/log" repo_module "code.gitea.io/gitea/modules/repository" + "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/sync" "code.gitea.io/gitea/modules/util" asymkey_service "code.gitea.io/gitea/services/asymkey" @@ -38,11 +39,15 @@ func InitWiki(ctx context.Context, repo *repo_model.Repository) error { return nil } + defaultBranchName := repo.DefaultWikiBranch + if defaultBranchName == "" { // usually this shouldn't happen, but for testing and for legacy data, it's safe to do the fallback + defaultBranchName = setting.Repository.DefaultBranch + } if err := git.InitRepository(ctx, repo.WikiPath(), true, repo.ObjectFormatName); err != nil { return fmt.Errorf("InitRepository: %w", err) } else if err = repo_module.CreateDelegateHooks(repo.WikiPath()); err != nil { return fmt.Errorf("createDelegateHooks: %w", err) - } else if _, _, err = git.NewCommand(ctx, "symbolic-ref", "HEAD").AddDynamicArguments(git.BranchPrefix + repo.DefaultWikiBranch).RunStdString(&git.RunOpts{Dir: repo.WikiPath()}); err != nil { + } else if _, _, err = git.NewCommand(ctx, "symbolic-ref", "HEAD").AddDynamicArguments(git.BranchPrefix + defaultBranchName).RunStdString(&git.RunOpts{Dir: repo.WikiPath()}); err != nil { return fmt.Errorf("unable to set default wiki branch to master: %w", err) } return nil