From 72903be587e9c4e3644f60b11e26238ec03da2db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 29 Dec 2017 09:37:37 +0100 Subject: [PATCH] commands: Make sure all language homes are always re-rendered in fast render mode Fixes #4125 --- commands/hugo.go | 14 +++++++++++--- helpers/pathspec.go | 23 ++++++++++++++++------- helpers/url.go | 17 +++++++++++++++++ 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/commands/hugo.go b/commands/hugo.go index 200a5e1c3..743c5a267 100644 --- 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 index d5a2c92e8..281203712 100644 --- 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 index 9c1a643cc..8faefeefa 100644 --- 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)