From 4167a4d5685e434c9643e3c038e6e77a7407645a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=B4=8A=E1=B4=8F=E1=B4=87=20=E1=B4=84=CA=9C=E1=B4=87?= =?UTF-8?q?=C9=B4?= Date: Tue, 20 Jan 2026 23:38:10 -0500 Subject: [PATCH] wiki: auto-detect default branch (#8094) --- internal/db/wiki.go | 18 ++++++++++++++---- internal/route/repo/wiki.go | 17 +++++++++++------ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/internal/db/wiki.go b/internal/db/wiki.go index eae55d095..d7f6155d5 100644 --- a/internal/db/wiki.go +++ b/internal/db/wiki.go @@ -24,6 +24,15 @@ import ( var wikiWorkingPool = sync.NewExclusivePool() +// WikiBranch returns the branch name used by the wiki repository. It checks if +// "main" branch exists, otherwise falls back to "master". +func WikiBranch(repoPath string) string { + if git.RepoHasBranch(repoPath, "main") { + return "main" + } + return "master" +} + // ToWikiPageURL formats a string to corresponding wiki URL name. func ToWikiPageURL(name string) string { return url.QueryEscape(name) @@ -79,11 +88,12 @@ func (repo *Repository) LocalWikiPath() string { // UpdateLocalWiki makes sure the local copy of repository wiki is up-to-date. func (repo *Repository) UpdateLocalWiki() error { - return UpdateLocalCopyBranch(repo.WikiPath(), repo.LocalWikiPath(), "master", true) + wikiPath := repo.WikiPath() + return UpdateLocalCopyBranch(wikiPath, repo.LocalWikiPath(), WikiBranch(wikiPath), true) } func discardLocalWikiChanges(localPath string) error { - return discardLocalRepoBranchChanges(localPath, "master") + return discardLocalRepoBranchChanges(localPath, WikiBranch(localPath)) } // updateWikiPage adds new page to repository wiki. @@ -143,7 +153,7 @@ func (repo *Repository) updateWikiPage(doer *User, oldTitle, title, content, mes ) if err != nil { return fmt.Errorf("commit changes: %v", err) - } else if err = git.Push(localPath, "origin", "master"); err != nil { + } else if err = git.Push(localPath, "origin", WikiBranch(localPath)); err != nil { return fmt.Errorf("push: %v", err) } @@ -190,7 +200,7 @@ func (repo *Repository) DeleteWikiPage(doer *User, title string) (err error) { ) if err != nil { return fmt.Errorf("commit changes: %v", err) - } else if err = git.Push(localPath, "origin", "master"); err != nil { + } else if err = git.Push(localPath, "origin", WikiBranch(localPath)); err != nil { return fmt.Errorf("push: %v", err) } diff --git a/internal/route/repo/wiki.go b/internal/route/repo/wiki.go index 4ddb92d6c..a5d4cecb5 100644 --- a/internal/route/repo/wiki.go +++ b/internal/route/repo/wiki.go @@ -43,12 +43,13 @@ type PageMeta struct { } func renderWikiPage(c *context.Context, isViewPage bool) (*git.Repository, string) { - wikiRepo, err := git.Open(c.Repo.Repository.WikiPath()) + wikiPath := c.Repo.Repository.WikiPath() + wikiRepo, err := git.Open(wikiPath) if err != nil { c.Error(err, "open repository") return nil, "" } - commit, err := wikiRepo.BranchCommit("master") + commit, err := wikiRepo.BranchCommit(database.WikiBranch(wikiPath)) if err != nil { c.Error(err, "get branch commit") return nil, "" @@ -124,7 +125,8 @@ func Wiki(c *context.Context) { } // Get last change information. - commits, err := wikiRepo.Log(git.RefsHeads+"master", git.LogOptions{Path: pageName + ".md"}) + branch := database.WikiBranch(c.Repo.Repository.WikiPath()) + commits, err := wikiRepo.Log(git.RefsHeads+branch, git.LogOptions{Path: pageName + ".md"}) if err != nil { c.Error(err, "get commits by path") return @@ -143,12 +145,15 @@ func WikiPages(c *context.Context) { return } - wikiRepo, err := git.Open(c.Repo.Repository.WikiPath()) + wikiPath := c.Repo.Repository.WikiPath() + wikiRepo, err := git.Open(wikiPath) if err != nil { c.Error(err, "open repository") return } - commit, err := wikiRepo.BranchCommit("master") + + branch := database.WikiBranch(wikiPath) + commit, err := wikiRepo.BranchCommit(branch) if err != nil { c.Error(err, "get branch commit") return @@ -162,7 +167,7 @@ func WikiPages(c *context.Context) { pages := make([]PageMeta, 0, len(entries)) for i := range entries { if entries[i].Type() == git.ObjectBlob && strings.HasSuffix(entries[i].Name(), ".md") { - commits, err := wikiRepo.Log(git.RefsHeads+"master", git.LogOptions{Path: entries[i].Name()}) + commits, err := wikiRepo.Log(git.RefsHeads+branch, git.LogOptions{Path: entries[i].Name()}) if err != nil { c.Error(err, "get commits by path") return