shithub: hugo

Download patch

ref: beeae6ab69b0cbb4daba7a1044308bd157df77ab
parent: beaa1b3aad578ebbbdf426321ed1758eb1068946
author: bep <[email protected]>
date: Wed Jun 3 14:54:30 EDT 2015

Add some tests for IgnoreFiles

And log error on invalid regexp.

See #1189

--- a/helpers/general.go
+++ b/helpers/general.go
@@ -198,12 +198,12 @@
 }
 
 // Avoid spamming the logs with errors
-var deprecatedLogger = NewDistinctErrorLogger()
+var DistinctErrorLog = NewDistinctErrorLogger()
 
 // Deprecated logs ERROR logs about a deprecation, but only once for a given set of arguments' values.
 func Deprecated(object, item, alternative string) {
 	//	deprecatedLogger.Printf("%s's %s is deprecated and will be removed in Hugo %s. Use %s instead.", object, item, NextHugoReleaseVersion(), alternative)
-	deprecatedLogger.Printf("%s's %s is deprecated and will be removed VERY SOON. Use %s instead.", object, item, alternative)
+	DistinctErrorLog.Printf("%s's %s is deprecated and will be removed VERY SOON. Use %s instead.", object, item, alternative)
 
 }
 
--- a/source/content_directory_test.go
+++ b/source/content_directory_test.go
@@ -1,29 +1,41 @@
 package source
 
 import (
+	"github.com/spf13/viper"
 	"testing"
 )
 
 func TestIgnoreDotFilesAndDirectories(t *testing.T) {
+	viper.Reset()
+	defer viper.Reset()
+
 	tests := []struct {
-		path   string
-		ignore bool
+		path                string
+		ignore              bool
+		ignoreFilesRegexpes interface{}
 	}{
-		{".foobar/", true},
-		{"foobar/.barfoo/", true},
-		{"barfoo.md", false},
-		{"foobar/barfoo.md", false},
-		{"foobar/.barfoo.md", true},
-		{".barfoo.md", true},
-		{".md", true},
-		{"", true},
-		{"foobar/barfoo.md~", true},
-		{".foobar/barfoo.md~", true},
-		{"foobar~/barfoo.md", false},
-		{"foobar/bar~foo.md", false},
+		{".foobar/", true, nil},
+		{"foobar/.barfoo/", true, nil},
+		{"barfoo.md", false, nil},
+		{"foobar/barfoo.md", false, nil},
+		{"foobar/.barfoo.md", true, nil},
+		{".barfoo.md", true, nil},
+		{".md", true, nil},
+		{"", true, nil},
+		{"foobar/barfoo.md~", true, nil},
+		{".foobar/barfoo.md~", true, nil},
+		{"foobar~/barfoo.md", false, nil},
+		{"foobar/bar~foo.md", false, nil},
+		{"foobar/foo.md", true, []string{"\\.md$", "\\.boo$"}},
+		{"foobar/foo.html", false, []string{"\\.md$", "\\.boo$"}},
+		{"foobar/foo.md", true, []string{"^foo"}},
+		{"foobar/foo.md", false, []string{"*", "\\.md$", "\\.boo$"}},
 	}
 
 	for _, test := range tests {
+
+		viper.Set("ignoreFiles", test.ignoreFilesRegexpes)
+
 		if ignored := isNonProcessablePath(test.path); test.ignore != ignored {
 			t.Errorf("File not ignored.  Expected: %t, got: %t", test.ignore, ignored)
 		}
--- a/source/filesystem.go
+++ b/source/filesystem.go
@@ -151,8 +151,11 @@
 	ignoreFiles := viper.GetStringSlice("IgnoreFiles")
 	if len(ignoreFiles) > 0 {
 		for _, ignorePattern := range ignoreFiles {
-			match, _ := regexp.MatchString(ignorePattern, filePath)
-			if match {
+			match, err := regexp.MatchString(ignorePattern, filePath)
+			if err != nil {
+				helpers.DistinctErrorLog.Printf("Invalid regexp '%s' in ignoreFiles: %s", ignorePattern, err)
+				return false
+			} else if match {
 				return true
 			}
 		}