}
// IsReadmeFile reports whether name looks like a README file
-// based on its name.
-func IsReadmeFile(name string) bool {
+// based on its name. If an extension is provided, it will strictly
+// match that extension.
+// Note that the '.' should be provided in ext, e.g ".md"
+func IsReadmeFile(name string, ext ...string) bool {
name = strings.ToLower(name)
+ if len(ext) > 0 {
+ return name == "readme"+ext[0]
+ }
if len(name) < 6 {
return false
} else if len(name) == 6 {
"README",
"readME.mdown",
"README.md",
+ "readme.i18n.md",
}
falseTestCases := []string{
"test.md",
for _, testCase := range falseTestCases {
assert.False(t, IsReadmeFile(testCase))
}
+
+ trueTestCasesStrict := [][]string{
+ {"readme", ""},
+ {"readme.md", ".md"},
+ {"readme.txt", ".txt"},
+ }
+ falseTestCasesStrict := [][]string{
+ {"readme", ".md"},
+ {"readme.md", ""},
+ {"readme.md", ".txt"},
+ {"readme.md", "md"},
+ {"readmee.md", ".md"},
+ {"readme.i18n.md", ".md"},
+ }
+
+ for _, testCase := range trueTestCasesStrict {
+ assert.True(t, IsReadmeFile(testCase[0], testCase[1]))
+ }
+ for _, testCase := range falseTestCasesStrict {
+ assert.False(t, IsReadmeFile(testCase[0], testCase[1]))
+ }
}
return
}
- var readmeFile *git.Blob
+ // 3 for the extensions in exts[] in order
+ // the last one is for a readme that doesn't
+ // strictly match an extension
+ var readmeFiles [4]*git.Blob
+ var exts = []string{".md", ".txt", ""} // sorted by priority
for _, entry := range entries {
if entry.IsDir() {
continue
}
- if !markup.IsReadmeFile(entry.Name()) {
- continue
+ for i, ext := range exts {
+ if markup.IsReadmeFile(entry.Name(), ext) {
+ readmeFiles[i] = entry.Blob()
+ }
}
- readmeFile = entry.Blob()
- if markup.Type(entry.Name()) != "" {
+ if markup.IsReadmeFile(entry.Name()) {
+ readmeFiles[3] = entry.Blob()
+ }
+ }
+
+ var readmeFile *git.Blob
+ for _, f := range readmeFiles {
+ if f != nil {
+ readmeFile = f
break
}
}