Skip to content

Commit

Permalink
os: change UserConfigDir on Darwin to ~/Library/Application Support
Browse files Browse the repository at this point in the history
The old code used ~/Library/Preferences, which is documented by
Apple as:

	This directory contains app-specific preference files. You
	should not create files in this directory yourself. Instead, use
	the NSUserDefaults class or CFPreferences API to get and set
	preference values for your app.

It looks like we missed everything after the first sentence; it's
definitely not the right choice for files that Go programs and users
should be touching directly.

Instead, use ~/Library/Application Support, which is documented as:

	Use this directory to store all app data files except those
	associated with the user’s documents. For example, you might use
	this directory to store app-created data files, configuration
	files, templates, or other fixed or modifiable resources that
	are managed by the app. An app might use this directory to store
	a modifiable copy of resources contained initially in the app’s
	bundle. A game might use this directory to store new levels
	purchased by the user and downloaded from a server.

This seems in line with what UserConfigDir is for, so use it.

The documentation quotes above are obtained from the surprisingly long
link below:

https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html

Fixes golang#32475.

Change-Id: Ic27a6c92d76a5d7a4d4b8eac5cd8472f67a533a4
Reviewed-on: https://go-review.googlesource.com/c/go/+/181177
Run-TryBot: Daniel Martí <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Andrew Bonventre <[email protected]>
  • Loading branch information
mvdan committed Jun 7, 2019
1 parent 9eb4031 commit b336526
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/cmd/go/testdata/script/env_write.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ env AppData=$HOME/windowsappdata
env home=$HOME/plan9home
go env GOENV
[aix] stdout $HOME/.config/go/env
[darwin] stdout $HOME/Library/Preferences/go/env
[darwin] stdout $HOME/Library/Application Support/go/env
[freebsd] stdout $HOME/.config/go/env
[linux] stdout $HOME/.config/go/env
[netbsd] stdout $HOME/.config/go/env
Expand Down
4 changes: 2 additions & 2 deletions src/os/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ func UserCacheDir() (string, error) {
// On Unix systems, it returns $XDG_CONFIG_HOME as specified by
// https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html if
// non-empty, else $HOME/.config.
// On Darwin, it returns $HOME/Library/Preferences.
// On Darwin, it returns $HOME/Library/Application Support.
// On Windows, it returns %AppData%.
// On Plan 9, it returns $home/lib.
//
Expand All @@ -427,7 +427,7 @@ func UserConfigDir() (string, error) {
if dir == "" {
return "", errors.New("$HOME is not defined")
}
dir += "/Library/Preferences"
dir += "/Library/Application Support"

case "plan9":
dir = Getenv("home")
Expand Down

0 comments on commit b336526

Please sign in to comment.