mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Add --format to hugo config
Now default to TOML.
This commit is contained in:
parent
b6e6438f7f
commit
85b13c105a
4 changed files with 40 additions and 8 deletions
|
@ -108,6 +108,9 @@ type rootCommand struct {
|
||||||
buildWatch bool
|
buildWatch bool
|
||||||
environment string
|
environment string
|
||||||
|
|
||||||
|
// File format to read or write (TOML, YAML, JSON).
|
||||||
|
format string
|
||||||
|
|
||||||
// Common build flags.
|
// Common build flags.
|
||||||
baseURL string
|
baseURL string
|
||||||
gc bool
|
gc bool
|
||||||
|
@ -405,6 +408,12 @@ func (r *rootCommand) PreRun(cd, runner *simplecobra.Commandeer) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
switch r.format {
|
||||||
|
case "json", "toml", "yaml":
|
||||||
|
// OK
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported format %q; must be one of json, toml or yaml", r.format)
|
||||||
|
}
|
||||||
|
|
||||||
loggers.PanicOnWarning.Store(r.panicOnWarning)
|
loggers.PanicOnWarning.Store(r.panicOnWarning)
|
||||||
r.commonConfigs = lazycache.New[int32, *commonConfig](lazycache.Options{MaxEntries: 5})
|
r.commonConfigs = lazycache.New[int32, *commonConfig](lazycache.Options{MaxEntries: 5})
|
||||||
|
@ -476,6 +485,7 @@ Complete documentation is available at https://gohugo.io/.`
|
||||||
|
|
||||||
// Configure persistent flags
|
// Configure persistent flags
|
||||||
cmd.PersistentFlags().StringVarP(&r.source, "source", "s", "", "filesystem path to read files relative from")
|
cmd.PersistentFlags().StringVarP(&r.source, "source", "s", "", "filesystem path to read files relative from")
|
||||||
|
cmd.PersistentFlags().StringVar(&r.format, "format", "toml", "preferred file format (toml, yaml or json)")
|
||||||
cmd.PersistentFlags().SetAnnotation("source", cobra.BashCompSubdirsInDir, []string{})
|
cmd.PersistentFlags().SetAnnotation("source", cobra.BashCompSubdirsInDir, []string{})
|
||||||
cmd.PersistentFlags().StringP("destination", "d", "", "filesystem path to write files to")
|
cmd.PersistentFlags().StringP("destination", "d", "", "filesystem path to write files to")
|
||||||
cmd.PersistentFlags().SetAnnotation("destination", cobra.BashCompSubdirsInDir, []string{})
|
cmd.PersistentFlags().SetAnnotation("destination", cobra.BashCompSubdirsInDir, []string{})
|
||||||
|
|
|
@ -14,9 +14,11 @@
|
||||||
package commands
|
package commands
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bep/simplecobra"
|
"github.com/bep/simplecobra"
|
||||||
|
@ -56,14 +58,34 @@ func (c *configCommand) Run(ctx context.Context, cd *simplecobra.Commandeer, arg
|
||||||
}
|
}
|
||||||
config := conf.configs.Base
|
config := conf.configs.Base
|
||||||
|
|
||||||
// Print it as JSON.
|
var buf bytes.Buffer
|
||||||
dec := json.NewEncoder(os.Stdout)
|
dec := json.NewEncoder(&buf)
|
||||||
dec.SetIndent("", " ")
|
dec.SetIndent("", " ")
|
||||||
dec.SetEscapeHTML(false)
|
dec.SetEscapeHTML(false)
|
||||||
|
|
||||||
if err := dec.Encode(parser.ReplacingJSONMarshaller{Value: config, KeysToLower: true, OmitEmpty: true}); err != nil {
|
if err := dec.Encode(parser.ReplacingJSONMarshaller{Value: config, KeysToLower: true, OmitEmpty: true}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
format := strings.ToLower(c.r.format)
|
||||||
|
|
||||||
|
switch format {
|
||||||
|
case "json":
|
||||||
|
os.Stdout.Write(buf.Bytes())
|
||||||
|
default:
|
||||||
|
// Decode the JSON to a map[string]interface{} and then unmarshal it again to the correct format.
|
||||||
|
var m map[string]interface{}
|
||||||
|
if err := json.Unmarshal(buf.Bytes(), &m); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
switch format {
|
||||||
|
case "yaml":
|
||||||
|
return parser.InterfaceToConfig(m, metadecoders.YAML, os.Stdout)
|
||||||
|
case "toml":
|
||||||
|
return parser.InterfaceToConfig(m, metadecoders.TOML, os.Stdout)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,9 +34,8 @@ import (
|
||||||
|
|
||||||
func newNewCommand() *newCommand {
|
func newNewCommand() *newCommand {
|
||||||
var (
|
var (
|
||||||
configFormat string
|
force bool
|
||||||
force bool
|
contentType string
|
||||||
contentType string
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var c *newCommand
|
var c *newCommand
|
||||||
|
@ -119,7 +118,7 @@ Use ` + "`hugo new [contentPath]`" + ` to create new content.`,
|
||||||
return errors.New(createpath + " already exists and is not empty. See --force.")
|
return errors.New(createpath + " already exists and is not empty. See --force.")
|
||||||
|
|
||||||
case !isEmpty && force:
|
case !isEmpty && force:
|
||||||
all := append(dirs, filepath.Join(createpath, "hugo."+configFormat))
|
all := append(dirs, filepath.Join(createpath, "hugo."+r.format))
|
||||||
for _, path := range all {
|
for _, path := range all {
|
||||||
if exists, _ := helpers.Exists(path, sourceFs); exists {
|
if exists, _ := helpers.Exists(path, sourceFs); exists {
|
||||||
return errors.New(path + " already exists")
|
return errors.New(path + " already exists")
|
||||||
|
@ -134,7 +133,7 @@ Use ` + "`hugo new [contentPath]`" + ` to create new content.`,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c.newSiteCreateConfig(sourceFs, createpath, configFormat)
|
c.newSiteCreateConfig(sourceFs, createpath, r.format)
|
||||||
|
|
||||||
// Create a default archetype file.
|
// Create a default archetype file.
|
||||||
helpers.SafeWriteToDisk(filepath.Join(archeTypePath, "default.md"),
|
helpers.SafeWriteToDisk(filepath.Join(archeTypePath, "default.md"),
|
||||||
|
@ -146,7 +145,6 @@ Use ` + "`hugo new [contentPath]`" + ` to create new content.`,
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
withc: func(cmd *cobra.Command) {
|
withc: func(cmd *cobra.Command) {
|
||||||
cmd.Flags().StringVarP(&configFormat, "format", "f", "toml", "config file format")
|
|
||||||
cmd.Flags().BoolVar(&force, "force", false, "init inside non-empty directory")
|
cmd.Flags().BoolVar(&force, "force", false, "init inside non-empty directory")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,6 +5,8 @@ stdout 'Print the site configuration'
|
||||||
|
|
||||||
|
|
||||||
hugo config
|
hugo config
|
||||||
|
stdout 'baseurl = .https://example.com/'
|
||||||
|
hugo config --format json
|
||||||
stdout '\"baseurl\": \"https://example.com/\",'
|
stdout '\"baseurl\": \"https://example.com/\",'
|
||||||
|
|
||||||
hugo config mounts -h
|
hugo config mounts -h
|
||||||
|
|
Loading…
Reference in a new issue