Skip to content

Commit 4498103

Browse files
committed
Make wiki pages visit fast
1 parent 5cada75 commit 4498103

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

routers/web/repo/wiki.go

Lines changed: 21 additions & 10 deletions
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"
@@ -645,22 +646,32 @@ func WikiPages(ctx *context.Context) {
645646
return
646647
}
647648

648-
entries, err := commit.ListEntries()
649+
treePath := ""
650+
tree, err := commit.SubTree(treePath)
651+
if err != nil {
652+
ctx.ServerError("SubTree", err)
653+
return
654+
}
655+
656+
allEntries, err := tree.ListEntries()
649657
if err != nil {
650658
ctx.ServerError("ListEntries", err)
651659
return
652660
}
661+
allEntries.CustomSort(base.NaturalSortLess)
662+
663+
entries, _, err := allEntries.GetCommitsInfo(gocontext.Context(ctx), commit, treePath)
664+
if err != nil {
665+
ctx.ServerError("GetCommitsInfo", err)
666+
return
667+
}
668+
653669
pages := make([]PageMeta, 0, len(entries))
654670
for _, entry := range entries {
655-
if !entry.IsRegular() {
671+
if !entry.Entry.IsRegular() {
656672
continue
657673
}
658-
c, err := wikiRepo.GetCommitByPath(entry.Name())
659-
if err != nil {
660-
ctx.ServerError("GetCommit", err)
661-
return
662-
}
663-
wikiName, err := wiki_service.GitPathToWebPath(entry.Name())
674+
wikiName, err := wiki_service.GitPathToWebPath(entry.Entry.Name())
664675
if err != nil {
665676
if repo_model.IsErrWikiInvalidFileName(err) {
666677
continue
@@ -672,8 +683,8 @@ func WikiPages(ctx *context.Context) {
672683
pages = append(pages, PageMeta{
673684
Name: displayName,
674685
SubURL: wiki_service.WebPathToURLPath(wikiName),
675-
GitEntryName: entry.Name(),
676-
UpdatedUnix: timeutil.TimeStamp(c.Author.When.Unix()),
686+
GitEntryName: entry.Entry.Name(),
687+
UpdatedUnix: timeutil.TimeStamp(entry.Commit.Author.When.Unix()),
677688
})
678689
}
679690
ctx.Data["Pages"] = pages

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

Lines changed: 23 additions & 0 deletions
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)