-
Notifications
You must be signed in to change notification settings - Fork 48
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
Feature/xdg base dir 2 #68
Merged
SwampDragons
merged 13 commits into
hashicorp:main
from
teddylear:feature/xdg-base-dir-2
Jul 28, 2021
Merged
Changes from all commits
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 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 | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -5,27 +5,29 @@ import ( | |||||||||||||||||||||||
"path/filepath" | ||||||||||||||||||||||||
) | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
var DefaultCacheDir = "packer_cache" | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
// CachePath returns an absolute path to a cache file or directory | ||||||||||||||||||||||||
// | ||||||||||||||||||||||||
// When the directory is not absolute, CachePath will try to get | ||||||||||||||||||||||||
// current working directory to be able to return a full path. | ||||||||||||||||||||||||
// CachePath tries to create the resulting path if it doesn't exist. | ||||||||||||||||||||||||
// | ||||||||||||||||||||||||
// CachePath can error in case it cannot find the cwd. | ||||||||||||||||||||||||
// When the directory is not absolute, CachePath will try to make a | ||||||||||||||||||||||||
// a cache depending on the operating system. | ||||||||||||||||||||||||
// | ||||||||||||||||||||||||
// ex: | ||||||||||||||||||||||||
// TODO: Update this with better examples | ||||||||||||||||||||||||
// NOTE: cache directory will change depending on operating system dependent | ||||||||||||||||||||||||
// 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
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 | ||||||||||||||||||||||||
os.MkdirAll(filepath.Dir(path), os.ModePerm) | ||||||||||||||||||||||||
}() | ||||||||||||||||||||||||
cacheDir := DefaultCacheDir | ||||||||||||||||||||||||
cacheDir := getDefaultCacheDir() | ||||||||||||||||||||||||
if cd := os.Getenv("PACKER_CACHE_DIR"); cd != "" { | ||||||||||||||||||||||||
cacheDir = cd | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
This file contains 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,21 @@ | ||
// +build darwin freebsd linux netbsd openbsd solaris | ||
|
||
package packer | ||
|
||
import ( | ||
"os" | ||
"path/filepath" | ||
) | ||
|
||
func getDefaultCacheDir() string { | ||
var defaultConfigFileDir string | ||
|
||
if xdgCacheHome := os.Getenv("XDG_CACHE_HOME"); xdgCacheHome != "" { | ||
return filepath.Join(xdgCacheHome, "packer") | ||
} | ||
|
||
homeDir := os.Getenv("HOME") | ||
defaultConfigFileDir = filepath.Join(homeDir, ".cache", "packer") | ||
|
||
return defaultConfigFileDir | ||
} |
This file contains 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
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 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,11 @@ | ||
// +build windows | ||
|
||
package packer | ||
|
||
const ( | ||
defaultConfigFile = "packer_cache" | ||
) | ||
|
||
func getDefaultCacheDir() string { | ||
return defaultConfigFile | ||
} |
This file contains 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 |
---|---|---|
@@ -1,3 +1,5 @@ | ||
// +build windows | ||
|
||
package packer | ||
|
||
import ( | ||
|
This file contains 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 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
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.