summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gopkg.lock4
-rw-r--r--commands/benchmark.go2
-rw-r--r--commands/commandeer.go52
-rw-r--r--commands/commands.go2
-rw-r--r--commands/commands_test.go5
-rw-r--r--commands/config.go2
-rw-r--r--commands/convert.go2
-rw-r--r--commands/hugo.go205
-rw-r--r--commands/list.go6
-rw-r--r--commands/new.go5
-rw-r--r--commands/new_theme.go6
-rw-r--r--commands/server.go4
-rw-r--r--commands/static_syncer.go41
-rw-r--r--common/loggers/loggers.go37
-rw-r--r--common/maps/maps.go44
-rw-r--r--common/maps/maps_test.go72
-rw-r--r--config/configProvider.go13
-rw-r--r--config/configProvider_test.go36
-rw-r--r--create/content.go53
-rw-r--r--create/content_template_handler.go7
-rw-r--r--create/content_test.go13
-rw-r--r--deps/deps.go9
-rw-r--r--helpers/content.go4
-rw-r--r--helpers/general.go54
-rw-r--r--helpers/general_test.go55
-rw-r--r--helpers/path.go105
-rw-r--r--helpers/path_test.go18
-rw-r--r--helpers/pathspec.go333
-rw-r--r--helpers/pathspec_test.go32
-rw-r--r--helpers/testhelpers_test.go21
-rw-r--r--helpers/url.go40
-rw-r--r--helpers/url_test.go21
-rw-r--r--hugofs/base_fs.go35
-rw-r--r--hugofs/noop_fs.go79
-rw-r--r--hugofs/rootmapping_fs.go180
-rw-r--r--hugofs/rootmapping_fs_test.go93
-rw-r--r--hugolib/alias_test.go4
-rw-r--r--hugolib/case_insensitive_test.go3
-rw-r--r--hugolib/config.go145
-rw-r--r--hugolib/datafiles_test.go4
-rw-r--r--hugolib/filesystems/basefs.go644
-rw-r--r--hugolib/filesystems/basefs_test.go170
-rw-r--r--hugolib/hugo_sites.go8
-rw-r--r--hugolib/hugo_sites_build_test.go28
-rw-r--r--hugolib/hugo_sites_multihost_test.go3
-rw-r--r--hugolib/hugo_themes_test.go268
-rw-r--r--hugolib/multilingual.go43
-rw-r--r--hugolib/page.go10
-rw-r--r--hugolib/page_bundler_capture.go2
-rw-r--r--hugolib/page_bundler_capture_test.go12
-rw-r--r--hugolib/page_bundler_test.go8
-rw-r--r--hugolib/pagination.go2
-rw-r--r--hugolib/paths/baseURL.go (renamed from helpers/baseURL.go)8
-rw-r--r--hugolib/paths/baseURL_test.go (renamed from helpers/baseURL_test.go)4
-rw-r--r--hugolib/paths/paths.go231
-rw-r--r--hugolib/paths/paths_test.go40
-rw-r--r--hugolib/paths/themes.go162
-rw-r--r--hugolib/shortcode_test.go4
-rw-r--r--hugolib/site.go188
-rw-r--r--hugolib/testhelpers_test.go47
-rw-r--r--i18n/i18n_test.go16
-rw-r--r--i18n/translationProvider.go38
-rw-r--r--langs/language.go (renamed from helpers/language.go)7
-rw-r--r--langs/language_test.go (renamed from helpers/language_test.go)4
-rw-r--r--output/docshelper.go2
-rw-r--r--output/layout.go30
-rw-r--r--output/layout_base.go91
-rw-r--r--output/layout_base_test.go97
-rw-r--r--output/layout_test.go80
-rw-r--r--resource/resource.go5
-rw-r--r--resource/testhelpers_test.go10
-rw-r--r--source/content_directory_test.go5
-rw-r--r--source/dirs.go194
-rw-r--r--source/dirs_test.go185
-rw-r--r--source/fileInfo.go2
-rw-r--r--source/fileInfo_test.go7
-rw-r--r--source/filesystem.go9
-rw-r--r--source/filesystem_test.go17
-rw-r--r--source/sourceSpec.go14
-rw-r--r--tpl/collections/collections_test.go3
-rw-r--r--tpl/data/resources_test.go3
-rw-r--r--tpl/template.go2
-rw-r--r--tpl/tplimpl/template.go157
-rw-r--r--tpl/tplimpl/template_funcs_test.go21
-rw-r--r--tpl/tplimpl/template_test.go4
-rw-r--r--tpl/transform/transform_test.go3
86 files changed, 2820 insertions, 1914 deletions
diff --git a/Gopkg.lock b/Gopkg.lock
index 86c9e7c8f..51fb96c52 100644
--- a/Gopkg.lock
+++ b/Gopkg.lock
@@ -298,8 +298,8 @@
".",
"mem"
]
- revision = "63644898a8da0bc22138abf860edaf5277b6102e"
- version = "v1.1.0"
+ revision = "787d034dfe70e44075ccc060d346146ef53270ad"
+ version = "v1.1.1"
[[projects]]
name = "github.com/spf13/cast"
diff --git a/commands/benchmark.go b/commands/benchmark.go
index 3938acf1b..b0a12db7f 100644
--- a/commands/benchmark.go
+++ b/commands/benchmark.go
@@ -56,7 +56,7 @@ func (c *benchmarkCmd) benchmark(cmd *cobra.Command, args []string) error {
return nil
}
- comm, err := initializeConfig(false, &c.hugoBuilderCommon, c, cfgInit)
+ comm, err := initializeConfig(true, false, &c.hugoBuilderCommon, c, cfgInit)
if err != nil {
return err
}
diff --git a/commands/commandeer.go b/commands/commandeer.go
index d43b7c9f1..d5d2740bf 100644
--- a/commands/commandeer.go
+++ b/commands/commandeer.go
@@ -34,7 +34,7 @@ import (
"github.com/gohugoio/hugo/deps"
"github.com/gohugoio/hugo/helpers"
"github.com/gohugoio/hugo/hugofs"
- src "github.com/gohugoio/hugo/source"
+ "github.com/gohugoio/hugo/langs"
)
type commandeer struct {
@@ -45,11 +45,8 @@ type commandeer struct {
h *hugoBuilderCommon
ftch flagsToConfigHandler
- pathSpec *helpers.PathSpec
visitedURLs *types.EvictingStringQueue
- staticDirsConfig []*src.Dirs
-
// We watch these for changes.
configFiles []string
@@ -63,7 +60,7 @@ type commandeer struct {
serverPorts []int
languagesConfigured bool
- languages helpers.Languages
+ languages langs.Languages
configured bool
}
@@ -75,31 +72,13 @@ func (c *commandeer) Set(key string, value interface{}) {
c.Cfg.Set(key, value)
}
-// PathSpec lazily creates a new PathSpec, as all the paths must
-// be configured before it is created.
-func (c *commandeer) PathSpec() *helpers.PathSpec {
- c.configured = true
- return c.pathSpec
-}
-
func (c *commandeer) initFs(fs *hugofs.Fs) error {
c.DepsCfg.Fs = fs
- ps, err := helpers.NewPathSpec(fs, c.Cfg)
- if err != nil {
- return err
- }
- c.pathSpec = ps
-
- dirsConfig, err := c.createStaticDirsConfig()
- if err != nil {
- return err
- }
- c.staticDirsConfig = dirsConfig
return nil
}
-func newCommandeer(running bool, h *hugoBuilderCommon, f flagsToConfigHandler, doWithCommandeer func(c *commandeer) error, subCmdVs ...*cobra.Command) (*commandeer, error) {
+func newCommandeer(mustHaveConfigFile, running bool, h *hugoBuilderCommon, f flagsToConfigHandler, doWithCommandeer func(c *commandeer) error, subCmdVs ...*cobra.Command) (*commandeer, error) {
var rebuildDebouncer func(f func())
if running {
@@ -117,10 +96,10 @@ func newCommandeer(running bool, h *hugoBuilderCommon, f flagsToConfigHandler, d
debounce: rebuildDebouncer,
}
- return c, c.loadConfig(running)
+ return c, c.loadConfig(mustHaveConfigFile, running)
}
-func (c *commandeer) loadConfig(running bool) error {
+func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error {
if c.DepsCfg == nil {
c.DepsCfg = &deps.DepsCfg{}
@@ -168,12 +147,18 @@ func (c *commandeer) loadConfig(running bool) error {
doWithConfig)
if err != nil {
- return err
+ if mustHaveConfigFile {
+ return err
+ }
+ if err != hugolib.ErrNoConfigFile {
+ return err
+ }
+
}
c.configFiles = configFiles
- if l, ok := c.Cfg.Get("languagesSorted").(helpers.Languages); ok {
+ if l, ok := c.Cfg.Get("languagesSorted").(langs.Languages); ok {
c.languagesConfigured = true
c.languages = l
}
@@ -209,6 +194,15 @@ func (c *commandeer) loadConfig(running bool) error {
}
err = c.initFs(fs)
+ if err != nil {
+ return
+ }
+
+ var h *hugolib.HugoSites
+
+ h, err = hugolib.NewHugoSites(*c.DepsCfg)
+ c.hugo = h
+
})
if err != nil {
@@ -232,7 +226,7 @@ func (c *commandeer) loadConfig(running bool) error {
cfg.Logger.INFO.Println("Using config file:", config.ConfigFileUsed())
- themeDir := c.PathSpec().GetThemeDir()
+ themeDir := c.hugo.PathSpec.GetFirstThemeDir()
if themeDir != "" {
if _, err := sourceFs.Stat(themeDir); os.IsNotExist(err) {
return newSystemError("Unable to find theme Directory:", themeDir)
diff --git a/commands/commands.go b/commands/commands.go
index 8ba28e10d..74bc709cc 100644
--- a/commands/commands.go
+++ b/commands/commands.go
@@ -148,7 +148,7 @@ Complete documentation is available at http://gohugo.io/.`,
return nil
}
- c, err := initializeConfig(cc.buildWatch, &cc.hugoBuilderCommon, cc, cfgInit)
+ c, err := initializeConfig(true, cc.buildWatch, &cc.hugoBuilderCommon, cc, cfgInit)
if err != nil {
return err
}
diff --git a/commands/commands_test.go b/commands/commands_test.go
index 907f003c0..d576b4428 100644
--- a/commands/commands_test.go
+++ b/commands/commands_test.go
@@ -237,6 +237,11 @@ List: {{ .Title }}
`)
+ writeFile(t, filepath.Join(d, "static", "my.txt"), `
+MyMy
+
+`)
+
return d, nil
}
diff --git a/commands/config.go b/commands/config.go
index 951b57540..33a61733d 100644
--- a/commands/config.go
+++ b/commands/config.go
@@ -44,7 +44,7 @@ func newConfigCmd() *configCmd {
}
func (c *configCmd) printConfig(cmd *cobra.Command, args []string) error {
- cfg, err := initializeConfig(false, &c.hugoBuilderCommon, c, nil)
+ cfg, err := initializeConfig(true, false, &c.hugoBuilderCommon, c, nil)
if err != nil {
return err
diff --git a/commands/convert.go b/commands/convert.go
index fb70a148d..8de155e9b 100644
--- a/commands/convert.go
+++ b/commands/convert.go
@@ -96,7 +96,7 @@ func (cc *convertCmd) convertContents(mark rune) error {
return newUserError("Unsafe operation not allowed, use --unsafe or set a different output path")
}
- c, err := initializeConfig(false, &cc.hugoBuilderCommon, cc, nil)
+ c, err := initializeConfig(true, false, &cc.hugoBuilderCommon, cc, nil)
if err != nil {
return err
}
diff --git a/commands/hugo.go b/commands/hugo.go
index 8f7860f76..c4fee122d 100644
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -23,6 +23,8 @@ import (
"sync/atomic"
"syscall"
+ "github.com/gohugoio/hugo/hugolib/filesystems"
+
"golang.org/x/sync/errgroup"
"log"
@@ -32,8 +34,6 @@ import (
"strings"
"time"
- src "github.com/gohugoio/hugo/source"
-
"github.com/gohugoio/hugo/config"
"github.com/gohugoio/hugo/parser"
@@ -103,12 +103,12 @@ func Execute(args []string) Response {
}
// InitializeConfig initializes a config file with sensible default configuration flags.
-func initializeConfig(running bool,
+func initializeConfig(mustHaveConfigFile, running bool,
h *hugoBuilderCommon,
f flagsToConfigHandler,
doWithCommandeer func(c *commandeer) error) (*commandeer, error) {
- c, err := newCommandeer(running, h, f, doWithCommandeer)
+ c, err := newCommandeer(mustHaveConfigFile, running, h, f, doWithCommandeer)
if err != nil {
return nil, err
}
@@ -280,6 +280,7 @@ func (c *commandeer) fullBuild() error {
return fmt.Errorf("Error copying static files: %s", err)
}
langCount = cnt
+ langCount = cnt
return nil
}
buildSitesFunc := func() error {
@@ -344,7 +345,7 @@ func (c *commandeer) build() error {
if err != nil {
return err
}
- c.Logger.FEEDBACK.Println("Watching for changes in", c.PathSpec().AbsPathify(c.Cfg.GetString("contentDir")))
+ c.Logger.FEEDBACK.Println("Watching for changes in", c.hugo.PathSpec.AbsPathify(c.Cfg.GetString("contentDir")))
c.Logger.FEEDBACK.Println("Press Ctrl+C to stop")
watcher, err := c.newWatcher(watchDirs...)
utils.CheckErr(c.Logger, err)
@@ -380,49 +381,30 @@ func (c *commandeer) copyStatic() (map[string]uint64, error) {
return c.doWithPublishDirs(c.copyStaticTo)
}
-func (c *commandeer) createStaticDirsConfig() ([]*src.Dirs, error) {
- var dirsConfig []*src.Dirs
-
- if !c.languages.IsMultihost() {
- dirs, err := src.NewDirs(c.Fs, c.Cfg, c.DepsCfg.Logger)
- if err != nil {
- return nil, err
- }
- dirsConfig = append(dirsConfig, dirs)
- } else {
- for _, l := range c.languages {
- dirs, err := src.NewDirs(c.Fs, l, c.DepsCfg.Logger)
- if err != nil {
- return nil, err
- }
- dirsConfig = append(dirsConfig, dirs)
- }
- }
-
- return dirsConfig, nil