shithub: hugo

Download patch

ref: a40bd3caf16ecabc189dd6e676792555d175540b
parent: e2634752ce7dcc2f6cf1902b0409206e0ed8a571
author: spf13 <[email protected]>
date: Tue Nov 4 15:19:45 EST 2014

rewriting guessSection to accurately reflect intent and usage. Update tests.

--- a/helpers/path.go
+++ b/helpers/path.go
@@ -209,36 +209,37 @@
 }
 
 // Given a source path, determine the section
+// A section is the part between the root slash and the second slash or before the first slash
 func GuessSection(in string) string {
 	parts := strings.Split(in, "/")
+	// This will include an empty entry before and after paths with leading and trailing slashes
+	// eg... /sect/one/ -> ["", "sect", "one", ""]
 
-	if len(parts) == 0 {
+	// Needs to have at least a value and a slash
+	if len(parts) < 2 {
 		return ""
 	}
 
-	// trim filename
-	if !strings.HasSuffix(in, "/") {
-		parts = parts[:len(parts)-1]
+	// If it doesn't have a leading slash and value and file or trailing slash, then return ""
+	if parts[0] == "" && len(parts) < 3 {
+		return ""
 	}
 
-	if len(parts) == 0 {
-		return ""
+	// strip leading slash
+	if parts[0] == "" {
+		parts = parts[1:]
 	}
 
 	// if first directory is "content", return second directory
-	section := ""
-
-	if parts[0] == "content" && len(parts) > 1 {
-		section = parts[1]
-	} else {
-		section = parts[0]
+	if parts[0] == "content" {
+		if len(parts) > 2 {
+			return parts[1]
+		} else {
+			return ""
+		}
 	}
 
-	if section == "." {
-		return ""
-	}
-
-	return section
+	return parts[0]
 }
 
 func PathPrep(ugly bool, in string) string {
--- a/helpers/path_test.go
+++ b/helpers/path_test.go
@@ -423,17 +423,20 @@
 		{"", ""},
 		{"/content", ""},
 		{"content/", ""},
-		{"/content/", "content"},
+		{"/content/", ""}, // /content/ is a special case. It will never be the section
 		{"/blog", ""},
 		{"/blog/", "blog"},
 		{"blog", ""},
 		{"content/blog", ""},
 		{"/content/blog/", "blog"},
-		{"/content/blog", "blog"},
-		{"content/blog/", ""},
+		{"/content/blog", ""}, // Lack of trailing slash indicates 'blog' is not a directory.
+		{"content/blog/", "blog"},
 		{"/contents/myblog/", "contents"},
 		{"/contents/yourblog", "contents"},
 		{"/contents/ourblog/", "contents"},
+		{"/content/myblog/", "myblog"},
+		{"/content/yourblog", ""},
+		{"/content/ourblog/", "ourblog"},
 	}
 
 	for i, d := range data {