Skip to content

Commit 7b5b739

Browse files
authored
Move IsReadmeFile* from modules/markup/ to modules/util (#22877)
These functions don't examine contents, just filenames, so they don't fit in well in a markup module. This was originally part of #22177. Signed-off-by: Nick Guenther <[email protected]>
1 parent 51383ec commit 7b5b739

File tree

5 files changed

+122
-131
lines changed

5 files changed

+122
-131
lines changed

modules/markup/renderer.go

-38
Original file line numberDiff line numberDiff line change
@@ -317,41 +317,3 @@ func IsMarkupFile(name, markup string) bool {
317317
}
318318
return false
319319
}
320-
321-
// IsReadmeFile reports whether name looks like a README file
322-
// based on its name.
323-
func IsReadmeFile(name string) bool {
324-
name = strings.ToLower(name)
325-
if len(name) < 6 {
326-
return false
327-
} else if len(name) == 6 {
328-
return name == "readme"
329-
}
330-
return name[:7] == "readme."
331-
}
332-
333-
// IsReadmeFileExtension reports whether name looks like a README file
334-
// based on its name. It will look through the provided extensions and check if the file matches
335-
// one of the extensions and provide the index in the extension list.
336-
// If the filename is `readme.` with an unmatched extension it will match with the index equaling
337-
// the length of the provided extension list.
338-
// Note that the '.' should be provided in ext, e.g ".md"
339-
func IsReadmeFileExtension(name string, ext ...string) (int, bool) {
340-
name = strings.ToLower(name)
341-
if len(name) < 6 || name[:6] != "readme" {
342-
return 0, false
343-
}
344-
345-
for i, extension := range ext {
346-
extension = strings.ToLower(extension)
347-
if name[6:] == extension {
348-
return i, true
349-
}
350-
}
351-
352-
if name[6] == '.' {
353-
return len(ext), true
354-
}
355-
356-
return 0, false
357-
}

modules/markup/renderer_test.go

-91
Original file line numberDiff line numberDiff line change
@@ -2,94 +2,3 @@
22
// SPDX-License-Identifier: MIT
33

44
package markup_test
5-
6-
import (
7-
"testing"
8-
9-
. "code.gitea.io/gitea/modules/markup"
10-
11-
_ "code.gitea.io/gitea/modules/markup/markdown"
12-
13-
"github.com/stretchr/testify/assert"
14-
)
15-
16-
func TestMisc_IsReadmeFile(t *testing.T) {
17-
trueTestCases := []string{
18-
"readme",
19-
"README",
20-
"readME.mdown",
21-
"README.md",
22-
"readme.i18n.md",
23-
}
24-
falseTestCases := []string{
25-
"test.md",
26-
"wow.MARKDOWN",
27-
"LOL.mDoWn",
28-
"test",
29-
"abcdefg",
30-
"abcdefghijklmnopqrstuvwxyz",
31-
"test.md.test",
32-
"readmf",
33-
}
34-
35-
for _, testCase := range trueTestCases {
36-
assert.True(t, IsReadmeFile(testCase))
37-
}
38-
for _, testCase := range falseTestCases {
39-
assert.False(t, IsReadmeFile(testCase))
40-
}
41-
42-
type extensionTestcase struct {
43-
name string
44-
expected bool
45-
idx int
46-
}
47-
48-
exts := []string{".md", ".txt", ""}
49-
testCasesExtensions := []extensionTestcase{
50-
{
51-
name: "readme",
52-
expected: true,
53-
idx: 2,
54-
},
55-
{
56-
name: "readme.md",
57-
expected: true,
58-
idx: 0,
59-
},
60-
{
61-
name: "README.md",
62-
expected: true,
63-
idx: 0,
64-
},
65-
{
66-
name: "ReAdMe.Md",
67-
expected: true,
68-
idx: 0,
69-
},
70-
{
71-
name: "readme.txt",
72-
expected: true,
73-
idx: 1,
74-
},
75-
{
76-
name: "readme.doc",
77-
expected: true,
78-
idx: 3,
79-
},
80-
{
81-
name: "readmee.md",
82-
},
83-
{
84-
name: "readme..",
85-
expected: true,
86-
idx: 3,
87-
},
88-
}
89-
90-
for _, testCase := range testCasesExtensions {
91-
idx, ok := IsReadmeFileExtension(testCase.name, exts...)
92-
assert.Equal(t, testCase.expected, ok)
93-
assert.Equal(t, testCase.idx, idx)
94-
}
95-
}

modules/util/path.go

+39
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"path/filepath"
1212
"regexp"
1313
"runtime"
14+
"strings"
1415
)
1516

1617
// EnsureAbsolutePath ensure that a path is absolute, making it
@@ -201,3 +202,41 @@ func CommonSkip(name string) bool {
201202

202203
return false
203204
}
205+
206+
// IsReadmeFileName reports whether name looks like a README file
207+
// based on its name.
208+
func IsReadmeFileName(name string) bool {
209+
name = strings.ToLower(name)
210+
if len(name) < 6 {
211+
return false
212+
} else if len(name) == 6 {
213+
return name == "readme"
214+
}
215+
return name[:7] == "readme."
216+
}
217+
218+
// IsReadmeFileExtension reports whether name looks like a README file
219+
// based on its name. It will look through the provided extensions and check if the file matches
220+
// one of the extensions and provide the index in the extension list.
221+
// If the filename is `readme.` with an unmatched extension it will match with the index equaling
222+
// the length of the provided extension list.
223+
// Note that the '.' should be provided in ext, e.g ".md"
224+
func IsReadmeFileExtension(name string, ext ...string) (int, bool) {
225+
name = strings.ToLower(name)
226+
if len(name) < 6 || name[:6] != "readme" {
227+
return 0, false
228+
}
229+
230+
for i, extension := range ext {
231+
extension = strings.ToLower(extension)
232+
if name[6:] == extension {
233+
return i, true
234+
}
235+
}
236+
237+
if name[6] == '.' {
238+
return len(ext), true
239+
}
240+
241+
return 0, false
242+
}

modules/util/path_test.go

+81
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,84 @@ func TestFileURLToPath(t *testing.T) {
5555
}
5656
}
5757
}
58+
59+
func TestMisc_IsReadmeFileName(t *testing.T) {
60+
trueTestCases := []string{
61+
"readme",
62+
"README",
63+
"readME.mdown",
64+
"README.md",
65+
"readme.i18n.md",
66+
}
67+
falseTestCases := []string{
68+
"test.md",
69+
"wow.MARKDOWN",
70+
"LOL.mDoWn",
71+
"test",
72+
"abcdefg",
73+
"abcdefghijklmnopqrstuvwxyz",
74+
"test.md.test",
75+
"readmf",
76+
}
77+
78+
for _, testCase := range trueTestCases {
79+
assert.True(t, IsReadmeFileName(testCase))
80+
}
81+
for _, testCase := range falseTestCases {
82+
assert.False(t, IsReadmeFileName(testCase))
83+
}
84+
85+
type extensionTestcase struct {
86+
name string
87+
expected bool
88+
idx int
89+
}
90+
91+
exts := []string{".md", ".txt", ""}
92+
testCasesExtensions := []extensionTestcase{
93+
{
94+
name: "readme",
95+
expected: true,
96+
idx: 2,
97+
},
98+
{
99+
name: "readme.md",
100+
expected: true,
101+
idx: 0,
102+
},
103+
{
104+
name: "README.md",
105+
expected: true,
106+
idx: 0,
107+
},
108+
{
109+
name: "ReAdMe.Md",
110+
expected: true,
111+
idx: 0,
112+
},
113+
{
114+
name: "readme.txt",
115+
expected: true,
116+
idx: 1,
117+
},
118+
{
119+
name: "readme.doc",
120+
expected: true,
121+
idx: 3,
122+
},
123+
{
124+
name: "readmee.md",
125+
},
126+
{
127+
name: "readme..",
128+
expected: true,
129+
idx: 3,
130+
},
131+
}
132+
133+
for _, testCase := range testCasesExtensions {
134+
idx, ok := IsReadmeFileExtension(testCase.name, exts...)
135+
assert.Equal(t, testCase.expected, ok)
136+
assert.Equal(t, testCase.idx, idx)
137+
}
138+
}

routers/web/repo/view.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func findReadmeFileInEntries(ctx *context.Context, entries []*git.TreeEntry) (*n
9696
}
9797
continue
9898
}
99-
if i, ok := markup.IsReadmeFileExtension(entry.Name(), exts...); ok {
99+
if i, ok := util.IsReadmeFileExtension(entry.Name(), exts...); ok {
100100
log.Debug("Potential readme file: %s", entry.Name())
101101
if readmeFiles[i] == nil || base.NaturalSortLess(readmeFiles[i].name, entry.Blob().Name()) {
102102
name := entry.Name()
@@ -423,7 +423,7 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
423423
rd := charset.ToUTF8WithFallbackReader(io.MultiReader(bytes.NewReader(buf), dataRc))
424424

425425
shouldRenderSource := ctx.FormString("display") == "source"
426-
readmeExist := markup.IsReadmeFile(blob.Name())
426+
readmeExist := util.IsReadmeFileName(blob.Name())
427427
ctx.Data["ReadmeExist"] = readmeExist
428428

429429
markupType := markup.Type(blob.Name())

0 commit comments

Comments
 (0)