mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-01-20 16:50:28 -05:00
refactor: centralize listing wiki pages
This commit is contained in:
parent
33470c35c3
commit
400018319a
4 changed files with 62 additions and 83 deletions
|
@ -314,22 +314,22 @@ func ListWikiPages(ctx *context.APIContext) {
|
||||||
skip := (page - 1) * limit
|
skip := (page - 1) * limit
|
||||||
max := page * limit
|
max := page * limit
|
||||||
|
|
||||||
entries, err := commit.ListEntries()
|
entries, err := wiki_service.ListWikiPages(ctx, commit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("ListEntries", err)
|
ctx.ServerError("ListWikiPages", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
pages := make([]*api.WikiPageMetaData, 0, len(entries))
|
pages := make([]*api.WikiPageMetaData, 0, len(entries))
|
||||||
for i, entry := range entries {
|
for i, entry := range entries {
|
||||||
if i < skip || i >= max || !entry.IsRegular() {
|
if i < skip || i >= max {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
c, err := wikiRepo.GetCommitByPath(entry.Name())
|
c, err := wikiRepo.GetCommitByPath(entry.GitEntryName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "GetCommit", err)
|
ctx.Error(http.StatusInternalServerError, "GetCommit", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
wikiName, err := wiki_service.GitPathToPath(entry.Name())
|
wikiName, err := wiki_service.GitPathToPath(entry.GitEntryName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if repo_model.IsErrWikiInvalidFileName(err) {
|
if repo_model.IsErrWikiInvalidFileName(err) {
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -141,50 +141,24 @@ func wikiContentsByName(ctx *context.Context, commit *git.Commit, wikiName wiki_
|
||||||
|
|
||||||
func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
|
func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
|
||||||
wikiRepo, commit, err := findWikiRepoCommit(ctx)
|
wikiRepo, commit, err := findWikiRepoCommit(ctx)
|
||||||
if err != nil {
|
defer func() {
|
||||||
if wikiRepo != nil {
|
if wikiRepo != nil {
|
||||||
wikiRepo.Close()
|
wikiRepo.Close()
|
||||||
}
|
}
|
||||||
|
}()
|
||||||
|
if err != nil {
|
||||||
if !git.IsErrNotExist(err) {
|
if !git.IsErrNotExist(err) {
|
||||||
ctx.ServerError("GetBranchCommit", err)
|
ctx.ServerError("GetBranchCommit", err)
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get page list.
|
pages, err := wiki_service.ListWikiPages(gocontext.Context(ctx), commit)
|
||||||
entries, err := commit.ListEntries()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if wikiRepo != nil {
|
ctx.ServerError("ListWikiPages", err)
|
||||||
wikiRepo.Close()
|
|
||||||
}
|
|
||||||
ctx.ServerError("ListEntries", err)
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
pages := make([]PageMeta, 0, len(entries))
|
|
||||||
for _, entry := range entries {
|
|
||||||
if !entry.IsRegular() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
wikiName, err := wiki_service.GitPathToPath(entry.Name())
|
|
||||||
if err != nil {
|
|
||||||
if repo_model.IsErrWikiInvalidFileName(err) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if wikiRepo != nil {
|
|
||||||
wikiRepo.Close()
|
|
||||||
}
|
|
||||||
ctx.ServerError("WikiFilenameToName", err)
|
|
||||||
return nil, nil
|
|
||||||
} else if wikiName.IsSidebar() || wikiName.IsFooter() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
_, displayName := wikiName.DisplayName()
|
|
||||||
pages = append(pages, PageMeta{
|
|
||||||
Name: displayName,
|
|
||||||
SubURL: wikiName.URLPath(),
|
|
||||||
GitEntryName: entry.Name(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
ctx.Data["Pages"] = pages
|
ctx.Data["Pages"] = pages
|
||||||
|
|
||||||
// get requested page name
|
// get requested page name
|
||||||
|
@ -590,59 +564,24 @@ func WikiPages(ctx *context.Context) {
|
||||||
ctx.Data["CanWriteWiki"] = ctx.Repo.CanWrite(unit.TypeWiki) && !ctx.Repo.Repository.IsArchived
|
ctx.Data["CanWriteWiki"] = ctx.Repo.CanWrite(unit.TypeWiki) && !ctx.Repo.Repository.IsArchived
|
||||||
|
|
||||||
wikiRepo, commit, err := findWikiRepoCommit(ctx)
|
wikiRepo, commit, err := findWikiRepoCommit(ctx)
|
||||||
if err != nil {
|
|
||||||
if wikiRepo != nil {
|
|
||||||
wikiRepo.Close()
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if wikiRepo != nil {
|
if wikiRepo != nil {
|
||||||
wikiRepo.Close()
|
wikiRepo.Close()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
treePath := "" // To support list sub folders' pages in the future
|
|
||||||
tree, err := commit.SubTree(treePath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("SubTree", err)
|
if !git.IsErrNotExist(err) {
|
||||||
return
|
ctx.ServerError("GetBranchCommit", err)
|
||||||
}
|
|
||||||
|
|
||||||
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.Entry.IsRegular() {
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
wikiName, err := wiki_service.GitPathToPath(entry.Entry.Name())
|
return
|
||||||
if err != nil {
|
|
||||||
if repo_model.IsErrWikiInvalidFileName(err) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ctx.ServerError("WikiFilenameToName", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
_, displayName := wikiName.DisplayName()
|
|
||||||
pages = append(pages, PageMeta{
|
|
||||||
Name: displayName,
|
|
||||||
SubURL: wikiName.URLPath(),
|
|
||||||
GitEntryName: entry.Entry.Name(),
|
|
||||||
UpdatedUnix: timeutil.TimeStamp(entry.Commit.Author.When.Unix()),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pages, err := wiki_service.ListWikiPages(gocontext.Context(ctx), commit)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("ListWikiPages", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
ctx.Data["Pages"] = pages
|
ctx.Data["Pages"] = pages
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplWikiPages)
|
ctx.HTML(http.StatusOK, tplWikiPages)
|
||||||
|
|
|
@ -65,7 +65,7 @@ func assertWikiNotExists(t *testing.T, repo *repo_model.Repository, wikiName wik
|
||||||
}
|
}
|
||||||
|
|
||||||
func assertPagesMetas(t *testing.T, expectedNames []string, metas any) {
|
func assertPagesMetas(t *testing.T, expectedNames []string, metas any) {
|
||||||
pageMetas, ok := metas.([]PageMeta)
|
pageMetas, ok := metas.([]wiki_service.PageMeta)
|
||||||
if !assert.True(t, ok) {
|
if !assert.True(t, ok) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,11 +15,13 @@ import (
|
||||||
system_model "code.gitea.io/gitea/models/system"
|
system_model "code.gitea.io/gitea/models/system"
|
||||||
"code.gitea.io/gitea/models/unit"
|
"code.gitea.io/gitea/models/unit"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
|
"code.gitea.io/gitea/modules/base"
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/gitrepo"
|
"code.gitea.io/gitea/modules/gitrepo"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
repo_module "code.gitea.io/gitea/modules/repository"
|
repo_module "code.gitea.io/gitea/modules/repository"
|
||||||
"code.gitea.io/gitea/modules/sync"
|
"code.gitea.io/gitea/modules/sync"
|
||||||
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
asymkey_service "code.gitea.io/gitea/services/asymkey"
|
asymkey_service "code.gitea.io/gitea/services/asymkey"
|
||||||
repo_service "code.gitea.io/gitea/services/repository"
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
)
|
)
|
||||||
|
@ -447,3 +449,41 @@ func SearchWikiContents(ctx context.Context, repo *repo_model.Repository, keywor
|
||||||
|
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type PageMeta struct {
|
||||||
|
Name string
|
||||||
|
SubURL string
|
||||||
|
GitEntryName string
|
||||||
|
UpdatedUnix timeutil.TimeStamp
|
||||||
|
}
|
||||||
|
|
||||||
|
func ListWikiPages(ctx context.Context, commit *git.Commit) ([]PageMeta, error) {
|
||||||
|
// Get page list.
|
||||||
|
entries, err := commit.ListEntries()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
entries.CustomSort(base.NaturalSortLess)
|
||||||
|
pages := make([]PageMeta, 0, len(entries))
|
||||||
|
for _, entry := range entries {
|
||||||
|
if !entry.IsRegular() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
wikiName, err := GitPathToPath(entry.Name())
|
||||||
|
if err != nil {
|
||||||
|
if repo_model.IsErrWikiInvalidFileName(err) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
} else if wikiName.IsSidebar() || wikiName.IsFooter() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
_, displayName := wikiName.DisplayName()
|
||||||
|
pages = append(pages, PageMeta{
|
||||||
|
Name: displayName,
|
||||||
|
SubURL: wikiName.URLPath(),
|
||||||
|
GitEntryName: entry.Name(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return pages, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue