mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Make wiki pages visit fast (#32732)
This commit is contained in:
		@@ -6,6 +6,7 @@ package repo
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	gocontext "context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net/http"
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -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)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user