]> source.dussan.org Git - gitea.git/commitdiff
Fix rendering of wiki page list if wiki repo contains other files (#3454)
authorLauris BH <lauris@nix.lv>
Mon, 5 Feb 2018 14:56:30 +0000 (16:56 +0200)
committerGitHub <noreply@github.com>
Mon, 5 Feb 2018 14:56:30 +0000 (16:56 +0200)
* Fix rendering of wiki page list if wiki repo contains other files

* Improve wiki filename tests

models/error.go
models/wiki.go
models/wiki_test.go
routers/repo/wiki.go

index cd96fa9256a4828aff2e162fd9e1a8f84a0b0d8c..a1c24f4ec074eaac608362f4ec89a6d6b80e1091 100644 (file)
@@ -216,6 +216,21 @@ func (err ErrWikiReservedName) Error() string {
        return fmt.Sprintf("wiki title is reserved: %s", err.Title)
 }
 
+// ErrWikiInvalidFileName represents an invalid wiki file name.
+type ErrWikiInvalidFileName struct {
+       FileName string
+}
+
+// IsErrWikiInvalidFileName checks if an error is an ErrWikiInvalidFileName.
+func IsErrWikiInvalidFileName(err error) bool {
+       _, ok := err.(ErrWikiInvalidFileName)
+       return ok
+}
+
+func (err ErrWikiInvalidFileName) Error() string {
+       return fmt.Sprintf("Invalid wiki filename: %s", err.FileName)
+}
+
 // __________     ___.   .__  .__          ____  __.
 // \______   \__ _\_ |__ |  | |__| ____   |    |/ _|____ ___.__.
 //  |     ___/  |  \ __ \|  | |  |/ ___\  |      <_/ __ <   |  |
index 3a39daf0f64d68c752122ba6eaa9db57618a4f49..3e0d1b9ce8213ca55cbe31195080387dcd32310c 100644 (file)
@@ -45,7 +45,7 @@ func WikiNameToFilename(name string) string {
 // WikiFilenameToName converts a wiki filename to its corresponding page name.
 func WikiFilenameToName(filename string) (string, error) {
        if !strings.HasSuffix(filename, ".md") {
-               return "", fmt.Errorf("Invalid wiki filename: %s", filename)
+               return "", ErrWikiInvalidFileName{filename}
        }
        basename := filename[:len(filename)-3]
        unescaped, err := url.QueryUnescape(basename)
index 80f6df55ecdc9da9ef1a088b5948d7ce17f4c18a..a142a58f357b01ab382cee54d833604daba1b836 100644 (file)
@@ -77,11 +77,14 @@ func TestWikiFilenameToName(t *testing.T) {
        for _, badFilename := range []string{
                "nofileextension",
                "wrongfileextension.txt",
-               "badescaping%%.md",
        } {
                _, err := WikiFilenameToName(badFilename)
                assert.Error(t, err)
+               assert.True(t, IsErrWikiInvalidFileName(err))
        }
+       _, err := WikiFilenameToName("badescaping%%.md")
+       assert.Error(t, err)
+       assert.False(t, IsErrWikiInvalidFileName(err))
 }
 
 func TestWikiNameToFilenameToName(t *testing.T) {
index 7befe7c687ee4109855f32c4dd2f74a776e93359..87cb9f30374ca0417536f58c11fe710b592a2a36 100644 (file)
@@ -128,6 +128,9 @@ func renderWikiPage(ctx *context.Context, isViewPage bool) (*git.Repository, *gi
                        }
                        wikiName, err := models.WikiFilenameToName(entry.Name())
                        if err != nil {
+                               if models.IsErrWikiInvalidFileName(err) {
+                                       continue
+                               }
                                ctx.ServerError("WikiFilenameToName", err)
                                return nil, nil
                        } else if wikiName == "_Sidebar" || wikiName == "_Footer" {
@@ -262,6 +265,9 @@ func WikiPages(ctx *context.Context) {
                }
                wikiName, err := models.WikiFilenameToName(entry.Name())
                if err != nil {
+                       if models.IsErrWikiInvalidFileName(err) {
+                               continue
+                       }
                        ctx.ServerError("WikiFilenameToName", err)
                        return
                }