Conforming to XDG Base Directory Specification (http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html)
parent
0d5bdf4986
commit
6821e3efcc
|
@ -400,9 +400,11 @@ The `COMPOSER_HOME` var allows you to change the composer home directory. This
|
||||||
is a hidden, global (per-user on the machine) directory that is shared between
|
is a hidden, global (per-user on the machine) directory that is shared between
|
||||||
all projects.
|
all projects.
|
||||||
|
|
||||||
By default it points to `/home/<user>/.composer` on *nix,
|
By default it points to `C:\Users\<user>\AppData\Roaming\Composer` on Windows
|
||||||
`/Users/<user>/.composer` on OSX and
|
and `/Users/<user>/.composer` on OSX. On *nix systems that follow the [XDG Base
|
||||||
`C:\Users\<user>\AppData\Roaming\Composer` on Windows.
|
Directory Specifications](http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html),
|
||||||
|
it points to `$XDG_CONFIG_HOME/composer`. On other *nix systems, it points to
|
||||||
|
`/home/<user>/.composer`.
|
||||||
|
|
||||||
#### COMPOSER_HOME/config.json
|
#### COMPOSER_HOME/config.json
|
||||||
|
|
||||||
|
|
|
@ -598,8 +598,9 @@ The following options are supported:
|
||||||
`{"github.com": "oauthtoken"}` as the value of this option will use `oauthtoken`
|
`{"github.com": "oauthtoken"}` as the value of this option will use `oauthtoken`
|
||||||
to access private repositories on github and to circumvent the low IP-based
|
to access private repositories on github and to circumvent the low IP-based
|
||||||
rate limiting of their API.
|
rate limiting of their API.
|
||||||
* **cache-dir:** Defaults to `$home/cache` on unix systems and
|
* **cache-dir:** Defaults to `C:\Users\<user>\AppData\Local\Composer` on Windows,
|
||||||
`C:\Users\<user>\AppData\Local\Composer` on Windows. Stores all the caches
|
`$XDG_CACHE_HOME/composer` on unix systems that follow the XDG Base Directory
|
||||||
|
Specifications, and `$home/cache` on other unix systems. Stores all the caches
|
||||||
used by composer. See also [COMPOSER_HOME](03-cli.md#composer-home).
|
used by composer. See also [COMPOSER_HOME](03-cli.md#composer-home).
|
||||||
* **cache-files-dir:** Defaults to `$cache-dir/files`. Stores the zip archives
|
* **cache-files-dir:** Defaults to `$cache-dir/files`. Stores the zip archives
|
||||||
of packages.
|
of packages.
|
||||||
|
|
|
@ -38,15 +38,21 @@ class Factory
|
||||||
// determine home and cache dirs
|
// determine home and cache dirs
|
||||||
$home = getenv('COMPOSER_HOME');
|
$home = getenv('COMPOSER_HOME');
|
||||||
$cacheDir = getenv('COMPOSER_CACHE_DIR');
|
$cacheDir = getenv('COMPOSER_CACHE_DIR');
|
||||||
|
$userDir = rtrim(getenv('HOME'), '/');
|
||||||
|
$followXDG = false;
|
||||||
if (!$home) {
|
if (!$home) {
|
||||||
if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
|
if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
|
||||||
$home = getenv('APPDATA') . '/Composer';
|
$home = getenv('APPDATA') . '/Composer';
|
||||||
} else {
|
} elseif (getenv('XDG_CONFIG_DIRS')) {
|
||||||
|
// XDG Base Directory Specifications
|
||||||
|
$followXDG = true;
|
||||||
$xdgConfig = getenv('XDG_CONFIG_HOME');
|
$xdgConfig = getenv('XDG_CONFIG_HOME');
|
||||||
if (!$xdgConfig) {
|
if (!$xdgConfig) {
|
||||||
$xdgConfig = rtrim(getenv('HOME'), '/') . '/.config';
|
$xdgConfig = $userDir . '/.config';
|
||||||
}
|
}
|
||||||
$home = $xdgConfig . '/composer';
|
$home = $xdgConfig . '/composer';
|
||||||
|
} else {
|
||||||
|
$home = $userDir . '/.composer';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$cacheDir) {
|
if (!$cacheDir) {
|
||||||
|
@ -56,15 +62,20 @@ class Factory
|
||||||
} else {
|
} else {
|
||||||
$cacheDir = getenv('APPDATA') . '/Composer/cache';
|
$cacheDir = getenv('APPDATA') . '/Composer/cache';
|
||||||
}
|
}
|
||||||
} else {
|
} elseif (getenv('XDG_CONFIG_DIRS')) {
|
||||||
|
$followXDG = true;
|
||||||
$xdgCache = getenv('XDG_CACHE_HOME');
|
$xdgCache = getenv('XDG_CACHE_HOME');
|
||||||
if (!$xdgCache) {
|
if (!$xdgCache) {
|
||||||
$xdgCache = rtrim(getenv('HOME'), '/') . '/.cache';
|
$xdgCache = $userDir . '/.cache';
|
||||||
}
|
}
|
||||||
$cacheDir = $xdgCache . '/composer';
|
$cacheDir = $xdgCache . '/composer';
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$cacheDir = $home . '/.cache';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Protect directory against web access. Since HOME could be
|
// Protect directory against web access. Since HOME could be
|
||||||
// the www-data's user home and be web-accessible it is a
|
// the www-data's user home and be web-accessible it is a
|
||||||
// potential security risk
|
// potential security risk
|
||||||
|
@ -77,6 +88,19 @@ class Factory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Move content of old composer dir to XDG
|
||||||
|
if ($followXDG && file_exists($userDir . '/.composer')) {
|
||||||
|
// migrate to XDG
|
||||||
|
@rename($userDir . '/.composer/config.json', $home . '/config.json');
|
||||||
|
@unlink($userDir . '/.composer/.htaccess');
|
||||||
|
@unlink($userDir . '/.composer/cache/.htaccess');
|
||||||
|
foreach (glob($userDir . '/.composer/cache/*') as $oldCacheDir) {
|
||||||
|
@rename($oldCacheDir, $cacheDir . '/' . basename($oldCacheDir));
|
||||||
|
}
|
||||||
|
@rmdir($userDir . '/.composer/cache');
|
||||||
|
@rmdir($userDir . '/.composer');
|
||||||
|
}
|
||||||
|
|
||||||
$config = new Config();
|
$config = new Config();
|
||||||
|
|
||||||
// add dirs to the config
|
// add dirs to the config
|
||||||
|
|
Loading…
Reference in New Issue