mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Avoid recursing into sub-sub-sub-docs folders when looking for READMEs. (#23695)
Fixes a bug introduced in https://github.com/go-gitea/gitea/pull/22177 which allows finding READMEs like docs/docs/docs/.gitea/.github/docs/README.md Fixes https://github.com/go-gitea/gitea/issues/23694
This commit is contained in:
		@@ -58,7 +58,7 @@ const (
 | 
				
			|||||||
//	entries == ctx.Repo.Commit.SubTree(ctx.Repo.TreePath).ListEntries()
 | 
					//	entries == ctx.Repo.Commit.SubTree(ctx.Repo.TreePath).ListEntries()
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// FIXME: There has to be a more efficient way of doing this
 | 
					// FIXME: There has to be a more efficient way of doing this
 | 
				
			||||||
func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (string, *git.TreeEntry, error) {
 | 
					func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry, tryWellKnownDirs bool) (string, *git.TreeEntry, error) {
 | 
				
			||||||
	// Create a list of extensions in priority order
 | 
						// Create a list of extensions in priority order
 | 
				
			||||||
	// 1. Markdown files - with and without localisation - e.g. README.en-us.md or README.md
 | 
						// 1. Markdown files - with and without localisation - e.g. README.en-us.md or README.md
 | 
				
			||||||
	// 2. Txt files - e.g. README.txt
 | 
						// 2. Txt files - e.g. README.txt
 | 
				
			||||||
@@ -69,7 +69,7 @@ func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (st
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	docsEntries := make([]*git.TreeEntry, 3) // (one of docs/, .gitea/ or .github/)
 | 
						docsEntries := make([]*git.TreeEntry, 3) // (one of docs/, .gitea/ or .github/)
 | 
				
			||||||
	for _, entry := range entries {
 | 
						for _, entry := range entries {
 | 
				
			||||||
		if entry.IsDir() {
 | 
							if tryWellKnownDirs && entry.IsDir() {
 | 
				
			||||||
			// as a special case for the top-level repo introduction README,
 | 
								// as a special case for the top-level repo introduction README,
 | 
				
			||||||
			// fall back to subfolders, looking for e.g. docs/README.md, .gitea/README.zh-CN.txt, .github/README.txt, ...
 | 
								// fall back to subfolders, looking for e.g. docs/README.md, .gitea/README.zh-CN.txt, .github/README.txt, ...
 | 
				
			||||||
			// (note that docsEntries is ignored unless we are at the root)
 | 
								// (note that docsEntries is ignored unless we are at the root)
 | 
				
			||||||
@@ -130,7 +130,7 @@ func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (st
 | 
				
			|||||||
				return "", nil, err
 | 
									return "", nil, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			subfolder, readmeFile, err := findReadmeFileInEntries(ctx, childEntries)
 | 
								subfolder, readmeFile, err := findReadmeFileInEntries(ctx, childEntries, false)
 | 
				
			||||||
			if err != nil && !git.IsErrNotExist(err) {
 | 
								if err != nil && !git.IsErrNotExist(err) {
 | 
				
			||||||
				return "", nil, err
 | 
									return "", nil, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -164,7 +164,7 @@ func renderDirectory(ctx *context.Context, treeLink string) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	subfolder, readmeFile, err := findReadmeFileInEntries(ctx, entries)
 | 
						subfolder, readmeFile, err := findReadmeFileInEntries(ctx, entries, true)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.ServerError("findReadmeFileInEntries", err)
 | 
							ctx.ServerError("findReadmeFileInEntries", err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -361,7 +361,7 @@ func TestViewRepoDirectoryReadme(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	missing("sp-ace", "/user2/readme-test/src/branch/sp-ace/")
 | 
						missing("sp-ace", "/user2/readme-test/src/branch/sp-ace/")
 | 
				
			||||||
	missing("nested-special", "/user2/readme-test/src/branch/special-subdir-nested/subproject") // the special subdirs should only trigger on the repo root
 | 
						missing("nested-special", "/user2/readme-test/src/branch/special-subdir-nested/subproject") // the special subdirs should only trigger on the repo root
 | 
				
			||||||
	// 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
 | 
						missing("special-subdir-nested", "/user2/readme-test/src/branch/special-subdir-nested/")
 | 
				
			||||||
	missing("symlink-loop", "/user2/readme-test/src/branch/symlink-loop/")
 | 
						missing("symlink-loop", "/user2/readme-test/src/branch/symlink-loop/")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user