diff --git a/commands/commands_test.go b/commands/commands_test.go index 6fabbbb0b..5173e7409 100644 --- a/commands/commands_test.go +++ b/commands/commands_test.go @@ -21,6 +21,7 @@ import ( "testing" "github.com/spf13/cobra" + "github.com/spf13/viper" "github.com/stretchr/testify/require" ) @@ -53,7 +54,24 @@ func TestCommandsPersistentFlags(t *testing.T) { tests := []struct { args []string 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 { if b, ok := command.(commandsBuilderGetter); ok { v := b.getCmmandsBuilder().hugoBuilderCommon @@ -61,7 +79,32 @@ func TestCommandsPersistentFlags(t *testing.T) { assert.Equal("mysource", v.source) 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 { diff --git a/commands/hugo.go b/commands/hugo.go index 84e265cf2..5c301c7fb 100644 --- a/commands/hugo.go +++ b/commands/hugo.go @@ -200,7 +200,7 @@ func initializeFlags(cmd *cobra.Command, cfg config.Provider) { "gc", "layoutDir", "logFile", - "logI18nWarnings", + "i18n-warnings", "quiet", "renderToMemory", "source", @@ -211,12 +211,16 @@ func initializeFlags(cmd *cobra.Command, cfg config.Provider) { } for _, key := range persFlagKeys { - setValueFromFlag(cmd.PersistentFlags(), key, cfg) + setValueFromFlag(cmd.PersistentFlags(), key, cfg, "") } 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{ @@ -226,7 +230,7 @@ var deprecatedFlags = map[string]bool{ 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 _, deprecated := deprecatedFlags[strings.ToLower(key)]; deprecated { 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) } f := flags.Lookup(key) - cfg.Set(key, f.Value.String()) + configKey := key + if targetKey != "" { + configKey = targetKey + } + cfg.Set(configKey, f.Value.String()) } }