Skip to content

Commit ef7fd78

Browse files
authored
Avoid recursing into sub-sub-sub-docs folders when looking for READMEs. (#23695)
Fixes a bug introduced in #22177 which allows finding READMEs like docs/docs/docs/.gitea/.github/docs/README.md Fixes #23694
1 parent b7b887b commit ef7fd78

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

routers/web/repo/view.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const (
5858
// entries == ctx.Repo.Commit.SubTree(ctx.Repo.TreePath).ListEntries()
5959
//
6060
// FIXME: There has to be a more efficient way of doing this
61-
func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (string, *git.TreeEntry, error) {
61+
func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry, tryWellKnownDirs bool) (string, *git.TreeEntry, error) {
6262
// Create a list of extensions in priority order
6363
// 1. Markdown files - with and without localisation - e.g. README.en-us.md or README.md
6464
// 2. Txt files - e.g. README.txt
@@ -69,7 +69,7 @@ func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (st
6969

7070
docsEntries := make([]*git.TreeEntry, 3) // (one of docs/, .gitea/ or .github/)
7171
for _, entry := range entries {
72-
if entry.IsDir() {
72+
if tryWellKnownDirs && entry.IsDir() {
7373
// as a special case for the top-level repo introduction README,
7474
// fall back to subfolders, looking for e.g. docs/README.md, .gitea/README.zh-CN.txt, .github/README.txt, ...
7575
// (note that docsEntries is ignored unless we are at the root)
@@ -130,7 +130,7 @@ func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (st
130130
return "", nil, err
131131
}
132132

133-
subfolder, readmeFile, err := findReadmeFileInEntries(ctx, childEntries)
133+
subfolder, readmeFile, err := findReadmeFileInEntries(ctx, childEntries, false)
134134
if err != nil && !git.IsErrNotExist(err) {
135135
return "", nil, err
136136
}
@@ -164,7 +164,7 @@ func renderDirectory(ctx *context.Context, treeLink string) {
164164
return
165165
}
166166

167-
subfolder, readmeFile, err := findReadmeFileInEntries(ctx, entries)
167+
subfolder, readmeFile, err := findReadmeFileInEntries(ctx, entries, true)
168168
if err != nil {
169169
ctx.ServerError("findReadmeFileInEntries", err)
170170
return

tests/integration/repo_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ func TestViewRepoDirectoryReadme(t *testing.T) {
361361
}
362362
missing("sp-ace", "/user2/readme-test/src/branch/sp-ace/")
363363
missing("nested-special", "/user2/readme-test/src/branch/special-subdir-nested/subproject") // the special subdirs should only trigger on the repo root
364-
// missing("special-subdir-nested", "/user2/readme-test/src/branch/special-subdir-nested/") // This is currently FAILING, due to a bug introduced in https://github.com/go-gitea/gitea/pull/22177
364+
missing("special-subdir-nested", "/user2/readme-test/src/branch/special-subdir-nested/")
365365
missing("symlink-loop", "/user2/readme-test/src/branch/symlink-loop/")
366366
}
367367

0 commit comments

Comments
 (0)