Merge branch '1.0'
commit
95e0347917
|
@ -1,3 +1,11 @@
|
||||||
|
### [1.0.2] - 2016-04-21
|
||||||
|
|
||||||
|
* Fixed regression in 1.0.1 on systems with mbstring.func_overload enabled
|
||||||
|
* Fixed regression in 1.0.1 that made dev packages update to the latest reference even if not whitelisted in a partial update
|
||||||
|
* Fixed init command ignoring the COMPOSER env var for choosing the json file name
|
||||||
|
* Fixed error reporting bug when the dependency resolution fails
|
||||||
|
* Fixed handling of `$` sign in composer config command in some cases it could corrupt the json file
|
||||||
|
|
||||||
### [1.0.1] - 2016-04-18
|
### [1.0.1] - 2016-04-18
|
||||||
|
|
||||||
* Fixed URL updating when a package's URL changes, composer.lock now contains the right URL including correct reference
|
* Fixed URL updating when a package's URL changes, composer.lock now contains the right URL including correct reference
|
||||||
|
@ -335,6 +343,7 @@
|
||||||
|
|
||||||
* Initial release
|
* Initial release
|
||||||
|
|
||||||
|
[1.0.2]: https://github.com/composer/composer/compare/1.0.2...1.0.2
|
||||||
[1.0.1]: https://github.com/composer/composer/compare/1.0.0...1.0.1
|
[1.0.1]: https://github.com/composer/composer/compare/1.0.0...1.0.1
|
||||||
[1.0.0]: https://github.com/composer/composer/compare/1.0.0-beta2...1.0.0
|
[1.0.0]: https://github.com/composer/composer/compare/1.0.0-beta2...1.0.0
|
||||||
[1.0.0-beta2]: https://github.com/composer/composer/compare/1.0.0-beta1...1.0.0-beta2
|
[1.0.0-beta2]: https://github.com/composer/composer/compare/1.0.0-beta1...1.0.0-beta2
|
||||||
|
|
|
@ -74,14 +74,16 @@ class JsonManipulator
|
||||||
if (isset($decoded[$type][$package])) {
|
if (isset($decoded[$type][$package])) {
|
||||||
// update existing link
|
// update existing link
|
||||||
$packageRegex = str_replace('/', '\\\\?/', preg_quote($package));
|
$packageRegex = str_replace('/', '\\\\?/', preg_quote($package));
|
||||||
// addcslashes is used to double up backslashes since preg_replace resolves them as back references otherwise, see #1588
|
$links = preg_replace_callback('{"'.$packageRegex.'"(\s*:\s*)'.self::$JSON_STRING.'}i', function ($m) use ($package, $constraint) {
|
||||||
$links = preg_replace('{"'.$packageRegex.'"(\s*:\s*)'.self::$JSON_STRING.'}i', addcslashes(JsonFile::encode($package).'${1}"'.$constraint.'"', '\\'), $links);
|
return JsonFile::encode($package) . $m[1] . '"' . $constraint . '"';
|
||||||
|
}, $links);
|
||||||
} else {
|
} else {
|
||||||
if ($this->pregMatch('#^\s*\{\s*\S+.*?(\s*\}\s*)$#s', $links, $match)) {
|
if ($this->pregMatch('#^\s*\{\s*\S+.*?(\s*\}\s*)$#s', $links, $match)) {
|
||||||
// link missing but non empty links
|
// link missing but non empty links
|
||||||
$links = preg_replace(
|
$links = preg_replace(
|
||||||
'{'.preg_quote($match[1]).'$}',
|
'{'.preg_quote($match[1]).'$}',
|
||||||
addcslashes(',' . $this->newline . $this->indent . $this->indent . JsonFile::encode($package).': '.JsonFile::encode($constraint) . $match[1], '\\'),
|
// addcslashes is used to double up backslashes/$ since preg_replace resolves them as back references otherwise, see #1588
|
||||||
|
addcslashes(',' . $this->newline . $this->indent . $this->indent . JsonFile::encode($package).': '.JsonFile::encode($constraint) . $match[1], '\\$'),
|
||||||
$links
|
$links
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
@ -223,7 +225,7 @@ class JsonManipulator
|
||||||
// child missing but non empty children
|
// child missing but non empty children
|
||||||
$children = preg_replace(
|
$children = preg_replace(
|
||||||
'#'.$match[1].'$#',
|
'#'.$match[1].'$#',
|
||||||
addcslashes(',' . $this->newline . $this->indent . $this->indent . JsonFile::encode($name).': '.$this->format($value, 1) . $match[1], '\\'),
|
addcslashes(',' . $this->newline . $this->indent . $this->indent . JsonFile::encode($name).': '.$this->format($value, 1) . $match[1], '\\$'),
|
||||||
$children
|
$children
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
@ -235,7 +237,9 @@ class JsonManipulator
|
||||||
$children = $this->newline . $this->indent . $this->indent . JsonFile::encode($name).': '.$this->format($value, 1) . $children;
|
$children = $this->newline . $this->indent . $this->indent . JsonFile::encode($name).': '.$this->format($value, 1) . $children;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->contents = preg_replace($nodeRegex, addcslashes('${1}${2}'.$children.'${4}${5}', '\\'), $this->contents);
|
$this->contents = preg_replace_callback($nodeRegex, function ($m) use ($children) {
|
||||||
|
return $m[1] . $m[2] . $children . $m[4] . $m[5];
|
||||||
|
}, $this->contents);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -353,7 +357,7 @@ class JsonManipulator
|
||||||
if ($this->pregMatch('#[^{\s](\s*)\}$#', $this->contents, $match)) {
|
if ($this->pregMatch('#[^{\s](\s*)\}$#', $this->contents, $match)) {
|
||||||
$this->contents = preg_replace(
|
$this->contents = preg_replace(
|
||||||
'#'.$match[1].'\}$#',
|
'#'.$match[1].'\}$#',
|
||||||
addcslashes(',' . $this->newline . $this->indent . JsonFile::encode($key). ': '. $content . $this->newline . '}', '\\'),
|
addcslashes(',' . $this->newline . $this->indent . JsonFile::encode($key). ': '. $content . $this->newline . '}', '\\$'),
|
||||||
$this->contents
|
$this->contents
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -363,7 +367,7 @@ class JsonManipulator
|
||||||
// append at the end of the file
|
// append at the end of the file
|
||||||
$this->contents = preg_replace(
|
$this->contents = preg_replace(
|
||||||
'#\}$#',
|
'#\}$#',
|
||||||
addcslashes($this->indent . JsonFile::encode($key). ': '.$content . $this->newline . '}', '\\'),
|
addcslashes($this->indent . JsonFile::encode($key). ': '.$content . $this->newline . '}', '\\$'),
|
||||||
$this->contents
|
$this->contents
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ class GitDriver extends VcsDriver
|
||||||
public function initialize()
|
public function initialize()
|
||||||
{
|
{
|
||||||
if (Filesystem::isLocalPath($this->url)) {
|
if (Filesystem::isLocalPath($this->url)) {
|
||||||
|
$this->url = preg_replace('{[\\/]\.git/?$}', '', $this->url);
|
||||||
$this->repoDir = $this->url;
|
$this->repoDir = $this->url;
|
||||||
$cacheUrl = realpath($this->url);
|
$cacheUrl = realpath($this->url);
|
||||||
} else {
|
} else {
|
||||||
|
@ -219,7 +220,7 @@ class GitDriver extends VcsDriver
|
||||||
*/
|
*/
|
||||||
public static function supports(IOInterface $io, Config $config, $url, $deep = false)
|
public static function supports(IOInterface $io, Config $config, $url, $deep = false)
|
||||||
{
|
{
|
||||||
if (preg_match('#(^git://|\.git$|git(?:olite)?@|//git\.|//github.com/)#i', $url)) {
|
if (preg_match('#(^git://|\.git/?$|git(?:olite)?@|//git\.|//github.com/)#i', $url)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -476,13 +476,13 @@ class Filesystem
|
||||||
*/
|
*/
|
||||||
public static function isLocalPath($path)
|
public static function isLocalPath($path)
|
||||||
{
|
{
|
||||||
return (bool) preg_match('{^(file://|/|[a-z]:[\\\\/]|\.\.[\\\\/]|[a-z0-9_.-]+[\\\\/])}i', $path);
|
return (bool) preg_match('{^(file://|/|/?[a-z]:[\\\\/]|\.\.[\\\\/]|[a-z0-9_.-]+[\\\\/])}i', $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getPlatformPath($path)
|
public static function getPlatformPath($path)
|
||||||
{
|
{
|
||||||
if (Platform::isWindows()) {
|
if (Platform::isWindows()) {
|
||||||
$path = preg_replace('{^(?:file:///([a-z])/)}i', 'file://$1:/', $path);
|
$path = preg_replace('{^(?:file:///([a-z]):?/)}i', 'file://$1:/', $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
return preg_replace('{^file://}i', '', $path);
|
return preg_replace('{^file://}i', '', $path);
|
||||||
|
|
|
@ -2045,6 +2045,31 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
|
||||||
', $manipulator->getContents());
|
', $manipulator->getContents());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testAddMainKeyWithContentHavingDollarSignFollowedByDigit()
|
||||||
|
{
|
||||||
|
$manipulator = new JsonManipulator('{
|
||||||
|
"foo": "bar"
|
||||||
|
}');
|
||||||
|
|
||||||
|
$this->assertTrue($manipulator->addMainKey('bar', '$1baz'));
|
||||||
|
$this->assertEquals('{
|
||||||
|
"foo": "bar",
|
||||||
|
"bar": "$1baz"
|
||||||
|
}
|
||||||
|
', $manipulator->getContents());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAddMainKeyWithContentHavingDollarSignFollowedByDigit2()
|
||||||
|
{
|
||||||
|
$manipulator = new JsonManipulator('{}');
|
||||||
|
|
||||||
|
$this->assertTrue($manipulator->addMainKey('foo', '$1bar'));
|
||||||
|
$this->assertEquals('{
|
||||||
|
"foo": "$1bar"
|
||||||
|
}
|
||||||
|
', $manipulator->getContents());
|
||||||
|
}
|
||||||
|
|
||||||
public function testUpdateMainKey()
|
public function testUpdateMainKey()
|
||||||
{
|
{
|
||||||
$manipulator = new JsonManipulator('{
|
$manipulator = new JsonManipulator('{
|
||||||
|
@ -2105,6 +2130,19 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
|
||||||
', $manipulator->getContents());
|
', $manipulator->getContents());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testUpdateMainKeyWithContentHavingDollarSignFollowedByDigit()
|
||||||
|
{
|
||||||
|
$manipulator = new JsonManipulator('{
|
||||||
|
"foo": "bar"
|
||||||
|
}');
|
||||||
|
|
||||||
|
$this->assertTrue($manipulator->addMainKey('foo', '$1bar'));
|
||||||
|
$this->assertEquals('{
|
||||||
|
"foo": "$1bar"
|
||||||
|
}
|
||||||
|
', $manipulator->getContents());
|
||||||
|
}
|
||||||
|
|
||||||
public function testIndentDetection()
|
public function testIndentDetection()
|
||||||
{
|
{
|
||||||
$manipulator = new JsonManipulator('{
|
$manipulator = new JsonManipulator('{
|
||||||
|
|
Loading…
Reference in New Issue