diff options
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 - -} - -func (c *commandeer) doWithPublishDirs(f func(dirs *src.Dirs, publishDir string) (uint64, error)) (map[string]uint64, error) { +func (c *commandeer) doWithPublishDirs(f func(sourceFs *filesystems.SourceFilesystem) (uint64, error)) (map[string]uint64, error) { langCount := make(map[string]uint64) - for _, dirs := range c.staticDirsConfig { + staticFilesystems := c.hugo.BaseFs.SourceFilesystems.Static - cnt, err := f(dirs, c.pathSpec.PublishDir) + if len(staticFilesystems) == 0 { + c.Logger.WARN.Println("No static directories found to sync") + return langCount, nil + } + + for lang, fs := range staticFilesystems { + cnt, err := f(fs) if err != nil { return langCount, err } - - if dirs.Language == nil { + if lang == "" { // Not multihost for _, l := range c.languages { langCount[l.Lang] = cnt }< |