// Determine if a file should be included, based on the given exclude paths. func shouldInclude(file string, excludePatterns []string, log termlog.Logger) bool { for _, pattern := range excludePatterns { match, err := doublestar.Match(pattern, file) if err != nil { log.Warn("Error matching pattern '%s': %s", pattern, err) } else if match { return false } } return true }
// Determine if a file should be included, based on the given exclude paths. func shouldInclude(file string, excludePatterns []string, log termlog.Logger) bool { for _, pattern := range excludePatterns { match, err := filepath.Match(pattern, file) if err != nil { log.Warn("Invalid pattern: `%s'", pattern) } else if match { return false } } return true }
// name is '/'-separated, not filepath.Separator. func (fserver *FileServer) serveFile( logger termlog.Logger, w http.ResponseWriter, r *http.Request, name string, redirect bool, ) { const indexPage = "/index.html" // redirect .../index.html to .../ // can't use Redirect() because that would make the path absolute, // which would be a problem running under StripPrefix if strings.HasSuffix(r.URL.Path, indexPage) { logger.SayAs( "debug", "debug fileserver: redirecting %s -> ./", indexPage, ) localRedirect(w, r, "./") return } f, err := fserver.Root.Open(name) if err != nil { logger.WarnAs("debug", "debug fileserver: %s", err) if err := notFound(fserver.Inject, fserver.Templates, w); err != nil { logger.Shout("Internal error: %s", err) } return } defer f.Close() d, err1 := f.Stat() if err1 != nil { logger.WarnAs("debug", "debug fileserver: %s", err) if err := notFound(fserver.Inject, fserver.Templates, w); err != nil { logger.Shout("Internal error: %s", err) } return } if redirect { // redirect to canonical path: / at end of directory url // r.URL.Path always begins with / url := r.URL.Path if d.IsDir() { if url[len(url)-1] != '/' { localRedirect(w, r, path.Base(url)+"/") return } } else { if url[len(url)-1] == '/' { localRedirect(w, r, "../"+path.Base(url)) return } } } // use contents of index.html for directory, if present if d.IsDir() { index := name + indexPage ff, err := fserver.Root.Open(index) if err == nil { defer ff.Close() dd, err := ff.Stat() if err == nil { name = index d = dd f = ff } } } // Still a directory? (we didn't find an index.html file) if d.IsDir() { if checkLastModified(w, r, d.ModTime()) { return } dirList(fserver.Inject, logger, w, name, f, fserver.Templates) return } // serverContent will check modification time sizeFunc := func() (int64, error) { return d.Size(), nil } err = serveContent(fserver.Inject, w, r, d.Name(), d.ModTime(), sizeFunc, f) if err != nil { logger.Warn("Error serving file: %s", err) } }
func testpatt(l termlog.Logger) { l.Say("Log") l.Notice("Notice!") l.Warn("Warn!") l.Shout("Error!") }