summaryrefslogtreecommitdiffstats
path: root/commands
diff options
context:
space:
mode:
Diffstat (limited to 'commands')
-rw-r--r--commands/benchmark.go8
-rw-r--r--commands/hugo.go60
-rw-r--r--commands/multilingual.go20
3 files changed, 50 insertions, 38 deletions
diff --git a/commands/benchmark.go b/commands/benchmark.go
index 53e11c3f6..56a50578b 100644
--- a/commands/benchmark.go
+++ b/commands/benchmark.go
@@ -57,8 +57,8 @@ func benchmark(cmd *cobra.Command, args []string) error {
return err
}
for i := 0; i < benchmarkTimes; i++ {
- Sites = nil
- _ = buildSite()
+ _ = buildSites()
+ Hugo.Reset()
}
pprof.WriteHeapProfile(f)
f.Close()
@@ -76,8 +76,8 @@ func benchmark(cmd *cobra.Command, args []string) error {
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
for i := 0; i < benchmarkTimes; i++ {
- Sites = nil
- _ = buildSite()
+ _ = buildSites()
+ Hugo.Reset()
}
}
diff --git a/commands/hugo.go b/commands/hugo.go
index 4fd4dcb9d..6168d0a83 100644
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -46,10 +46,20 @@ import (
"github.com/spf13/viper"
)
-// Sites represents the Hugo sites to build. This variable is exported as it
+type HugoSites []*hugolib.Site
+
+// Reset resets the sites, making it ready for a full rebuild.
+// TODO(bep) multilingo
+func (h HugoSites) Reset() {
+ for i, s := range h {
+ h[i] = s.Reset()
+ }
+}
+
+// Hugo represents the Hugo sites to build. This variable is exported as it
// is used by at least one external library (the Hugo caddy plugin). We should
// provide a cleaner external API, but until then, this is it.
-var Sites map[string]*hugolib.Site
+var Hugo HugoSites
// Reset resets Hugo ready for a new full build. This is mainly only useful
// for benchmark testing etc. via the CLI commands.
@@ -493,7 +503,15 @@ func InitializeConfig(subCmdVs ...*cobra.Command) error {
helpers.HugoReleaseVersion(), minVersion)
}
- return readMultilingualConfiguration()
+ h, err := readMultilingualConfiguration()
+
+ if err != nil {
+ return err
+ }
+ //TODO(bep) refactor ...
+ Hugo = h
+
+ return nil
}
@@ -510,8 +528,8 @@ func watchConfig() {
viper.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("Config file changed:", e.Name)
// Force a full rebuild
- Sites = nil
- utils.CheckErr(buildSite(true))
+ Hugo.Reset()
+ utils.CheckErr(buildSites(true))
if !viper.GetBool("DisableLiveReload") {
// Will block forever trying to write to a channel that nobody is reading if livereload isn't initialized
livereload.ForceRefresh()
@@ -537,7 +555,7 @@ func build(watches ...bool) error {
if len(watches) > 0 && watches[0] {
watch = true
}
- if err := buildSite(buildWatch || watch); err != nil {
+ if err := buildSites(buildWatch || watch); err != nil {
return fmt.Errorf("Error building site: %s", err)
}
@@ -704,32 +722,21 @@ func getDirList() []string {
return a
}
-func buildSite(watching ...bool) (err error) {
+func buildSites(watching ...bool) (err error) {
fmt.Println("Started building site")
t0 := time.Now()
- if Sites == nil {
- Sites = make(map[string]*hugolib.Site)
- }
-
- for _, lang := range langConfigsList {
+ for _, site := range Hugo {
t1 := time.Now()
- mainSite, present := Sites[lang.Lang]
- if !present {
- mainSite = new(hugolib.Site)
- Sites[lang.Lang] = mainSite
- mainSite.SetMultilingualConfig(lang, langConfigsList)
- }
-
if len(watching) > 0 && watching[0] {
- mainSite.RunMode.Watching = true
+ site.RunMode.Watching = true
}
- if err := mainSite.Build(); err != nil {
+ if err := site.Build(); err != nil {
return err
}
- mainSite.Stats(lang.Lang, t1)
+ site.Stats(t1)
}
jww.FEEDBACK.Printf("total in %v ms\n", int(1000*time.Since(t0).Seconds()))
@@ -737,18 +744,17 @@ func buildSite(watching ...bool) (err error) {
return nil
}
-func rebuildSite(events []fsnotify.Event) error {
+func rebuildSites(events []fsnotify.Event) error {
t0 := time.Now()
- for _, lang := range langConfigsList {
+ for _, site := range Hugo {
t1 := time.Now()
- site := Sites[lang.Lang]
if err := site.ReBuild(events); err != nil {
return err
}
- site.Stats(lang.Lang, t1)
+ site.Stats(t1)
}
jww.FEEDBACK.Printf("total in %v ms\n", int(1000*time.Since(t0).Seconds()))
@@ -969,7 +975,7 @@ func NewWatcher(port int) error {
const layout = "2006-01-02 15:04 -0700"
fmt.Println(time.Now().Format(layout))
- rebuildSite(dynamicEvents)
+ rebuildSites(dynamicEvents)
if !buildWatch && !viper.GetBool("DisableLiveReload") {
// Will block forever trying to write to a channel that nobody is reading if livereload isn't initialized
diff --git a/commands/multilingual.go b/commands/multilingual.go
index 3f813474d..9afb562ba 100644
--- a/commands/multilingual.go
+++ b/commands/multilingual.go
@@ -11,24 +11,30 @@ import (
"github.com/spf13/viper"
)
-var langConfigsList hugolib.Languages
-
-func readMultilingualConfiguration() error {
+func readMultilingualConfiguration() (HugoSites, error) {
+ h := make(HugoSites, 0)
multilingual := viper.GetStringMap("Multilingual")
if len(multilingual) == 0 {
// TODO(bep) multilingo langConfigsList = append(langConfigsList, hugolib.NewLanguage("en"))
- return nil
+ h = append(h, hugolib.NewSite(hugolib.NewLanguage("en")))
+ return h, nil
}
var err error
- langConfigsList, err = toSortedLanguages(multilingual)
+ langConfigsList, err := toSortedLanguages(multilingual)
if err != nil {
- return fmt.Errorf("Failed to parse multilingual config: %s", err)
+ return nil, fmt.Errorf("Failed to parse multilingual config: %s", err)
+ }
+
+ for _, lang := range langConfigsList {
+ s := hugolib.NewSite(lang)
+ s.SetMultilingualConfig(lang, langConfigsList)
+ h = append(h, s)
}
- return nil
+ return h, nil
}
func toSortedLanguages(l map[string]interface{}) (hugolib.Languages, error) {