summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2023-04-11 10:21:51 +0200
committerGitHub <noreply@github.com>2023-04-11 10:21:51 +0200
commit54566b7a4cc0e6f1e6b879e8d8ef4f1f9bcd0d43 (patch)
tree87c27e729a411de4ab6eb5e0cee1e83167d231a0
parent994461dddf51fe8ee608bfc504584a6c18a4fef5 (diff)
Revert "Read local config when in an application package sub-directory"
-rw-r--r--client/go/internal/cli/cmd/config.go85
-rw-r--r--client/go/internal/cli/cmd/config_test.go8
-rw-r--r--client/go/internal/cli/cmd/deploy_test.go3
-rw-r--r--client/go/internal/cli/cmd/root.go10
-rw-r--r--client/go/internal/cli/cmd/visit_test.go2
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)
}
}