-
Notifications
You must be signed in to change notification settings - Fork 59
Feature/xdg base dir 2 #68
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
SwampDragons
merged 13 commits into
hashicorp:main
from
teddylear:feature/xdg-base-dir-2
Jul 28, 2021
Merged
Changes from 1 commit
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
f8d8c28
Updating default config and cache directory for unix systems
teddylear 50d37c5
Fixing cache config for unix to point to XDG_CACHE_HOME
teddylear 0155950
Changing XDG config dir to be used for packer config dir if it exists…
teddylear 2d18051
Updating to make point to proper function
teddylear e436960
Fixing config direcotry function to match new specs
teddylear 1fae0aa
Fixing linting issues
teddylear 655a261
Adding imports to config file windows
teddylear beaa322
Update cache directory configuration logic
teddylear 1aee4ae
Updated last case for cache and config to be $HOME/<.cache or .config…
teddylear 60ef4e6
Updating config file directory when $XDG_CONFIG_HOME defined to be $X…
teddylear 281eb19
Update pathing/config_file_windows.go
teddylear 31918db
Update packer/cache_config_unix.go
teddylear 006be29
Add tests for changing config and cache configuration. Addressing PR
teddylear File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -10,12 +10,18 @@ import ( | |||||||||||||||||||||||
| // When the directory is not absolute, CachePath will try to make a | ||||||||||||||||||||||||
| // a cache depending on the operating system. | ||||||||||||||||||||||||
| // | ||||||||||||||||||||||||
| // TODO: Update this with better examples | ||||||||||||||||||||||||
| // NOTE: cache directory will change depending on operating system dependent | ||||||||||||||||||||||||
| // ex: | ||||||||||||||||||||||||
| // For Windows: | ||||||||||||||||||||||||
| // PACKER_CACHE_DIR="" CacheDir() => "./packer_cache/ | ||||||||||||||||||||||||
| // PACKER_CACHE_DIR="" CacheDir("foo") => "./packer_cache/foo | ||||||||||||||||||||||||
| // PACKER_CACHE_DIR="bar" CacheDir("foo") => "./bar/foo | ||||||||||||||||||||||||
| // PACKER_CACHE_DIR="/home/there" CacheDir("foo", "bar") => "/home/there/foo/bar | ||||||||||||||||||||||||
| // For Unix: | ||||||||||||||||||||||||
| // PACKER_CACHE_DIR="", XDG_CONFIG_HOME="", Default_config CacheDir() => "$HOME/cache/packer" | ||||||||||||||||||||||||
| // PACKER_CACHE_DIR="", XDG_CONFIG_HOME="", Default_config CacheDir("foo") => "$HOME/cache/packer/foo" | ||||||||||||||||||||||||
| // PACKER_CACHE_DIR="bar", XDG_CONFIG_HOME="", Default_config CacheDir("foo") => "./bar/foo | ||||||||||||||||||||||||
| // PACKER_CACHE_DIR="/home/there", XDG_CONFIG_HOME="", Default_config CacheDir("foo", "bar") => "/home/there/foo/bar | ||||||||||||||||||||||||
|
Comment on lines
+20
to
+24
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like these new examples !
Suggested change
|
||||||||||||||||||||||||
| func CachePath(paths ...string) (path string, err error) { | ||||||||||||||||||||||||
| defer func() { | ||||||||||||||||||||||||
| // create the dir based on return path if it doesn't exist | ||||||||||||||||||||||||
|
|
@@ -27,9 +33,5 @@ func CachePath(paths ...string) (path string, err error) { | |||||||||||||||||||||||
| } | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| paths = append([]string{cacheDir}, paths...) | ||||||||||||||||||||||||
| result, err := filepath.Abs(filepath.Join(paths...)) | ||||||||||||||||||||||||
| if err != nil { | ||||||||||||||||||||||||
| return "", err | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
| return result, err | ||||||||||||||||||||||||
| return filepath.Abs(filepath.Join(paths...)) | ||||||||||||||||||||||||
| } | ||||||||||||||||||||||||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,108 @@ | ||
| // +build darwin freebsd linux netbsd openbsd solaris | ||
|
|
||
| package packer | ||
|
|
||
| import ( | ||
| "io/ioutil" | ||
| "os" | ||
| "path/filepath" | ||
| "testing" | ||
| ) | ||
|
|
||
| func TestCachePath(t *testing.T) { | ||
| // temporary directories for env vars | ||
| xdgCacheHomeTempDir, err := ioutil.TempDir(os.TempDir(), "*") | ||
| if err != nil { | ||
| t.Fatalf("Failed to create temp test directory: failing test: %v", err) | ||
| } | ||
| defer os.RemoveAll(xdgCacheHomeTempDir) | ||
| packerCacheTempDir, err := ioutil.TempDir(os.TempDir(), "*") | ||
| if err != nil { | ||
| t.Fatalf("Failed to create temp test directory: failing test: %v", err) | ||
| } | ||
| defer os.RemoveAll(packerCacheTempDir) | ||
|
|
||
| // reset env | ||
| packerCacheDir := os.Getenv("PACKER_CACHE_DIR") | ||
| os.Setenv("PACKER_CACHE_DIR", "") | ||
| defer func() { | ||
| os.Setenv("PACKER_CACHE_DIR", packerCacheDir) | ||
| }() | ||
|
|
||
| xdgCacheHomeDir := os.Getenv("XDG_CACHE_HOME") | ||
| os.Setenv("XDG_CACHE_HOME", "") | ||
| defer func() { | ||
| os.Setenv("XDG_CACHE_HOME", xdgCacheHomeDir) | ||
| }() | ||
|
Comment on lines
+25
to
+36
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Super nice ! |
||
|
|
||
| type args struct { | ||
| paths []string | ||
| } | ||
| tests := []struct { | ||
| name string | ||
| args args | ||
| env map[string]string | ||
| want string | ||
| wantErr bool | ||
| }{ | ||
| { | ||
| "base", | ||
| args{}, | ||
| nil, | ||
| filepath.Join(os.Getenv("HOME"), ".cache", "packer"), | ||
| false, | ||
| }, | ||
| { | ||
| "base and path", | ||
| args{[]string{"a", "b"}}, | ||
| nil, | ||
| filepath.Join(os.Getenv("HOME"), ".cache", "packer", "a", "b"), | ||
| false, | ||
| }, | ||
| { | ||
| "env PACKER_CACHE_DIR and path", | ||
| args{[]string{"a", "b"}}, | ||
| map[string]string{"PACKER_CACHE_DIR": packerCacheTempDir}, | ||
| filepath.Join(packerCacheTempDir, "a", "b"), | ||
| false, | ||
| }, | ||
| { | ||
| "env XDG_CACHE_HOME and path", | ||
| args{[]string{"a", "b"}}, | ||
| map[string]string{"XDG_CACHE_HOME": xdgCacheHomeTempDir}, | ||
| filepath.Join(xdgCacheHomeTempDir, "packer", "a", "b"), | ||
| false, | ||
| }, | ||
| { | ||
| "env PACKER_CACHE_DIR, XDG_CACHE_HOME, and path", | ||
| args{[]string{"a", "b"}}, | ||
| map[string]string{ | ||
| "XDG_CACHE_HOME": xdgCacheHomeTempDir, | ||
| "PACKER_CACHE_DIR": packerCacheTempDir, | ||
| }, | ||
| filepath.Join(packerCacheTempDir, "a", "b"), | ||
| false, | ||
| }, | ||
| } | ||
| for _, tt := range tests { | ||
| t.Run(tt.name, func(t *testing.T) { | ||
| for k, v := range tt.env { | ||
| os.Setenv(k, v) | ||
| } | ||
| got, err := CachePath(tt.args.paths...) | ||
| if (err != nil) != tt.wantErr { | ||
| t.Errorf("CachePath() error = %v, wantErr %v", err, tt.wantErr) | ||
| return | ||
| } | ||
| if got != tt.want { | ||
| t.Errorf("CachePath() = %v, want %v", got, tt.want) | ||
| } | ||
| resetTestEnv() | ||
| }) | ||
| } | ||
| } | ||
|
|
||
| func resetTestEnv() { | ||
| os.Setenv("PACKER_CACHE_DIR", "") | ||
| os.Setenv("XDG_CACHE_HOME", "") | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| // +build windows | ||
|
|
||
| package packer | ||
|
|
||
| import ( | ||
| "os" | ||
| "path/filepath" | ||
| "testing" | ||
| ) | ||
|
|
||
| func TestCachePath(t *testing.T) { | ||
| wd, err := os.Getwd() | ||
| if err != nil { | ||
| t.Fatalf("Getwd: %v", err) | ||
| } | ||
| tmp := os.TempDir() | ||
|
|
||
| // reset env | ||
| cd := os.Getenv("PACKER_CACHE_DIR") | ||
| os.Setenv("PACKER_CACHE_DIR", "") | ||
| defer func() { | ||
| os.Setenv("PACKER_CACHE_DIR", cd) | ||
| }() | ||
|
|
||
| type args struct { | ||
| paths []string | ||
| } | ||
| tests := []struct { | ||
| name string | ||
| args args | ||
| env map[string]string | ||
| want string | ||
| wantErr bool | ||
| }{ | ||
| {"base", args{}, nil, filepath.Join(wd, "packer_cache"), false}, | ||
| {"base and path", args{[]string{"a", "b"}}, nil, filepath.Join(wd, "packer_cache", "a", "b"), false}, | ||
| {"env and path", args{[]string{"a", "b"}}, map[string]string{"PACKER_CACHE_DIR": tmp}, filepath.Join(tmp, "a", "b"), false}, | ||
| } | ||
| for _, tt := range tests { | ||
| t.Run(tt.name, func(t *testing.T) { | ||
| for k, v := range tt.env { | ||
| os.Setenv(k, v) | ||
| } | ||
| got, err := CachePath(tt.args.paths...) | ||
| if (err != nil) != tt.wantErr { | ||
| t.Errorf("CachePath() error = %v, wantErr %v", err, tt.wantErr) | ||
| return | ||
| } | ||
| if got != tt.want { | ||
| t.Errorf("CachePath() = %v, want %v", got, tt.want) | ||
| } | ||
| }) | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,141 @@ | ||
| // +build darwin freebsd linux netbsd openbsd solaris | ||
|
|
||
| package pathing | ||
|
|
||
| import ( | ||
| "io/ioutil" | ||
| "os" | ||
| "path/filepath" | ||
| "testing" | ||
| ) | ||
|
|
||
| func TestConfigPath(t *testing.T) { | ||
| // temporary directories for env vars | ||
| xdgConfigHomeTempDir, err := ioutil.TempDir(os.TempDir(), "*") | ||
| if err != nil { | ||
| t.Fatalf("Failed to create temp test directory: failing test: %v", err) | ||
| } | ||
| defer os.RemoveAll(xdgConfigHomeTempDir) | ||
|
|
||
| packerConfigTempDir, err := ioutil.TempDir(os.TempDir(), "*") | ||
| if err != nil { | ||
| t.Fatalf("Failed to create temp test directory: failing test: %v", err) | ||
| } | ||
| defer os.RemoveAll(packerConfigTempDir) | ||
|
|
||
| homeTempDir, err := ioutil.TempDir(os.TempDir(), "*") | ||
| if err != nil { | ||
| t.Fatalf("Failed to create temp test directory: failing test: %v", err) | ||
| } | ||
| defer os.RemoveAll(homeTempDir) | ||
|
|
||
| homeDirDefaultConfigTempDir, err := ioutil.TempDir(os.TempDir(), "*") | ||
| if err != nil { | ||
| t.Fatalf("Failed to create temp test directory: failing test: %v", err) | ||
| } | ||
|
|
||
| err = os.Mkdir(filepath.Join(homeDirDefaultConfigTempDir, defaultConfigDir), 0755) | ||
| if err != nil { | ||
| t.Fatalf("Failed to create temp test file: failing test: %v", err) | ||
| } | ||
| defer os.RemoveAll(homeDirDefaultConfigTempDir) | ||
|
|
||
| // reset env | ||
| packerConfigDir := os.Getenv("PACKER_CONFIG_DIR") | ||
| os.Setenv("PACKER_CONFIG_DIR", "") | ||
| defer func() { | ||
| os.Setenv("PACKER_CONFIG_DIR", packerConfigDir) | ||
| }() | ||
|
|
||
| xdgConfigHomeDir := os.Getenv("XDG_CONFIG_HOME") | ||
| os.Setenv("XDG_CONFIG_HOME", "") | ||
| defer func() { | ||
| os.Setenv("XDG_CONFIG_HOME", xdgConfigHomeDir) | ||
| }() | ||
|
|
||
| homeDir := os.Getenv("HOME") | ||
| os.Setenv("HOME", "") | ||
| defer func() { | ||
| os.Setenv("HOME", homeDir) | ||
| }() | ||
|
|
||
| tests := []struct { | ||
| name string | ||
| env map[string]string | ||
| want string | ||
| wantErr bool | ||
| }{ | ||
| { | ||
| "no HOME env var", | ||
| nil, | ||
| "", | ||
| true, | ||
| }, | ||
| { | ||
| "base", | ||
| map[string]string{"HOME": homeTempDir}, | ||
| filepath.Join(homeTempDir, ".config", "packer"), | ||
| false, | ||
| }, | ||
| { | ||
| "XDG_CONFIG_HOME set without default file", | ||
| map[string]string{ | ||
| "XDG_CONFIG_HOME": xdgConfigHomeTempDir, | ||
| "HOME": homeTempDir, | ||
| }, | ||
| filepath.Join(xdgConfigHomeTempDir, "packer"), | ||
| false, | ||
| }, | ||
| { | ||
| "env PACKER_CONFIG_DIR", | ||
| map[string]string{"PACKER_CONFIG_DIR": packerConfigTempDir}, | ||
| filepath.Join(packerConfigTempDir, defaultConfigDir), | ||
| false, | ||
| }, | ||
| { | ||
| "env PACKER_CONFIG_DIR, XDG_CONFIG_HOME", | ||
| map[string]string{ | ||
| "XDG_CONFIG_HOME": xdgConfigHomeTempDir, | ||
| "PACKER_CONFIG_DIR": packerConfigTempDir, | ||
| }, | ||
| filepath.Join(packerConfigTempDir, defaultConfigDir), | ||
| false, | ||
| }, | ||
| { | ||
| "Old Default Config Found", | ||
| map[string]string{"HOME": homeDirDefaultConfigTempDir}, | ||
| filepath.Join(homeDirDefaultConfigTempDir, defaultConfigDir), | ||
| false, | ||
| }, | ||
| } | ||
| for _, tt := range tests { | ||
| t.Run(tt.name, func(t *testing.T) { | ||
| for k, v := range tt.env { | ||
| os.Setenv(k, v) | ||
| } | ||
| got, err := ConfigDir() | ||
| if (err != nil) != tt.wantErr { | ||
| t.Errorf( | ||
| "Name: %v, ConfigPath() error = %v, wantErr %v", | ||
| tt.name, | ||
| err, | ||
| tt.wantErr) | ||
| return | ||
| } | ||
| if got != tt.want { | ||
| t.Errorf( | ||
| "Name: %v, ConfigPath() = %v, want %v", | ||
| tt.name, | ||
| got, | ||
| tt.want) | ||
| } | ||
| resetTestEnv() | ||
| }) | ||
| } | ||
| } | ||
|
|
||
| func resetTestEnv() { | ||
| os.Setenv("PACKER_CONFIG_DIR", "") | ||
| os.Setenv("XDG_CONFIG_HOME", "") | ||
| os.Setenv("HOME", "") | ||
| } |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👋🏼
Could you please update the examples down here in this list depending on the OS ? That would make it easier for me. 🙂
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Super awesome, thanks.