diff --git a/components/engine/api/client/cli.go b/components/engine/api/client/cli.go index 5e1ccb3291..fbf204f32c 100644 --- a/components/engine/api/client/cli.go +++ b/components/engine/api/client/cli.go @@ -14,6 +14,7 @@ import ( "text/template" "time" + "github.com/docker/docker/pkg/homedir" flag "github.com/docker/docker/pkg/mflag" "github.com/docker/docker/pkg/term" "github.com/docker/docker/registry" @@ -104,7 +105,7 @@ func (cli *DockerCli) Subcmd(name, signature, description string, exitOnError bo } func (cli *DockerCli) LoadConfigFile() (err error) { - cli.configFile, err = registry.LoadConfig(os.Getenv("HOME")) + cli.configFile, err = registry.LoadConfig(homedir.Get()) if err != nil { fmt.Fprintf(cli.err, "WARNING: %s\n", err) } diff --git a/components/engine/api/client/commands.go b/components/engine/api/client/commands.go index daa13743eb..54a699f4d1 100644 --- a/components/engine/api/client/commands.go +++ b/components/engine/api/client/commands.go @@ -34,6 +34,7 @@ import ( "github.com/docker/docker/opts" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/fileutils" + "github.com/docker/docker/pkg/homedir" flag "github.com/docker/docker/pkg/mflag" "github.com/docker/docker/pkg/parsers" "github.com/docker/docker/pkg/parsers/filters" @@ -388,7 +389,7 @@ func (cli *DockerCli) CmdLogin(args ...string) error { var out2 engine.Env err = out2.Decode(stream) if err != nil { - cli.configFile, _ = registry.LoadConfig(os.Getenv("HOME")) + cli.configFile, _ = registry.LoadConfig(homedir.Get()) return err } registry.SaveConfig(cli.configFile) diff --git a/components/engine/docker/daemon.go b/components/engine/docker/daemon.go index 0923997375..829cd3afb7 100644 --- a/components/engine/docker/daemon.go +++ b/components/engine/docker/daemon.go @@ -16,6 +16,7 @@ import ( _ "github.com/docker/docker/daemon/execdriver/native" "github.com/docker/docker/dockerversion" "github.com/docker/docker/engine" + "github.com/docker/docker/pkg/homedir" flag "github.com/docker/docker/pkg/mflag" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/registry" @@ -36,7 +37,7 @@ func init() { func migrateKey() (err error) { // Migrate trust key if exists at ~/.docker/key.json and owned by current user - oldPath := filepath.Join(getHomeDir(), ".docker", defaultTrustKeyFile) + oldPath := filepath.Join(homedir.Get(), ".docker", defaultTrustKeyFile) newPath := filepath.Join(getDaemonConfDir(), defaultTrustKeyFile) if _, statErr := os.Stat(newPath); os.IsNotExist(statErr) && utils.IsFileOwner(oldPath) { defer func() { diff --git a/components/engine/docker/flags.go b/components/engine/docker/flags.go index 04830f4dd2..8706f09923 100644 --- a/components/engine/docker/flags.go +++ b/components/engine/docker/flags.go @@ -7,6 +7,7 @@ import ( "runtime" "github.com/docker/docker/opts" + "github.com/docker/docker/pkg/homedir" flag "github.com/docker/docker/pkg/mflag" ) @@ -17,21 +18,14 @@ var ( func init() { if dockerCertPath == "" { - dockerCertPath = filepath.Join(getHomeDir(), ".docker") + dockerCertPath = filepath.Join(homedir.Get(), ".docker") } } -func getHomeDir() string { - if runtime.GOOS == "windows" { - return os.Getenv("USERPROFILE") - } - return os.Getenv("HOME") -} - func getDaemonConfDir() string { // TODO: update for Windows daemon if runtime.GOOS == "windows" { - return filepath.Join(os.Getenv("USERPROFILE"), ".docker") + return filepath.Join(homedir.Get(), ".docker") } return "/etc/docker" } @@ -60,7 +54,7 @@ func setDefaultConfFlag(flag *string, def string) { if *flDaemon { *flag = filepath.Join(getDaemonConfDir(), def) } else { - *flag = filepath.Join(getHomeDir(), ".docker", def) + *flag = filepath.Join(homedir.Get(), ".docker", def) } } } diff --git a/components/engine/pkg/homedir/MAINTAINERS b/components/engine/pkg/homedir/MAINTAINERS new file mode 100644 index 0000000000..82733b88f7 --- /dev/null +++ b/components/engine/pkg/homedir/MAINTAINERS @@ -0,0 +1 @@ +Ahmet Alp Balkan (@ahmetalpbalkan) diff --git a/components/engine/pkg/homedir/homedir.go b/components/engine/pkg/homedir/homedir.go new file mode 100644 index 0000000000..f0246e99c4 --- /dev/null +++ b/components/engine/pkg/homedir/homedir.go @@ -0,0 +1,16 @@ +package homedir + +import ( + "os" + "runtime" +) + +// Get returns the home directory of the current user with the help of +// environment variables depending on the target operating system. +// Returned path should be used with "path/filepath" to form new paths. +func Get() string { + if runtime.GOOS == "windows" { + return os.Getenv("USERPROFILE") + } + return os.Getenv("HOME") +} diff --git a/components/engine/pkg/homedir/homedir_test.go b/components/engine/pkg/homedir/homedir_test.go new file mode 100644 index 0000000000..b89cbf7a51 --- /dev/null +++ b/components/engine/pkg/homedir/homedir_test.go @@ -0,0 +1,17 @@ +package homedir + +import ( + "path/filepath" + "testing" +) + +func TestGet(t *testing.T) { + home := Get() + if home == "" { + t.Fatal("returned home directory is empty") + } + + if !filepath.IsAbs(home) { + t.Fatalf("returned path is not absolute: %s", home) + } +}