From 6c6767e9622aca9a965ac51156b09f4130819d61 Mon Sep 17 00:00:00 2001 From: Pacien Date: Thu, 11 Jul 2013 12:25:32 +0200 Subject: Handle non-existent pages --- common.go | 13 ++++++++++--- dynamic.go | 7 ++++++- interactive.go | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/common.go b/common.go index 9985aaa..e6b93ae 100644 --- a/common.go +++ b/common.go @@ -67,7 +67,8 @@ func merge(files map[string][]byte) (merged []byte) { // COMPILED and INTERACTIVE modes -func parse(dirPath string, elements map[string][]byte, exts []string, overwrite bool) map[string][]byte { +func parse(dirPath string, elements map[string][]byte, exts []string, overwrite bool) (map[string][]byte, bool) { + parsed := false _, filesList := fcmd.Ls(dirPath) for _, fileName := range filesList { if isParsable(fileName, exts) && (overwrite || elements[fileName[:len(fileName)-len(path.Ext(fileName))]] == nil) { @@ -76,9 +77,10 @@ func parse(dirPath string, elements map[string][]byte, exts []string, overwrite if err != nil { fmt.Println(err) } + parsed = true } } - return elements + return elements, parsed } func compile(dirPath string, elements map[string][]byte, sourceDir, outputDir, saveAs string, exts []string, recursive bool) { @@ -88,7 +90,8 @@ func compile(dirPath string, elements map[string][]byte, sourceDir, outputDir, s return } - elements = parse(dirPath, elements, exts, true) + parsed := false + elements, parsed = parse(dirPath, elements, exts, true) if recursive { dirs, _ := fcmd.Ls(dirPath) @@ -98,6 +101,10 @@ func compile(dirPath string, elements map[string][]byte, sourceDir, outputDir, s } } + if !parsed { + return + } + pagePath := strings.TrimPrefix(dirPath, sourceDir) template := merge(elements) diff --git a/dynamic.go b/dynamic.go index ace70ed..9df04b9 100644 --- a/dynamic.go +++ b/dynamic.go @@ -46,7 +46,12 @@ func handle(w http.ResponseWriter, r *http.Request) { // parse these dirs elements := make(map[string][]byte) for i := len(dirs) - 1; i >= 0; i-- { - elements = parse(path.Join(*settings.sourceDir, dirs[i]), elements, settings.exts, false) + parsed := false + elements, parsed = parse(path.Join(*settings.sourceDir, dirs[i]), elements, settings.exts, false) + if (i == len(dirs)-1) && !parsed { + http.Error(w, "404 page not found", http.StatusNotFound) + return + } } // render the page diff --git a/interactive.go b/interactive.go index 1baa4cc..221a189 100644 --- a/interactive.go +++ b/interactive.go @@ -46,7 +46,7 @@ func parseParents(dir, sourceDir string, exts []string) map[string][]byte { dirs := strings.Split(strings.TrimPrefix(dir, sourceDir), "/") elements := make(map[string][]byte) for _, dir := range dirs { - elements = parse(path.Join(sourceDir, dir), elements, exts, false) + elements, _ = parse(path.Join(sourceDir, dir), elements, exts, false) } return elements } -- cgit v1.2.3