summaryrefslogtreecommitdiffstats
path: root/hugolib
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-07-26 10:24:27 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-09-06 18:32:16 +0300
commit75dd596e6c38466fcb97a8b9dc9eb20fc2fb7fd6 (patch)
tree37f43d8af433033996fbae9d2b3914888144c60a /hugolib
parent618948e4a83665f8355b01d8a3f7a7186e6bd3eb (diff)
Introduce HugoSites type
And a Hugo global variable which contains the site under build. This is really needed to get some level of control of the "multiple languages" in play. There are still work related to this scattered around, but that will come. With this commit, the multilingual feature is starting to work.
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/datafiles_test.go4
-rw-r--r--hugolib/handler_test.go1
-rw-r--r--hugolib/menu_test.go1
-rw-r--r--hugolib/multilingual.go21
-rw-r--r--hugolib/pagination_test.go14
-rw-r--r--hugolib/robotstxt_test.go1
-rw-r--r--hugolib/rss_test.go1
-rw-r--r--hugolib/shortcode_test.go1
-rw-r--r--hugolib/site.go41
-rw-r--r--hugolib/site_test.go14
-rw-r--r--hugolib/site_url_test.go3
-rw-r--r--hugolib/siteinfo_test.go4
-rw-r--r--hugolib/sitemap_test.go4
13 files changed, 67 insertions, 43 deletions
diff --git a/hugolib/datafiles_test.go b/hugolib/datafiles_test.go
index d57773579..36325dc61 100644
--- a/hugolib/datafiles_test.go
+++ b/hugolib/datafiles_test.go
@@ -87,7 +87,7 @@ func TestDataDirUnknownFormat(t *testing.T) {
sources := []source.ByteSource{
{Name: filepath.FromSlash("test.roml"), Content: []byte("boo")},
}
- s := &Site{}
+ s := newSiteDefaultLang()
err := s.loadData([]source.Input{&source.InMemorySource{ByteSource: sources}})
if err != nil {
t.Fatalf("Should not return an error")
@@ -95,7 +95,7 @@ func TestDataDirUnknownFormat(t *testing.T) {
}
func doTestDataDir(t *testing.T, expected interface{}, sources []source.Input) {
- s := &Site{}
+ s := newSiteDefaultLang()
err := s.loadData(sources)
if err != nil {
t.Fatalf("Error loading data: %s", err)
diff --git a/hugolib/handler_test.go b/hugolib/handler_test.go
index 1b0a82418..a84d528cb 100644
--- a/hugolib/handler_test.go
+++ b/hugolib/handler_test.go
@@ -47,6 +47,7 @@ func TestDefaultHandler(t *testing.T) {
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
targets: targetList{page: &target.PagePub{UglyURLs: true}},
+ Lang: NewLanguage("en"),
}
s.initializeSiteInfo()
diff --git a/hugolib/menu_test.go b/hugolib/menu_test.go
index 602775a4b..03219a48a 100644
--- a/hugolib/menu_test.go
+++ b/hugolib/menu_test.go
@@ -683,6 +683,7 @@ func createTestSite(pageSources []source.ByteSource) *Site {
s := &Site{
Source: &source.InMemorySource{ByteSource: pageSources},
+ Lang: newDefaultLanguage(),
}
return s
}
diff --git a/hugolib/multilingual.go b/hugolib/multilingual.go
index becdd5ba1..c75f504ef 100644
--- a/hugolib/multilingual.go
+++ b/hugolib/multilingual.go
@@ -22,6 +22,11 @@ func NewLanguage(lang string) *Language {
return &Language{Lang: lang, params: make(map[string]interface{})}
}
+// TODO(bep) multilingo
+func newDefaultLanguage() *Language {
+ return NewLanguage("en")
+}
+
type Languages []*Language
func NewLanguages(l ...*Language) Languages {
@@ -93,10 +98,9 @@ func (l *Language) Get(key string) interface{} {
return viper.Get(key)
}
+// TODO(bep) multilingo move this to a constructor.
func (s *Site) SetMultilingualConfig(currentLang *Language, languages Languages) {
- // TODO(bep) multilingo evaluate
- viper.Set("CurrentLanguage", currentLang)
ml := &Multilingual{
Languages: languages,
}
@@ -108,14 +112,11 @@ func (s *Site) multilingualEnabled() bool {
return s.Multilingual != nil && s.Multilingual.enabled()
}
-func currentLanguageString() string {
- return currentLanguage().Lang
+// TODO(bep) multilingo remove these
+func (s *Site) currentLanguageString() string {
+ return s.currentLanguage().Lang
}
-func currentLanguage() *Language {
- l := viper.Get("CurrentLanguage")
- if l == nil {
- panic("CurrentLanguage not set")
- }
- return l.(*Language)
+func (s *Site) currentLanguage() *Language {
+ return s.Lang
}
diff --git a/hugolib/pagination_test.go b/hugolib/pagination_test.go
index 9b311cb34..080e6bee9 100644
--- a/hugolib/pagination_test.go
+++ b/hugolib/pagination_test.go
@@ -226,7 +226,7 @@ func doTestPaginator(t *testing.T, useViper bool) {
viper.Set("paginate", -1)
}
pages := createTestPages(12)
- s := &Site{}
+ s := newSiteDefaultLang()
n1 := s.newHomeNode()
n2 := s.newHomeNode()
n1.Data["Pages"] = pages
@@ -264,7 +264,7 @@ func TestPaginatorWithNegativePaginate(t *testing.T) {
defer viper.Reset()
viper.Set("paginate", -1)
- s := &Site{}
+ s := newSiteDefaultLang()
_, err := s.newHomeNode().Paginator()
assert.NotNil(t, err)
}
@@ -287,7 +287,7 @@ func doTestPaginate(t *testing.T, useViper bool) {
}
pages := createTestPages(6)
- s := &Site{}
+ s := newSiteDefaultLang()
n1 := s.newHomeNode()
n2 := s.newHomeNode()
@@ -320,7 +320,7 @@ func doTestPaginate(t *testing.T, useViper bool) {
}
func TestInvalidOptions(t *testing.T) {
- s := &Site{}
+ s := newSiteDefaultLang()
n1 := s.newHomeNode()
_, err := n1.Paginate(createTestPages(1), 1, 2)
assert.NotNil(t, err)
@@ -335,7 +335,7 @@ func TestPaginateWithNegativePaginate(t *testing.T) {
defer viper.Reset()
viper.Set("paginate", -1)
- s := &Site{}
+ s := newSiteDefaultLang()
_, err := s.newHomeNode().Paginate(createTestPages(2))
assert.NotNil(t, err)
}
@@ -358,7 +358,7 @@ func TestPaginatorFollowedByPaginateShouldFail(t *testing.T) {
defer viper.Reset()
viper.Set("paginate", 10)
- s := &Site{}
+ s := newSiteDefaultLang()
n1 := s.newHomeNode()
n2 := s.newHomeNode()
@@ -377,7 +377,7 @@ func TestPaginateFollowedByDifferentPaginateShouldFail(t *testing.T) {
defer viper.Reset()
viper.Set("paginate", 10)
- s := &Site{}
+ s := newSiteDefaultLang()
n1 := s.newHomeNode()
n2 := s.newHomeNode()
diff --git a/hugolib/robotstxt_test.go b/hugolib/robotstxt_test.go
index 461d04e5d..8e4b13db6 100644
--- a/hugolib/robotstxt_test.go
+++ b/hugolib/robotstxt_test.go
@@ -40,6 +40,7 @@ func TestRobotsTXTOutput(t *testing.T) {
s := &Site{
Source: &source.InMemorySource{ByteSource: weightedSources},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
diff --git a/hugolib/rss_test.go b/hugolib/rss_test.go
index ec6ee87bd..72ec25fca 100644
--- a/hugolib/rss_test.go
+++ b/hugolib/rss_test.go
@@ -55,6 +55,7 @@ func TestRSSOutput(t *testing.T) {
hugofs.InitMemFs()
s := &Site{
Source: &source.InMemorySource{ByteSource: weightedSources},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
s.prepTemplates("rss.xml", rssTemplate)
diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go
index 85cfdcbc2..d0832d2ea 100644
--- a/hugolib/shortcode_test.go
+++ b/hugolib/shortcode_test.go
@@ -499,6 +499,7 @@ e`,
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
targets: targetList{page: &target.PagePub{UglyURLs: false}},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
diff --git a/hugolib/site.go b/hugolib/site.go
index b2a9161f4..bbaa1e019 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -92,6 +92,21 @@ type Site struct {
futureCount int
expiredCount int
Data map[string]interface{}
+ Lang *Language
+}
+
+// TODO(bep) multilingo
+// Reset returns a new Site prepared for rebuild.
+func (s *Site) Reset() *Site {
+ return &Site{Lang: s.Lang, Multilingual: s.Multilingual}
+}
+
+func NewSite(lang *Language) *Site {
+ return &Site{Lang: lang}
+}
+
+func newSiteDefaultLang() *Site {
+ return NewSite(newDefaultLanguage())
}
type targetList struct {
@@ -705,7 +720,7 @@ func (s *Site) Process() (err error) {
i18nSources = []source.Input{&source.Filesystem{Base: themeI18nDir}, i18nSources[0]}
}
- if err = loadI18n(i18nSources, currentLanguageString()); err != nil {
+ if err = loadI18n(i18nSources, s.currentLanguageString()); err != nil {
return
}
s.timerStep("load i18n")
@@ -742,7 +757,7 @@ func (s *Site) setupTranslations() {
return
}
- currentLang := currentLanguageString()
+ currentLang := s.currentLanguageString()
allTranslations := pagesToTranslationsMap(s.Multilingual, s.AllPages)
assignTranslationsToPages(allTranslations, s.AllPages)
@@ -819,20 +834,10 @@ func (s *Site) initialize() (err error) {
func (s *Site) initializeSiteInfo() {
var (
- lang *Language
+ lang *Language = s.Lang
languages Languages
)
- cl := viper.Get("CurrentLanguage")
- if cl == nil {
- // Set default to english
- // TODO(bep) multilingo this looks clumsy
- lang = NewLanguage("en")
- viper.Set("CurrentLanguage", lang)
- } else {
- lang = cl.(*Language)
- }
-
if s.Multilingual != nil {
languages = s.Multilingual.Languages
}
@@ -1610,7 +1615,7 @@ func (s *Site) newTaxonomyNode(t taxRenderInfo) (*Node, string) {
func (s *Site) addMultilingualPrefix(basePath string) string {
hadPrefix := strings.HasPrefix(basePath, "/")
if s.multilingualEnabled() {
- basePath = path.Join(currentLanguageString(), basePath)
+ basePath = path.Join(s.currentLanguageString(), basePath)
if hadPrefix {
basePath = "/" + basePath
}
@@ -1961,7 +1966,7 @@ func (s *Site) renderRobotsTXT() error {
// Stats prints Hugo builds stats to the console.
// This is what you see after a successful hugo build.
-func (s *Site) Stats(lang string, t0 time.Time) {
+func (s *Site) Stats(t0 time.Time) {
jww.FEEDBACK.Println(s.draftStats())
jww.FEEDBACK.Println(s.futureStats())
jww.FEEDBACK.Println(s.expiredStats())
@@ -1974,9 +1979,9 @@ func (s *Site) Stats(lang string, t0 time.Time) {
jww.FEEDBACK.Printf("%d %s created\n", len(s.Taxonomies[pl]), pl)
}
- if lang != "" {
- jww.FEEDBACK.Printf("rendered lang %q in %v ms\n", lang, int(1000*time.Since(t0).Seconds()))
- }
+ // TODO(bep) will always have lang. Not sure this should always be printed.
+ jww.FEEDBACK.Printf("rendered lang %q in %v ms\n", s.Lang.Lang, int(1000*time.Since(t0).Seconds()))
+
}
func (s *Site) setURLs(n *Node, in string) {
diff --git a/hugolib/site_test.go b/hugolib/site_test.go
index 78004aac4..ecf3d834d 100644
--- a/hugolib/site_test.go
+++ b/hugolib/site_test.go
@@ -215,7 +215,7 @@ func TestRenderThingOrDefault(t *testing.T) {
for i, test := range tests {
- s := &Site{}
+ s := newSiteDefaultLang()
p, err := NewPageFrom(strings.NewReader(pageSimpleTitle), "content/a/file.md")
if err != nil {
@@ -262,6 +262,7 @@ func TestDraftAndFutureRender(t *testing.T) {
siteSetup := func() *Site {
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
@@ -320,6 +321,7 @@ func TestFutureExpirationRender(t *testing.T) {
siteSetup := func() *Site {
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
@@ -413,6 +415,7 @@ THE END.`, refShortcode)),
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
targets: targetList{page: &target.PagePub{UglyURLs: uglyURLs}},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
@@ -479,6 +482,7 @@ func doTestShouldAlwaysHaveUglyURLs(t *testing.T, uglyURLs bool) {
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
targets: targetList{page: &target.PagePub{UglyURLs: uglyURLs}},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
@@ -572,6 +576,7 @@ func doTestSectionNaming(t *testing.T, canonify, uglify, pluralize bool) {
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
targets: targetList{page: &target.PagePub{UglyURLs: uglify}},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
@@ -636,6 +641,7 @@ func TestSkipRender(t *testing.T) {
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
targets: targetList{page: &target.PagePub{UglyURLs: true}},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
@@ -693,6 +699,7 @@ func TestAbsURLify(t *testing.T) {
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
targets: targetList{page: &target.PagePub{UglyURLs: true}},
+ Lang: newDefaultLanguage(),
}
t.Logf("Rendering with BaseURL %q and CanonifyURLs set %v", viper.GetString("baseURL"), canonify)
s.initializeSiteInfo()
@@ -788,6 +795,7 @@ func TestOrderedPages(t *testing.T) {
viper.Set("baseurl", "http://auth/bub")
s := &Site{
Source: &source.InMemorySource{ByteSource: weightedSources},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
@@ -1040,6 +1048,7 @@ func TestWeightedTaxonomies(t *testing.T) {
viper.Set("taxonomies", taxonomies)
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
@@ -1107,6 +1116,7 @@ func setupLinkingMockSite(t *testing.T) *Site {
site := &Site{
Source: &source.InMemorySource{ByteSource: sources},
+ Lang: newDefaultLanguage(),
}
site.initializeSiteInfo()
@@ -1402,13 +1412,13 @@ NOTE: should use the "permalinks" configuration with :filename
// Multilingual settings
viper.Set("Multilingual", true)
en := NewLanguage("en")
- viper.Set("CurrentLanguage", en)
viper.Set("DefaultContentLanguage", "fr")
viper.Set("paginate", "2")
languages := NewLanguages(en, NewLanguage("fr"))
s := &Site{
Source: &source.InMemorySource{ByteSource: sources},
+ Lang: en,
Multilingual: &Multilingual{
Languages: languages,
},
diff --git a/hugolib/site_url_test.go b/hugolib/site_url_test.go
index 6e011a500..fc0203d4d 100644
--- a/hugolib/site_url_test.go
+++ b/hugolib/site_url_test.go
@@ -73,7 +73,7 @@ func TestShouldNotAddTrailingSlashToBaseURL(t *testing.T) {
{"http://base.com", "http://base.com"}} {
viper.Set("BaseURL", this.in)
- s := &Site{}
+ s := newSiteDefaultLang()
s.initializeSiteInfo()
if s.Info.BaseURL != template.URL(this.expected) {
@@ -93,6 +93,7 @@ func TestPageCount(t *testing.T) {
viper.Set("paginate", 10)
s := &Site{
Source: &source.InMemorySource{ByteSource: urlFakeSource},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()
s.prepTemplates("indexes/blue.html", indexTemplate)
diff --git a/hugolib/siteinfo_test.go b/hugolib/siteinfo_test.go
index 8110dd932..362be2a46 100644
--- a/hugolib/siteinfo_test.go
+++ b/hugolib/siteinfo_test.go
@@ -27,7 +27,7 @@ func TestSiteInfoParams(t *testing.T) {
defer viper.Reset()
viper.Set("Params", map[string]interface{}{"MyGlobalParam": "FOOBAR_PARAM"})
- s := &Site{}
+ s := newSiteDefaultLang()
s.initialize()
if s.Info.Params["MyGlobalParam"] != "FOOBAR_PARAM" {
@@ -53,7 +53,7 @@ func TestSiteInfoPermalinks(t *testing.T) {
defer viper.Reset()
viper.Set("Permalinks", map[string]interface{}{"section": "/:title"})
- s := &Site{}
+ s := newSiteDefaultLang()
s.initialize()
permalink := s.Info.Permalinks["section"]
diff --git a/hugolib/sitemap_test.go b/hugolib/sitemap_test.go
index b9270ba58..c508fbc31 100644
--- a/hugolib/sitemap_test.go
+++ b/hugolib/sitemap_test.go
@@ -17,11 +17,12 @@ import (
"bytes"
"testing"
+ "reflect"
+
"github.com/spf13/hugo/helpers"
"github.com/spf13/hugo/hugofs"
"github.com/spf13/hugo/source"
"github.com/spf13/viper"
- "reflect"
)
const SITEMAP_TEMPLATE = `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@@ -45,6 +46,7 @@ func TestSitemapOutput(t *testing.T) {
s := &Site{
Source: &source.InMemorySource{ByteSource: weightedSources},
+ Lang: newDefaultLanguage(),
}
s.initializeSiteInfo()