Skip to content

Commit 629e431

Browse files
lunnyGiteaBot
authored andcommitted
Make wiki pages visit fast (go-gitea#32732)
1 parent 063655c commit 629e431

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

routers/web/repo/wiki.go

+21-10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package repo
66

77
import (
88
"bytes"
9+
gocontext "context"
910
"fmt"
1011
"io"
1112
"net/http"
@@ -651,22 +652,32 @@ func WikiPages(ctx *context.Context) {
651652
return
652653
}
653654

654-
entries, err := commit.ListEntries()
655+
treePath := "" // To support list sub folders' pages in the future
656+
tree, err := commit.SubTree(treePath)
657+
if err != nil {
658+
ctx.ServerError("SubTree", err)
659+
return
660+
}
661+
662+
allEntries, err := tree.ListEntries()
655663
if err != nil {
656664
ctx.ServerError("ListEntries", err)
657665
return
658666
}
667+
allEntries.CustomSort(base.NaturalSortLess)
668+
669+
entries, _, err := allEntries.GetCommitsInfo(gocontext.Context(ctx), commit, treePath)
670+
if err != nil {
671+
ctx.ServerError("GetCommitsInfo", err)
672+
return
673+
}
674+
659675
pages := make([]PageMeta, 0, len(entries))
660676
for _, entry := range entries {
661-
if !entry.IsRegular() {
677+
if !entry.Entry.IsRegular() {
662678
continue
663679
}
664-
c, err := wikiRepo.GetCommitByPath(entry.Name())
665-
if err != nil {
666-
ctx.ServerError("GetCommit", err)
667-
return
668-
}
669-
wikiName, err := wiki_service.GitPathToWebPath(entry.Name())
680+
wikiName, err := wiki_service.GitPathToWebPath(entry.Entry.Name())
670681
if err != nil {
671682
if repo_model.IsErrWikiInvalidFileName(err) {
672683
continue
@@ -678,8 +689,8 @@ func WikiPages(ctx *context.Context) {
678689
pages = append(pages, PageMeta{
679690
Name: displayName,
680691
SubURL: wiki_service.WebPathToURLPath(wikiName),
681-
GitEntryName: entry.Name(),
682-
UpdatedUnix: timeutil.TimeStamp(c.Author.When.Unix()),
692+
GitEntryName: entry.Entry.Name(),
693+
UpdatedUnix: timeutil.TimeStamp(entry.Commit.Author.When.Unix()),
683694
})
684695
}
685696
ctx.Data["Pages"] = pages

tests/integration/git_clone_wiki_test.go renamed to tests/integration/wiki_test.go

+23
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@ package integration
66
import (
77
"context"
88
"fmt"
9+
"net/http"
910
"net/url"
1011
"os"
1112
"path/filepath"
13+
"strings"
1214
"testing"
1315

1416
"code.gitea.io/gitea/modules/git"
1517
"code.gitea.io/gitea/modules/util"
1618
"code.gitea.io/gitea/tests"
1719

20+
"github.com/PuerkitoBio/goquery"
1821
"github.com/stretchr/testify/assert"
1922
)
2023

@@ -50,3 +53,23 @@ func TestRepoCloneWiki(t *testing.T) {
5053
})
5154
})
5255
}
56+
57+
func Test_RepoWikiPages(t *testing.T) {
58+
defer tests.PrepareTestEnv(t)()
59+
60+
url := "/user2/repo1/wiki/?action=_pages"
61+
req := NewRequest(t, "GET", url)
62+
resp := MakeRequest(t, req, http.StatusOK)
63+
64+
doc := NewHTMLParser(t, resp.Body)
65+
expectedPagePaths := []string{
66+
"Home", "Page-With-Image", "Page-With-Spaced-Name", "Unescaped-File",
67+
}
68+
doc.Find("tr").Each(func(i int, s *goquery.Selection) {
69+
firstAnchor := s.Find("a").First()
70+
href, _ := firstAnchor.Attr("href")
71+
pagePath := strings.TrimPrefix(href, "/user2/repo1/wiki/")
72+
73+
assert.EqualValues(t, expectedPagePaths[i], pagePath)
74+
})
75+
}

0 commit comments

Comments
 (0)