Skip to content

Commit

Permalink
Make wiki pages visit fast (#32732)
Browse files Browse the repository at this point in the history
  • Loading branch information
lunny authored Dec 6, 2024
1 parent 0f18046 commit b32f0cd
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 10 deletions.
31 changes: 21 additions & 10 deletions routers/web/repo/wiki.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package repo

import (
"bytes"
gocontext "context"
"fmt"
"io"
"net/http"
Expand Down Expand Up @@ -645,22 +646,32 @@ func WikiPages(ctx *context.Context) {
return
}

entries, err := commit.ListEntries()
treePath := "" // To support list sub folders' pages in the future
tree, err := commit.SubTree(treePath)
if err != nil {
ctx.ServerError("SubTree", err)
return
}

allEntries, err := tree.ListEntries()
if err != nil {
ctx.ServerError("ListEntries", err)
return
}
allEntries.CustomSort(base.NaturalSortLess)

entries, _, err := allEntries.GetCommitsInfo(gocontext.Context(ctx), commit, treePath)
if err != nil {
ctx.ServerError("GetCommitsInfo", err)
return
}

pages := make([]PageMeta, 0, len(entries))
for _, entry := range entries {
if !entry.IsRegular() {
if !entry.Entry.IsRegular() {
continue
}
c, err := wikiRepo.GetCommitByPath(entry.Name())
if err != nil {
ctx.ServerError("GetCommit", err)
return
}
wikiName, err := wiki_service.GitPathToWebPath(entry.Name())
wikiName, err := wiki_service.GitPathToWebPath(entry.Entry.Name())
if err != nil {
if repo_model.IsErrWikiInvalidFileName(err) {
continue
Expand All @@ -672,8 +683,8 @@ func WikiPages(ctx *context.Context) {
pages = append(pages, PageMeta{
Name: displayName,
SubURL: wiki_service.WebPathToURLPath(wikiName),
GitEntryName: entry.Name(),
UpdatedUnix: timeutil.TimeStamp(c.Author.When.Unix()),
GitEntryName: entry.Entry.Name(),
UpdatedUnix: timeutil.TimeStamp(entry.Commit.Author.When.Unix()),
})
}
ctx.Data["Pages"] = pages
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,18 @@ package integration
import (
"context"
"fmt"
"net/http"
"net/url"
"os"
"path/filepath"
"strings"
"testing"

"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/tests"

"github.com/PuerkitoBio/goquery"
"github.com/stretchr/testify/assert"
)

Expand Down Expand Up @@ -50,3 +53,23 @@ func TestRepoCloneWiki(t *testing.T) {
})
})
}

func Test_RepoWikiPages(t *testing.T) {
defer tests.PrepareTestEnv(t)()

url := "/user2/repo1/wiki/?action=_pages"
req := NewRequest(t, "GET", url)
resp := MakeRequest(t, req, http.StatusOK)

doc := NewHTMLParser(t, resp.Body)
expectedPagePaths := []string{
"Home", "Page-With-Image", "Page-With-Spaced-Name", "Unescaped-File",
}
doc.Find("tr").Each(func(i int, s *goquery.Selection) {
firstAnchor := s.Find("a").First()
href, _ := firstAnchor.Attr("href")
pagePath := strings.TrimPrefix(href, "/user2/repo1/wiki/")

assert.EqualValues(t, expectedPagePaths[i], pagePath)
})
}

0 comments on commit b32f0cd

Please sign in to comment.