1
0
Fork 0
pull/1407/head
ntoniazzi 2013-01-02 13:48:00 +01:00 committed by Nicolas Toniazzi
parent c6860400f0
commit b79f38fd99
3 changed files with 39 additions and 38 deletions

View File

@ -598,9 +598,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
all projects.
By default it points to `/home/<user>/.composer` on \*nix,
`/Users/<user>/.composer` on OSX and
`C:\Users\<user>\AppData\Roaming\Composer` on Windows.
By default it points to `C:\Users\<user>\AppData\Roaming\Composer` on Windows
and `/Users/<user>/.composer` on OSX. On *nix systems that follow the [XDG Base
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

View File

@ -754,18 +754,9 @@ The following options are supported:
`{"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
rate limiting of their API.
[Read more](articles/troubleshooting.md#api-rate-limit-and-oauth-tokens)
on how to get an OAuth token for GitHub.
* **http-basic:** A list of domain names and username/passwords to authenticate
against them. For example using
`{"example.org": {"username": "alice", "password": "foo"}` as the value of this option will let composer authenticate against example.org.
* **vendor-dir:** Defaults to `vendor`. You can install dependencies into a
different directory if you want to. `$HOME` and `~` will be replaced by your
home directory's path in vendor-dir and all `*-dir` options below.
* **bin-dir:** Defaults to `vendor/bin`. If a project includes binaries, they
will be symlinked into this directory.
* **cache-dir:** Defaults to `$home/cache` on unix systems and
`C:\Users\<user>\AppData\Local\Composer` on Windows. Stores all the caches
* **cache-dir:** Defaults to `C:\Users\<user>\AppData\Local\Composer` on Windows,
`$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).
* **cache-files-dir:** Defaults to `$cache-dir/files`. Stores the zip archives
of packages.

View File

@ -43,18 +43,22 @@ class Factory
protected static function getHomeDir()
{
$home = getenv('COMPOSER_HOME');
$cacheDir = getenv('COMPOSER_CACHE_DIR');
$userDir = rtrim(getenv('HOME'), '/');
$followXDG = false;
if (!$home) {
if (defined('PHP_WINDOWS_VERSION_MAJOR')) {
if (!getenv('APPDATA')) {
throw new \RuntimeException('The APPDATA or COMPOSER_HOME environment variable must be set for composer to run correctly');
}
$home = strtr(getenv('APPDATA'), '\\', '/') . '/Composer';
} else {
$home = getenv('APPDATA') . '/Composer';
} elseif (getenv('XDG_CONFIG_DIRS')) {
// XDG Base Directory Specifications
$followXDG = true;
$xdgConfig = getenv('XDG_CONFIG_HOME');
if (!$xdgConfig) {
$xdgConfig = rtrim(getenv('HOME'), '/') . '/.config';
$xdgConfig = $userDir . '/.config';
}
$home = $xdgConfig . '/composer';
} else {
$home = $userDir . '/.composer';
}
}
@ -76,29 +80,20 @@ class Factory
} else {
$cacheDir = $home . '/cache';
}
$cacheDir = strtr($cacheDir, '\\', '/');
} else {
} elseif (getenv('XDG_CONFIG_DIRS')) {
$followXDG = true;
$xdgCache = getenv('XDG_CACHE_HOME');
if (!$xdgCache) {
$xdgCache = rtrim(getenv('HOME'), '/') . '/.cache';
$xdgCache = $userDir . '/.cache';
}
$cacheDir = $xdgCache . '/composer';
} else {
$cacheDir = $home . '/.cache';
}
}
return $cacheDir;
}
/**
* @param IOInterface|null $io
* @return Config
*/
public static function createConfig(IOInterface $io = null)
{
// determine home and cache dirs
$home = self::getHomeDir();
$cacheDir = self::getCacheDir($home);
// Protect directory against web access. Since HOME could be
// the www-data's user home and be web-accessible it is a
// potential security risk
@ -111,6 +106,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();
// add dirs to the config