From fc521f3e578e03d3efaff2d3e2edf31c49591ef3 Mon Sep 17 00:00:00 2001 From: Tom Barlow Date: Thu, 26 Mar 2015 08:29:01 +0000 Subject: [PATCH 1/5] Added env usage hint for bash and fish shells Signed-off-by: Tom Barlow --- commands.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/commands.go b/commands.go index 7c93ecbd9f..21622a1a57 100644 --- a/commands.go +++ b/commands.go @@ -728,11 +728,13 @@ func cmdEnv(c *cli.Context) { switch userShell { case "fish": - fmt.Printf("set -x DOCKER_TLS_VERIFY 1;\nset -x DOCKER_CERT_PATH %q;\nset -x DOCKER_HOST %s;\n", - cfg.machineDir, dockerHost) + usageHint := fmt.Sprintf("# Run this command to configure your shell: eval (docker-machine env %s)", cfg.machineName) + fmt.Printf("set -x DOCKER_TLS_VERIFY 1;\nset -x DOCKER_CERT_PATH %q;\nset -x DOCKER_HOST %s;\n\n%s\n", + cfg.machineDir, dockerHost, usageHint) default: - fmt.Printf("export DOCKER_TLS_VERIFY=1\nexport DOCKER_CERT_PATH=%q\nexport DOCKER_HOST=%s\n", - cfg.machineDir, dockerHost) + usageHint := fmt.Sprintf("# Run this command to configure your shell: eval $(docker-machine env %s)", cfg.machineName) + fmt.Printf("export DOCKER_TLS_VERIFY=1\nexport DOCKER_CERT_PATH=%q\nexport DOCKER_HOST=%s\n\n%s\n", + cfg.machineDir, dockerHost, usageHint) } } From d54021e62338e22f84e528b6126879920cce4c31 Mon Sep 17 00:00:00 2001 From: Tom Barlow Date: Thu, 26 Mar 2015 12:55:32 +0000 Subject: [PATCH 2/5] Refactored usage hint into a helper method and updated test Signed-off-by: Tom Barlow --- commands.go | 35 +++++++++++++++++++++++++++++------ commands_test.go | 6 ++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/commands.go b/commands.go index 21622a1a57..dff91193e2 100644 --- a/commands.go +++ b/commands.go @@ -726,18 +726,41 @@ func cmdEnv(c *cli.Context) { } } + usageHint := generateUsageHint(c, userShell) + switch userShell { case "fish": - usageHint := fmt.Sprintf("# Run this command to configure your shell: eval (docker-machine env %s)", cfg.machineName) - fmt.Printf("set -x DOCKER_TLS_VERIFY 1;\nset -x DOCKER_CERT_PATH %q;\nset -x DOCKER_HOST %s;\n\n%s\n", - cfg.machineDir, dockerHost, usageHint) + fmt.Printf("%s\n\nset -x DOCKER_TLS_VERIFY 1;\nset -x DOCKER_CERT_PATH %q;\nset -x DOCKER_HOST %s;\n", + usageHint, cfg.machineDir, dockerHost) default: - usageHint := fmt.Sprintf("# Run this command to configure your shell: eval $(docker-machine env %s)", cfg.machineName) - fmt.Printf("export DOCKER_TLS_VERIFY=1\nexport DOCKER_CERT_PATH=%q\nexport DOCKER_HOST=%s\n\n%s\n", - cfg.machineDir, dockerHost, usageHint) + fmt.Printf("%s\nexport DOCKER_TLS_VERIFY=1\nexport DOCKER_CERT_PATH=%q\nexport DOCKER_HOST=%s\n", + usageHint, cfg.machineDir, dockerHost) } } +func generateUsageHint(c *cli.Context, userShell string) string { + msg := "# Run this command to configure your shell: " + cmd := "" + machine := c.Args().First() + + switch userShell { + case "fish": + if machine != "" { + cmd = fmt.Sprintf("eval (docker-machine env %s)", machine) + } else { + cmd = "eval (docker-machine env)" + } + default: + if machine != "" { + cmd = fmt.Sprintf("eval $(docker-machine env %s)", machine) + } else { + cmd = "eval $(docker-machine env)" + } + } + + return fmt.Sprintf("%s %s\n", msg, cmd) +} + func cmdSsh(c *cli.Context) { var ( err error diff --git a/commands_test.go b/commands_test.go index 7de8771cc9..835f6e07ba 100644 --- a/commands_test.go +++ b/commands_test.go @@ -475,6 +475,9 @@ func TestCmdEnvBash(t *testing.T) { // parse the output into a map of envvar:value for easier testing below envvars := make(map[string]string) for _, e := range strings.Split(strings.TrimSpace(out), "\n") { + if strings.HasPrefix(e, "#") || e == "" { + continue + } kv := strings.SplitN(e, "=", 2) key, value := kv[0], kv[1] envvars[strings.Replace(key, "export ", "", 1)] = value @@ -570,6 +573,9 @@ func TestCmdEnvFish(t *testing.T) { // parse the output into a map of envvar:value for easier testing below envvars := make(map[string]string) for _, e := range strings.Split(strings.TrimSuffix(out, ";\n"), ";\n") { + if strings.HasPrefix(e, "#") || e == "" { + continue + } kv := strings.SplitN(strings.Replace(e, "set -x ", "", 1), " ", 2) key, value := kv[0], kv[1] envvars[key] = value From 1767b386f6652bf2e4ec804ebab8e057f3589d31 Mon Sep 17 00:00:00 2001 From: Tom Barlow Date: Thu, 26 Mar 2015 13:19:26 +0000 Subject: [PATCH 3/5] Moved env usage hint to end of output to avoid shell expansion issue Signed-off-by: Tom Barlow --- commands.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/commands.go b/commands.go index dff91193e2..3c19d48f08 100644 --- a/commands.go +++ b/commands.go @@ -730,11 +730,11 @@ func cmdEnv(c *cli.Context) { switch userShell { case "fish": - fmt.Printf("%s\n\nset -x DOCKER_TLS_VERIFY 1;\nset -x DOCKER_CERT_PATH %q;\nset -x DOCKER_HOST %s;\n", - usageHint, cfg.machineDir, dockerHost) + fmt.Printf("set -x DOCKER_TLS_VERIFY 1;\nset -x DOCKER_CERT_PATH %q;\nset -x DOCKER_HOST %s;\n\n%s\n", + cfg.machineDir, dockerHost, usageHint) default: - fmt.Printf("%s\nexport DOCKER_TLS_VERIFY=1\nexport DOCKER_CERT_PATH=%q\nexport DOCKER_HOST=%s\n", - usageHint, cfg.machineDir, dockerHost) + fmt.Printf("export DOCKER_TLS_VERIFY=1\nexport DOCKER_CERT_PATH=%q\nexport DOCKER_HOST=%s\n\n%s\n", + cfg.machineDir, dockerHost, usageHint) } } From 3f76cf14ad1d3c91b8905544b757f0a1b106bde1 Mon Sep 17 00:00:00 2001 From: Tom Barlow Date: Thu, 26 Mar 2015 13:31:05 +0000 Subject: [PATCH 4/5] In cmdEnv test ignore anything that doesn't start with set -x or export Signed-off-by: Tom Barlow --- commands_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commands_test.go b/commands_test.go index 835f6e07ba..d20334be6b 100644 --- a/commands_test.go +++ b/commands_test.go @@ -475,7 +475,7 @@ func TestCmdEnvBash(t *testing.T) { // parse the output into a map of envvar:value for easier testing below envvars := make(map[string]string) for _, e := range strings.Split(strings.TrimSpace(out), "\n") { - if strings.HasPrefix(e, "#") || e == "" { + if !strings.HasPrefix(e, "export ") { continue } kv := strings.SplitN(e, "=", 2) @@ -573,7 +573,7 @@ func TestCmdEnvFish(t *testing.T) { // parse the output into a map of envvar:value for easier testing below envvars := make(map[string]string) for _, e := range strings.Split(strings.TrimSuffix(out, ";\n"), ";\n") { - if strings.HasPrefix(e, "#") || e == "" { + if !strings.HasPrefix(e, "set -x ") { continue } kv := strings.SplitN(strings.Replace(e, "set -x ", "", 1), " ", 2) From f2b25ae3f15e3e8d737286bd95caa4c85eaa825f Mon Sep 17 00:00:00 2001 From: Tom Barlow Date: Fri, 27 Mar 2015 17:39:26 +0000 Subject: [PATCH 5/5] Refactored env usage hint with @ehazlett's review comments Signed-off-by: Tom Barlow --- commands.go | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/commands.go b/commands.go index 3c19d48f08..bbb67ce3a4 100644 --- a/commands.go +++ b/commands.go @@ -726,7 +726,7 @@ func cmdEnv(c *cli.Context) { } } - usageHint := generateUsageHint(c, userShell) + usageHint := generateUsageHint(c.Args().First(), userShell) switch userShell { case "fish": @@ -738,27 +738,24 @@ func cmdEnv(c *cli.Context) { } } -func generateUsageHint(c *cli.Context, userShell string) string { - msg := "# Run this command to configure your shell: " +func generateUsageHint(machineName string, userShell string) string { cmd := "" - machine := c.Args().First() - switch userShell { case "fish": - if machine != "" { - cmd = fmt.Sprintf("eval (docker-machine env %s)", machine) + if machineName != "" { + cmd = fmt.Sprintf("eval (docker-machine env %s)", machineName) } else { cmd = "eval (docker-machine env)" } default: - if machine != "" { - cmd = fmt.Sprintf("eval $(docker-machine env %s)", machine) + if machineName != "" { + cmd = fmt.Sprintf("eval $(docker-machine env %s)", machineName) } else { cmd = "eval $(docker-machine env)" } } - return fmt.Sprintf("%s %s\n", msg, cmd) + return fmt.Sprintf("# Run this command to configure your shell: %s\n", cmd) } func cmdSsh(c *cli.Context) {