Now default to TOML.
buildWatch bool
environment string
+ // File format to read or write (TOML, YAML, JSON).
+ format string
+
// Common build flags.
baseURL string
gc bool
if err != nil {
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)
r.commonConfigs = lazycache.New[int32, *commonConfig](lazycache.Options{MaxEntries: 5})
// Configure persistent flags
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().StringP("destination", "d", "", "filesystem path to write files to")
cmd.PersistentFlags().SetAnnotation("destination", cobra.BashCompSubdirsInDir, []string{})
package commands
import (
+ "bytes"
"context"
"encoding/json"
"os"
+ "strings"
"time"
"github.com/bep/simplecobra"
}
config := conf.configs.Base
- // Print it as JSON.
- dec := json.NewEncoder(os.Stdout)
+ var buf bytes.Buffer
+ dec := json.NewEncoder(&buf)
dec.SetIndent("", " ")
dec.SetEscapeHTML(false)
if err := dec.Encode(parser.ReplacingJSONMarshaller{Value: config, KeysToLower: true, OmitEmpty: true}); err != nil {
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
}
func newNewCommand() *newCommand {
var (
- configFormat string
- force bool
- contentType string
+ force bool
+ contentType string
)
var c *newCommand
return errors.New(createpath + " already exists and is not empty. See --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 {
if exists, _ := helpers.Exists(path, sourceFs); exists {
return errors.New(path + " already exists")
}
}
- c.newSiteCreateConfig(sourceFs, createpath, configFormat)
+ c.newSiteCreateConfig(sourceFs, createpath, r.format)
// Create a default archetype file.
helpers.SafeWriteToDisk(filepath.Join(archeTypePath, "default.md"),
return nil
},
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")
},
},
hugo config
+stdout 'baseurl = .https://example.com/'
+hugo config --format json
stdout '\"baseurl\": \"https://example.com/\",'
hugo config mounts -h