1
0
Fork 0
pull/1407/head
ntoniazzi 2013-01-02 13:48:00 +01:00
parent 0d5bdf4986
commit 6821e3efcc
3 changed files with 37 additions and 10 deletions

View File

@ -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

View File

@ -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.

View File

@ -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