diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2023-04-11 10:21:51 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-11 10:21:51 +0200 |
commit | 54566b7a4cc0e6f1e6b879e8d8ef4f1f9bcd0d43 (patch) | |
tree | 87c27e729a411de4ab6eb5e0cee1e83167d231a0 | |
parent | 994461dddf51fe8ee608bfc504584a6c18a4fef5 (diff) |
Revert "Read local config when in an application package sub-directory"
-rw-r--r-- | client/go/internal/cli/cmd/config.go | 85 | ||||
-rw-r--r-- | client/go/internal/cli/cmd/config_test.go | 8 | ||||
-rw-r--r-- | client/go/internal/cli/cmd/deploy_test.go | 3 | ||||
-rw-r--r-- | client/go/internal/cli/cmd/root.go | 10 | ||||
-rw-r--r-- | client/go/internal/cli/cmd/visit_test.go | 2 |
5 files changed, 29 insertions, 79 deletions
diff --git a/client/go/internal/cli/cmd/config.go b/client/go/internal/cli/cmd/config.go index 3dd4b04509c..fd049864096 100644 --- a/client/go/internal/cli/cmd/config.go +++ b/client/go/internal/cli/cmd/config.go @@ -150,18 +150,6 @@ $ vespa config set --local wait 600 if _, err := cli.applicationPackageFrom(nil, false); err != nil { return fmt.Errorf("failed to write local configuration: %w", err) } - if cli.config.local == nil { - wd, err := os.Getwd() - if err != nil { - return nil - } - localDir := filepath.Join(wd, ".vespa") - newConfig, err := readConfigIn(localDir, cli.config.environment, cli.config.flags) - if err != nil { - return err - } - cli.config.local = newConfig - } config = cli.config.local } if err := config.set(args[0], args[1]); err != nil { @@ -199,10 +187,6 @@ $ vespa config unset --local application return fmt.Errorf("failed to write local configuration: %w", err) } config = cli.config.local - if config == nil { - cli.printWarning("no local configuration present") - return nil - } } if err := config.unset(args[0]); err != nil { return err @@ -235,7 +219,7 @@ $ vespa config get --local RunE: func(cmd *cobra.Command, args []string) error { config := cli.config if localArg { - if cli.config.local == nil { + if cli.config.local.isEmpty() { cli.printWarning("no local configuration present") return nil } @@ -271,36 +255,23 @@ type KeyPair struct { PrivateKeyFile string } -func loadConfig(environment map[string]string, flags map[string]*pflag.Flag, workDir string) (*Config, error) { - dir, err := vespaCliHome(environment) +func loadConfig(environment map[string]string, flags map[string]*pflag.Flag) (*Config, error) { + home, err := vespaCliHome(environment) if err != nil { return nil, fmt.Errorf("could not detect config directory: %w", err) } - config, err := readConfigIn(dir, environment, flags) + config, err := loadConfigFrom(home, environment, flags) if err != nil { return nil, err } - if workDir == "" { - workDir, err = os.Getwd() - if err != nil { - return nil, err - } - } - localDir, err := config.findLocalConfigDir(workDir) - if err != nil { + // Load local config from working directory by default + if err := config.loadLocalConfigFrom("."); err != nil { return nil, err } - if localDir != "" { - localConfig, err := readConfigIn(localDir, environment, flags) - if err != nil { - return nil, err - } - config.local = localConfig - } return config, nil } -func readConfigIn(dir string, environment map[string]string, flags map[string]*pflag.Flag) (*Config, error) { +func loadConfigFrom(dir string, environment map[string]string, flags map[string]*pflag.Flag) (*Config, error) { cacheDir, err := vespaCliCacheDir(environment) if err != nil { return nil, fmt.Errorf("could not detect cache directory: %w", err) @@ -336,30 +307,18 @@ func athenzPath(filename string) (string, error) { return filepath.Join(userHome, ".athenz", filename), nil } -func (c *Config) findLocalConfigDir(dir string) (string, error) { - userHome, err := os.UserHomeDir() - if err != nil { - return "", err +func (c *Config) loadLocalConfigFrom(parent string) error { + home := filepath.Join(parent, ".vespa") + _, err := os.Stat(home) + if err != nil && !os.IsNotExist(err) { + return err } - dir, err = filepath.Abs(dir) + config, err := loadConfigFrom(home, c.environment, c.flags) if err != nil { - return "", err - } - for dir != userHome { - vespaDir := filepath.Join(dir, ".vespa") - _, err := os.Stat(vespaDir) - if err == nil { - return vespaDir, nil - } else if err != nil && !os.IsNotExist(err) { - return "", err - } - parent := filepath.Clean(filepath.Join(dir, "..")) - if parent == dir { - break - } - dir = parent + return err } - return "", nil + c.local = config + return nil } func (c *Config) write() error { @@ -568,6 +527,8 @@ func (c *Config) applicationFilePath(app vespa.ApplicationID, name string) (stri return filepath.Join(appDir, name), nil } +func (c *Config) isEmpty() bool { return len(c.config.Keys()) == 0 } + // list returns the options that have been set in this configuration. If includeUnset is true, also return options that // haven't been set. func (c *Config) list(includeUnset bool) []string { @@ -583,12 +544,12 @@ func (c *Config) list(includeUnset bool) []string { } // flagValue returns the set value and default value of the named flag. -func (c *Config) flagValue(name string) (string, string, bool) { +func (c *Config) flagValue(name string) (string, string) { f, ok := c.flags[name] if !ok { - return "", "", ok + return "", "" } - return f.Value.String(), f.DefValue, f.Changed + return f.Value.String(), f.DefValue } // getNonEmpty returns value of given option, if that value is non-empty @@ -603,9 +564,9 @@ func (c *Config) getNonEmpty(option string) (string, bool) { // get returns the value associated with option, from the most preferred source in the following order: flag > local // config > global config. func (c *Config) get(option string) (string, bool) { - flagValue, flagDefault, changed := c.flagValue(option) + flagValue, flagDefault := c.flagValue(option) // explicit flag value always takes precedence over everything else - if changed { + if flagValue != flagDefault { return flagValue, true } // ... then local config, if option is explicitly defined there diff --git a/client/go/internal/cli/cmd/config_test.go b/client/go/internal/cli/cmd/config_test.go index 34c26ce4572..612904061de 100644 --- a/client/go/internal/cli/cmd/config_test.go +++ b/client/go/internal/cli/cmd/config_test.go @@ -28,7 +28,6 @@ func TestConfig(t *testing.T) { assertConfigCommand(t, configHome, "", "config", "set", "target", "http://127.0.0.1:8080") assertConfigCommand(t, configHome, "", "config", "set", "target", "https://127.0.0.1") assertConfigCommand(t, configHome, "target = https://127.0.0.1\n", "config", "get", "target") - assertConfigCommand(t, configHome, "target = local\n", "config", "get", "-t", "local", "target") // application assertConfigCommandErr(t, configHome, "Error: invalid application: \"foo\"\n", "config", "set", "application", "foo") @@ -104,14 +103,7 @@ func TestLocalConfig(t *testing.T) { // get reads global option if unset locally assertConfigCommand(t, configHome, "target = cloud\n", "config", "get", "target") - // get prints local config when in a a sub-directory of the application package - subDir := filepath.Join(rootDir, "a", "b") - require.Nil(t, os.MkdirAll(subDir, 0755)) - require.Nil(t, os.Chdir(subDir)) - assertConfigCommand(t, configHome, "instance = foo\n", "config", "get", "--local") - // get merges settings from local and global config - require.Nil(t, os.Chdir(rootDir)) assertConfigCommand(t, configHome, "", "config", "set", "--local", "application", "t1.a1") assertConfigCommand(t, configHome, `application = t1.a1.default cluster = <unset> diff --git a/client/go/internal/cli/cmd/deploy_test.go b/client/go/internal/cli/cmd/deploy_test.go index f97177373eb..9eaf878bc5e 100644 --- a/client/go/internal/cli/cmd/deploy_test.go +++ b/client/go/internal/cli/cmd/deploy_test.go @@ -9,7 +9,6 @@ import ( "testing" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" "github.com/vespa-engine/vespa/client/go/internal/mock" "github.com/vespa-engine/vespa/client/go/internal/vespa" ) @@ -112,7 +111,7 @@ func assertDeploy(applicationPackage string, arguments []string, t *testing.T) { cli, stdout, _ := newTestCLI(t) client := &mock.HTTPClient{} cli.httpClient = client - require.Nil(t, cli.Run(arguments...)) + assert.Nil(t, cli.Run(arguments...)) assert.Equal(t, "\nSuccess: Deployed "+applicationPackage+"\n", stdout.String()) diff --git a/client/go/internal/cli/cmd/root.go b/client/go/internal/cli/cmd/root.go index 5f993fe2a02..58e940d59ef 100644 --- a/client/go/internal/cli/cmd/root.go +++ b/client/go/internal/cli/cmd/root.go @@ -46,7 +46,6 @@ type CLI struct { cmd *cobra.Command config *Config - flags map[string]*pflag.Flag version version.Version httpClient util.HTTPClient @@ -152,8 +151,7 @@ For detailed description of flags and configuration, see 'vespa help config'. }, } cli.isTerminal = func() bool { return isTerminal(cli.Stdout) && isTerminal(cli.Stderr) } - cli.flags = cli.configureFlags() - if err := cli.loadConfig(""); err != nil { + if err := cli.loadConfig(); err != nil { return nil, err } cli.configureSpinner() @@ -162,8 +160,8 @@ For detailed description of flags and configuration, see 'vespa help config'. return &cli, nil } -func (c *CLI) loadConfig(workDir string) error { - config, err := loadConfig(c.Environment, c.flags, workDir) +func (c *CLI) loadConfig() error { + config, err := loadConfig(c.Environment, c.configureFlags()) if err != nil { return err } @@ -542,7 +540,7 @@ func (c *CLI) applicationPackageFrom(args []string, requirePackaging bool) (vesp } if stat.IsDir() { // Using an explicit application directory, look for local config in that directory too - if err := c.loadConfig(path); err != nil { + if err := c.config.loadLocalConfigFrom(path); err != nil { return vespa.ApplicationPackage{}, err } } diff --git a/client/go/internal/cli/cmd/visit_test.go b/client/go/internal/cli/cmd/visit_test.go index b6e5b893e0b..4302680b9d9 100644 --- a/client/go/internal/cli/cmd/visit_test.go +++ b/client/go/internal/cli/cmd/visit_test.go @@ -47,7 +47,7 @@ func TestQuoteFunc(t *testing.T) { res := quoteArgForUrl(s) if i < 32 || i > 127 { assert.Equal(t, "a+z", res) - } else if testing.Verbose() { // go test -v + } else { fmt.Printf("res %3d => '%s'\n", i, res) } } |