hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 72903be587e9c4e3644f60b11e26238ec03da2db
parent 1c114d539b0755724443fe28c90b12fe2a19085a
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Fri, 29 Dec 2017 09:37:37 +0100

commands: Make sure all language homes are always re-rendered in fast render mode

Fixes #4125

Diffstat:
Mcommands/hugo.go | 14+++++++++++---
Mhelpers/pathspec.go | 23++++++++++++++++-------
Mhelpers/url.go | 17+++++++++++++++++
3 files changed, 44 insertions(+), 10 deletions(-)
diff --git a/commands/hugo.go b/commands/hugo.go
@@ -940,9 +940,17 @@ func (c *commandeer) rebuildSites(events []fsnotify.Event) error {
 	visited := c.visitedURLs.PeekAllSet()
 	doLiveReload := !buildWatch && !c.Cfg.GetBool("disableLiveReload")
 	if doLiveReload && !c.Cfg.GetBool("disableFastRender") {
-		home := c.pathSpec.PrependBasePath("/")
-		// Make sure we always render the home page
-		visited[home] = true
+
+		// Make sure we always render the home pages
+		for _, l := range c.languages {
+			langPath := c.PathSpec().GetLangSubDir(l.Lang)
+			if langPath != "" {
+				langPath = langPath + "/"
+			}
+			home := c.pathSpec.PrependBasePath("/" + langPath)
+			visited[home] = true
+		}
+
 	}
 	return Hugo.Build(hugolib.BuildCfg{RecentlyVisited: visited}, events...)
 }
diff --git a/helpers/pathspec.go b/helpers/pathspec.go
@@ -31,8 +31,8 @@ type PathSpec struct {
 	uglyURLs           bool
 	canonifyURLs       bool
 
-	language *Language
-	//StatsCounter *siteSta
+	language  *Language
+	languages Languages
 
 	// pagination path handling
 	paginatePath string
@@ -85,9 +85,20 @@ func NewPathSpec(fs *hugofs.Fs, cfg config.Provider) (*PathSpec, error) {
 		staticDirs = append(staticDirs, getStringOrStringSlice(cfg, "staticDir", i)...)
 	}
 
-	var lang string
+	var (
+		lang      string
+		language  *Language
+		languages Languages
+	)
+
 	if l, ok := cfg.(*Language); ok {
+		language = l
 		lang = l.Lang
+
+	}
+
+	if l, ok := cfg.Get("languagesSorted").(Languages); ok {
+		languages = l
 	}
 
 	ps := &PathSpec{
@@ -98,6 +109,8 @@ func NewPathSpec(fs *hugofs.Fs, cfg config.Provider) (*PathSpec, error) {
 		uglyURLs:                       cfg.GetBool("uglyURLs"),
 		canonifyURLs:                   cfg.GetBool("canonifyURLs"),
 		multilingual:                   cfg.GetBool("multilingual"),
+		language:                       language,
+		languages:                      languages,
 		defaultContentLanguageInSubdir: cfg.GetBool("defaultContentLanguageInSubdir"),
 		defaultContentLanguage:         cfg.GetString("defaultContentLanguage"),
 		paginatePath:                   cfg.GetString("paginatePath"),
@@ -119,10 +132,6 @@ func NewPathSpec(fs *hugofs.Fs, cfg config.Provider) (*PathSpec, error) {
 
 	ps.PublishDir = publishDir
 
-	if language, ok := cfg.(*Language); ok {
-		ps.language = language
-	}
-
 	return ps, nil
 }
 
diff --git a/helpers/url.go b/helpers/url.go
@@ -215,6 +215,23 @@ func (p *PathSpec) getLanguagePrefix() string {
 	return currentLang
 }
 
+// GetLangSubDir returns the given language's subdir if needed.
+func (p *PathSpec) GetLangSubDir(lang string) string {
+	if !p.multilingual {
+		return ""
+	}
+
+	if p.languages.IsMultihost() {
+		return ""
+	}
+
+	if lang == "" || (lang == p.defaultContentLanguage && !p.defaultContentLanguageInSubdir) {
+		return ""
+	}
+
+	return lang
+}
+
 // IsAbsURL determines whether the given path points to an absolute URL.
 func IsAbsURL(path string) bool {
 	url, err := url.Parse(path)