mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-20 21:31:32 +02:00
commands: Correctly handle destination and i18n-warnings
And add some more CLI tests. See #4607
This commit is contained in:
@@ -21,6 +21,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
@@ -53,7 +54,24 @@ func TestCommandsPersistentFlags(t *testing.T) {
|
|||||||
tests := []struct {
|
tests := []struct {
|
||||||
args []string
|
args []string
|
||||||
check func(command []cmder)
|
check func(command []cmder)
|
||||||
}{{[]string{"server", "--config=myconfig.toml", "-b=https://example.com/b/", "--source=mysource"}, func(commands []cmder) {
|
}{{[]string{"server",
|
||||||
|
"--config=myconfig.toml",
|
||||||
|
"--contentDir=mycontent",
|
||||||
|
"--layoutDir=mylayouts",
|
||||||
|
"--theme=mytheme",
|
||||||
|
"--themesDir=mythemes",
|
||||||
|
"--cleanDestinationDir",
|
||||||
|
"--navigateToChanged",
|
||||||
|
"--disableLiveReload",
|
||||||
|
"--noHTTPCache",
|
||||||
|
"--i18n-warnings",
|
||||||
|
"--destination=/tmp/mydestination",
|
||||||
|
"-b=https://example.com/b/",
|
||||||
|
"--port=1366",
|
||||||
|
"--renderToDisk",
|
||||||
|
"--source=mysource",
|
||||||
|
"--uglyURLs"}, func(commands []cmder) {
|
||||||
|
var sc *serverCmd
|
||||||
for _, command := range commands {
|
for _, command := range commands {
|
||||||
if b, ok := command.(commandsBuilderGetter); ok {
|
if b, ok := command.(commandsBuilderGetter); ok {
|
||||||
v := b.getCmmandsBuilder().hugoBuilderCommon
|
v := b.getCmmandsBuilder().hugoBuilderCommon
|
||||||
@@ -61,7 +79,32 @@ func TestCommandsPersistentFlags(t *testing.T) {
|
|||||||
assert.Equal("mysource", v.source)
|
assert.Equal("mysource", v.source)
|
||||||
assert.Equal("https://example.com/b/", v.baseURL)
|
assert.Equal("https://example.com/b/", v.baseURL)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if srvCmd, ok := command.(*serverCmd); ok {
|
||||||
|
sc = srvCmd
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NotNil(sc)
|
||||||
|
assert.True(sc.navigateToChanged)
|
||||||
|
assert.True(sc.disableLiveReload)
|
||||||
|
assert.True(sc.noHTTPCache)
|
||||||
|
assert.True(sc.renderToDisk)
|
||||||
|
assert.Equal(1366, sc.serverPort)
|
||||||
|
|
||||||
|
cfg := viper.New()
|
||||||
|
sc.flagsToConfig(cfg)
|
||||||
|
assert.Equal("/tmp/mydestination", cfg.GetString("publishDir"))
|
||||||
|
assert.Equal("mycontent", cfg.GetString("contentDir"))
|
||||||
|
assert.Equal("mylayouts", cfg.GetString("layoutDir"))
|
||||||
|
assert.Equal("mytheme", cfg.GetString("theme"))
|
||||||
|
assert.Equal("mythemes", cfg.GetString("themesDir"))
|
||||||
|
|
||||||
|
assert.True(cfg.GetBool("uglyURLs"))
|
||||||
|
|
||||||
|
// The flag is named i18n-warnings
|
||||||
|
assert.True(cfg.GetBool("logI18nWarnings"))
|
||||||
|
|
||||||
}}}
|
}}}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
@@ -200,7 +200,7 @@ func initializeFlags(cmd *cobra.Command, cfg config.Provider) {
|
|||||||
"gc",
|
"gc",
|
||||||
"layoutDir",
|
"layoutDir",
|
||||||
"logFile",
|
"logFile",
|
||||||
"logI18nWarnings",
|
"i18n-warnings",
|
||||||
"quiet",
|
"quiet",
|
||||||
"renderToMemory",
|
"renderToMemory",
|
||||||
"source",
|
"source",
|
||||||
@@ -211,12 +211,16 @@ func initializeFlags(cmd *cobra.Command, cfg config.Provider) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, key := range persFlagKeys {
|
for _, key := range persFlagKeys {
|
||||||
setValueFromFlag(cmd.PersistentFlags(), key, cfg)
|
setValueFromFlag(cmd.PersistentFlags(), key, cfg, "")
|
||||||
}
|
}
|
||||||
for _, key := range flagKeys {
|
for _, key := range flagKeys {
|
||||||
setValueFromFlag(cmd.Flags(), key, cfg)
|
setValueFromFlag(cmd.Flags(), key, cfg, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set some "config aliases"
|
||||||
|
setValueFromFlag(cmd.Flags(), "destination", cfg, "publishDir")
|
||||||
|
setValueFromFlag(cmd.Flags(), "i18n-warnings", cfg, "logI18nWarnings")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var deprecatedFlags = map[string]bool{
|
var deprecatedFlags = map[string]bool{
|
||||||
@@ -226,7 +230,7 @@ var deprecatedFlags = map[string]bool{
|
|||||||
strings.ToLower("canonifyURLs"): true,
|
strings.ToLower("canonifyURLs"): true,
|
||||||
}
|
}
|
||||||
|
|
||||||
func setValueFromFlag(flags *flag.FlagSet, key string, cfg config.Provider) {
|
func setValueFromFlag(flags *flag.FlagSet, key string, cfg config.Provider, targetKey string) {
|
||||||
if flags.Changed(key) {
|
if flags.Changed(key) {
|
||||||
if _, deprecated := deprecatedFlags[strings.ToLower(key)]; deprecated {
|
if _, deprecated := deprecatedFlags[strings.ToLower(key)]; deprecated {
|
||||||
msg := fmt.Sprintf(`Set "%s = true" in your config.toml.
|
msg := fmt.Sprintf(`Set "%s = true" in your config.toml.
|
||||||
@@ -235,7 +239,11 @@ If you need to set this configuration value from the command line, set it via an
|
|||||||
helpers.Deprecated("hugo", "--"+key+" flag", msg, true)
|
helpers.Deprecated("hugo", "--"+key+" flag", msg, true)
|
||||||
}
|
}
|
||||||
f := flags.Lookup(key)
|
f := flags.Lookup(key)
|
||||||
cfg.Set(key, f.Value.String())
|
configKey := key
|
||||||
|
if targetKey != "" {
|
||||||
|
configKey = targetKey
|
||||||
|
}
|
||||||
|
cfg.Set(configKey, f.Value.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user