From 27a73a98b704b77eaa7c4caebfeaa84743969c67 Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Wed, 18 Feb 2015 14:04:42 -0800 Subject: [PATCH 1/3] Shorten help messages for docker cmd flags In order to fit printed messages to fit 80 chars, rewording messages for `-H` and `--tls` flags. Signed-off-by: Ahmet Alp Balkan --- contrib/completion/fish/docker.fish | 2 +- docker/flags.go | 4 ++-- docs/sources/reference/commandline/cli.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/contrib/completion/fish/docker.fish b/contrib/completion/fish/docker.fish index b7bd914177..88caf15ea8 100644 --- a/contrib/completion/fish/docker.fish +++ b/contrib/completion/fish/docker.fish @@ -72,7 +72,7 @@ complete -c docker -f -n '__fish_docker_no_subcommand' -l registry-mirror -d 'Sp complete -c docker -f -n '__fish_docker_no_subcommand' -s s -l storage-driver -d 'Force the Docker runtime to use a specific storage driver' complete -c docker -f -n '__fish_docker_no_subcommand' -l selinux-enabled -d 'Enable selinux support. SELinux does not presently support the BTRFS storage driver' complete -c docker -f -n '__fish_docker_no_subcommand' -l storage-opt -d 'Set storage driver options' -complete -c docker -f -n '__fish_docker_no_subcommand' -l tls -d 'Use TLS; implied by --tlsverify flag' +complete -c docker -f -n '__fish_docker_no_subcommand' -l tls -d 'Use TLS; implied by --tlsverify' complete -c docker -f -n '__fish_docker_no_subcommand' -l tlscacert -d 'Trust only remotes providing a certificate signed by the CA given here' complete -c docker -f -n '__fish_docker_no_subcommand' -l tlscert -d 'Path to TLS certificate file' complete -c docker -f -n '__fish_docker_no_subcommand' -l tlskey -d 'Path to TLS key file' diff --git a/docker/flags.go b/docker/flags.go index 49f48b7f8c..7f0c10d2d3 100644 --- a/docker/flags.go +++ b/docker/flags.go @@ -35,7 +35,7 @@ var ( flDaemon = flag.Bool([]string{"d", "-daemon"}, false, "Enable daemon mode") flDebug = flag.Bool([]string{"D", "-debug"}, false, "Enable debug mode") flLogLevel = flag.String([]string{"l", "-log-level"}, "info", "Set the logging level") - flTls = flag.Bool([]string{"-tls"}, false, "Use TLS; implied by --tlsverify flag") + flTls = flag.Bool([]string{"-tls"}, false, "Use TLS; implied by --tlsverify") flHelp = flag.Bool([]string{"h", "-help"}, false, "Print usage") flTlsVerify = flag.Bool([]string{"-tlsverify"}, dockerTlsVerify, "Use TLS and verify the remote") @@ -65,7 +65,7 @@ func init() { flCa = flag.String([]string{"-tlscacert"}, filepath.Join(dockerCertPath, defaultCaFile), "Trust certs signed only by this CA") flCert = flag.String([]string{"-tlscert"}, filepath.Join(dockerCertPath, defaultCertFile), "Path to TLS certificate file") flKey = flag.String([]string{"-tlskey"}, filepath.Join(dockerCertPath, defaultKeyFile), "Path to TLS key file") - opts.HostListVar(&flHosts, []string{"H", "-host"}, "Daemon socket(s) to use or connect to") + opts.HostListVar(&flHosts, []string{"H", "-host"}, "Daemon socket(s) to connect to") flag.Usage = func() { fmt.Fprint(os.Stdout, "Usage: docker [OPTIONS] COMMAND [arg...]\n\nA self-sufficient runtime for linux containers.\n\nOptions:\n") diff --git a/docs/sources/reference/commandline/cli.md b/docs/sources/reference/commandline/cli.md index 2f6d57d43b..356a9566ff 100644 --- a/docs/sources/reference/commandline/cli.md +++ b/docs/sources/reference/commandline/cli.md @@ -86,7 +86,7 @@ expect an integer, and they can only be specified once. --fixed-cidr-v6="" IPv6 subnet for fixed IPs -G, --group="docker" Group for the unix socket -g, --graph="/var/lib/docker" Root of the Docker runtime - -H, --host=[] Daemon socket(s) to use or connect to + -H, --host=[] Daemon socket(s) to connect to -h, --help=false Print usage --icc=true Enable inter-container communication --insecure-registry=[] Enable insecure registry communication @@ -103,7 +103,7 @@ expect an integer, and they can only be specified once. -s, --storage-driver="" Storage driver to use --selinux-enabled=false Enable selinux support --storage-opt=[] Set storage driver options - --tls=false Use TLS; implied by --tlsverify flag + --tls=false Use TLS; implied by --tlsverify --tlscacert="~/.docker/ca.pem" Trust certs signed only by this CA --tlscert="~/.docker/cert.pem" Path to TLS certificate file --tlskey="~/.docker/key.pem" Path to TLS key file From 8ca37e47607b16535468eb119e90567d4f598b8f Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Wed, 18 Feb 2015 22:53:04 -0800 Subject: [PATCH 2/3] pkg/homedir: implement GetShortcutString() Signed-off-by: Ahmet Alp Balkan --- pkg/homedir/homedir.go | 9 +++++++++ pkg/homedir/homedir_test.go | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/pkg/homedir/homedir.go b/pkg/homedir/homedir.go index f0246e99c4..79d4431fab 100644 --- a/pkg/homedir/homedir.go +++ b/pkg/homedir/homedir.go @@ -14,3 +14,12 @@ func Get() string { } return os.Getenv("HOME") } + +// GetShortcutString returns the string that is shortcut to user's home directory +// in the native shell of the platform running on. +func GetShortcutString() string { + if runtime.GOOS == "windows" { + return "%USERPROFILE%" // be careful while using in format functions + } + return "~" +} diff --git a/pkg/homedir/homedir_test.go b/pkg/homedir/homedir_test.go index b89cbf7a51..7a95cb2bd7 100644 --- a/pkg/homedir/homedir_test.go +++ b/pkg/homedir/homedir_test.go @@ -15,3 +15,10 @@ func TestGet(t *testing.T) { t.Fatalf("returned path is not absolute: %s", home) } } + +func TestGetShortcutString(t *testing.T) { + shortcut := GetShortcutString() + if shortcut == "" { + t.Fatal("returned shortcut string is empty") + } +} From 1c9b37cb965be459a93ce07539d7b2a53fbdbc6a Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Wed, 18 Feb 2015 13:32:42 -0800 Subject: [PATCH 3/3] Shorten printed Windows paths on docker help cmd This makes use of `%USERPROFILE%` as a substitute for `~` on Windows and prints shorter strings for default cert paths etc. Also removes string escaping/quotes around default path values printed in `docker help` command as they are not really necessary and adds double backslashes (\\) on windows. Signed-off-by: Ahmet Alp Balkan --- integration-cli/docker_cli_help_test.go | 21 +++++++-------------- pkg/mflag/flag.go | 14 ++++---------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/integration-cli/docker_cli_help_test.go b/integration-cli/docker_cli_help_test.go index 82761772f3..6a1e9a7249 100644 --- a/integration-cli/docker_cli_help_test.go +++ b/integration-cli/docker_cli_help_test.go @@ -1,23 +1,19 @@ package main import ( - "os" "os/exec" - "runtime" "strings" "testing" "unicode" + + "github.com/docker/docker/pkg/homedir" ) func TestMainHelpWidth(t *testing.T) { // Make sure main help text fits within 80 chars and that // on non-windows system we use ~ when possible (to shorten things) - var home string - if runtime.GOOS != "windows" { - home = os.Getenv("HOME") - } - + home := homedir.Get() helpCmd := exec.Command(dockerBinary, "help") out, ec, err := runCommandWithOutput(helpCmd) if err != nil || ec != 0 { @@ -27,9 +23,10 @@ func TestMainHelpWidth(t *testing.T) { for _, line := range lines { if len(line) > 80 { t.Fatalf("Line is too long(%d chars):\n%s", len(line), line) + } if home != "" && strings.Contains(line, home) { - t.Fatalf("Line should use ~ instead of %q:\n%s", home, line) + t.Fatalf("Line should use '%q' instead of %q:\n%s", homedir.GetShortcutString(), home, line) } } logDone("help - verify main width") @@ -39,11 +36,7 @@ func TestCmdHelpWidth(t *testing.T) { // Make sure main help text fits within 80 chars and that // on non-windows system we use ~ when possible (to shorten things) - var home string - if runtime.GOOS != "windows" { - home = os.Getenv("HOME") - } - + home := homedir.Get() // Pull the list of commands from the "Commands:" section of docker help helpCmd := exec.Command(dockerBinary, "help") out, ec, err := runCommandWithOutput(helpCmd) @@ -82,7 +75,7 @@ func TestCmdHelpWidth(t *testing.T) { t.Fatalf("Help for %q is too long(%d chars):\n%s", command, len(line), line) } if home != "" && strings.Contains(line, home) { - t.Fatalf("Help for %q should use ~ instead of %q on:\n%s", command, home, line) + t.Fatalf("Help for %q should use home shortcut instead of %q on:\n%s", command, home, line) } } } diff --git a/pkg/mflag/flag.go b/pkg/mflag/flag.go index cbdd5eaee4..edb17a2857 100644 --- a/pkg/mflag/flag.go +++ b/pkg/mflag/flag.go @@ -86,12 +86,13 @@ import ( "fmt" "io" "os" - "runtime" "sort" "strconv" "strings" "text/tabwriter" "time" + + "github.com/docker/docker/pkg/homedir" ) // ErrHelp is the error returned if the flag -help is invoked but no such flag is defined. @@ -504,16 +505,9 @@ func Set(name, value string) error { // otherwise, the default values of all defined flags in the set. func (f *FlagSet) PrintDefaults() { writer := tabwriter.NewWriter(f.Out(), 20, 1, 3, ' ', 0) - var home string - if runtime.GOOS != "windows" { - home = os.Getenv("HOME") - } + home := homedir.Get() f.VisitAll(func(flag *Flag) { format := " -%s=%s" - if _, ok := flag.Value.(*stringValue); ok { - // put quotes on the value - format = " -%s=%q" - } names := []string{} for _, name := range flag.Names { if name[0] != '#' { @@ -524,7 +518,7 @@ func (f *FlagSet) PrintDefaults() { val := flag.DefValue if home != "" && strings.HasPrefix(val, home) { - val = "~" + val[len(home):] + val = homedir.GetShortcutString() + val[len(home):] } fmt.Fprintf(writer, format, strings.Join(names, ", -"), val)