Remove support for PUB_CACHE in APPDATA on windows (#3831)
diff --git a/lib/src/system_cache.dart b/lib/src/system_cache.dart index 32d7c87..494d3b0 100644 --- a/lib/src/system_cache.dart +++ b/lib/src/system_cache.dart
@@ -23,6 +23,7 @@ import 'source/path.dart'; import 'source/sdk.dart'; import 'source/unknown.dart'; +import 'utils.dart'; /// The system-wide cache of downloaded packages. /// @@ -41,21 +42,26 @@ if (Platform.environment.containsKey('PUB_CACHE')) { return Platform.environment['PUB_CACHE']!; } else if (Platform.isWindows) { - // %LOCALAPPDATA% is preferred as the cache location over %APPDATA%, because the latter is synchronised between - // devices when the user roams between them, whereas the former is not. - // The default cache dir used to be in %APPDATA%, so to avoid breaking old installs, - // we use the old dir in %APPDATA% if it exists. Else, we use the new default location - // in %LOCALAPPDATA%. - // TODO(sigurdm): handle missing APPDATA. - var appData = Platform.environment['APPDATA']!; - var appDataCacheDir = p.join(appData, 'Pub', 'Cache'); - if (dirExists(appDataCacheDir)) { - return appDataCacheDir; + // %LOCALAPPDATA% is used as the cache location over %APPDATA%, because + // the latter is synchronised between devices when the user roams between + // them, whereas the former is not. + final localAppData = Platform.environment['LOCALAPPDATA']; + if (localAppData == null) { + dataError(''' +Could not find the pub cache. No `LOCALAPPDATA` environment variable exists. +Consider setting the `PUB_CACHE` variable manually. +'''); } - var localAppData = Platform.environment['LOCALAPPDATA']!; return p.join(localAppData, 'Pub', 'Cache'); } else { - return '${Platform.environment['HOME']}/.pub-cache'; + final home = Platform.environment['HOME']; + if (home == null) { + dataError(''' +Could not find the pub cache. No `HOME` environment variable exists. +Consider setting the `PUB_CACHE` variable manually. +'''); + } + return p.join(home, '.pub-cache'); } })();