in VersionParser only truncate the version if hash
parent
a04591bbd7
commit
80c2736021
|
@ -26,6 +26,7 @@ use Composer\Package\LinkConstraint\VersionConstraint;
|
||||||
class VersionParser
|
class VersionParser
|
||||||
{
|
{
|
||||||
private static $modifierRegex = '[._-]?(?:(beta|b|RC|alpha|a|patch|pl|p)(?:[.-]?(\d+))?)?([.-]?dev)?';
|
private static $modifierRegex = '[._-]?(?:(beta|b|RC|alpha|a|patch|pl|p)(?:[.-]?(\d+))?)?([.-]?dev)?';
|
||||||
|
private static $sha1Length = 40;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the stability of a version
|
* Returns the stability of a version
|
||||||
|
@ -73,10 +74,26 @@ class VersionParser
|
||||||
if (!$package->isDev() || !in_array($package->getSourceType(), array('hg', 'git'))) {
|
if (!$package->isDev() || !in_array($package->getSourceType(), array('hg', 'git'))) {
|
||||||
return $package->getPrettyVersion();
|
return $package->getPrettyVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $package->getPrettyVersion() . ' ' . ($truncate ? substr($package->getSourceReference(), 0, 6) : $package->getSourceReference());
|
// if source reference is a sha1 hash -- truncate
|
||||||
|
if ($truncate && self::isHash($package->getSourceReference())) {
|
||||||
|
return $package->getPrettyVersion() . ' ' . substr($package->getSourceReference(), 0, 6);
|
||||||
|
} else {
|
||||||
|
return $package->getPrettyVersion() . ' ' . $package->getSourceReference();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether version is in form of hash.
|
||||||
|
*
|
||||||
|
* @param string $version
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
private static function isHash($version)
|
||||||
|
{
|
||||||
|
return strlen($version) == self::$sha1Length;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalizes a version string to be able to perform comparisons on it
|
* Normalizes a version string to be able to perform comparisons on it
|
||||||
*
|
*
|
||||||
|
@ -274,5 +291,5 @@ class VersionParser
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new \UnexpectedValueException('Could not parse version constraint '.$constraint);
|
throw new \UnexpectedValueException('Could not parse version constraint '.$constraint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,239 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Composer.
|
||||||
|
*
|
||||||
|
* (c) Nils Adermann <naderman@naderman.de>
|
||||||
|
* Jordi Boggiano <j.boggiano@seld.be>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Composer\Test\Mock;
|
||||||
|
|
||||||
|
use Composer\Package\PackageInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mock class for PackageInterface.
|
||||||
|
*
|
||||||
|
* More fields might be added if required in test cases.
|
||||||
|
*/
|
||||||
|
class PackageMock implements PackageInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
private $isDev;
|
||||||
|
private $prettyVersion;
|
||||||
|
private $sourceReference;
|
||||||
|
private $sourceType;
|
||||||
|
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return 'PackageMock';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAlias()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAutoload()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBinaries()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getConflicts()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDevRequires()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDistReference()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDistSha1Checksum()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDistType()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDistUrl()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getExtra()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getId()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIncludePaths()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getInstallationSource()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getNames()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPrettyAlias()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPrettyName()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPrettyString()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPrettyVersion()
|
||||||
|
{
|
||||||
|
return $this->prettyVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProvides()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getReleaseDate()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getReplaces()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRepository()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRequires()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSourceReference()
|
||||||
|
{
|
||||||
|
return $this->sourceReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSourceType()
|
||||||
|
{
|
||||||
|
return $this->sourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSourceUrl()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStability()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSuggests()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTargetDir()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getType()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUniqueName()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getVersion()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isDev()
|
||||||
|
{
|
||||||
|
return $this->isDev;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setId($id)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setInstallationSource($type)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setIsDev($isDev)
|
||||||
|
{
|
||||||
|
$this->isDev = $isDev;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPrettyVersion($prettyVersion)
|
||||||
|
{
|
||||||
|
$this->prettyVersion = $prettyVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSourceReference($sourceReference)
|
||||||
|
{
|
||||||
|
$this->sourceReference = $sourceReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSourceType($sourceType)
|
||||||
|
{
|
||||||
|
$this->sourceType = $sourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setRepository(\Composer\Repository\RepositoryInterface $repository)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,9 +15,44 @@ namespace Composer\Test\Package\Version;
|
||||||
use Composer\Package\Version\VersionParser;
|
use Composer\Package\Version\VersionParser;
|
||||||
use Composer\Package\LinkConstraint\MultiConstraint;
|
use Composer\Package\LinkConstraint\MultiConstraint;
|
||||||
use Composer\Package\LinkConstraint\VersionConstraint;
|
use Composer\Package\LinkConstraint\VersionConstraint;
|
||||||
|
use Composer\Package\PackageInterface;
|
||||||
|
use Composer\Test\Mock\PackageMock;
|
||||||
|
|
||||||
class VersionParserTest extends \PHPUnit_Framework_TestCase
|
class VersionParserTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @dataProvider formattedVersions
|
||||||
|
*
|
||||||
|
* @param \Composer\Package\PackageInterface $package
|
||||||
|
* @param string $expected
|
||||||
|
*/
|
||||||
|
public function testFormatVersionForDevPackage(PackageInterface $package, $truncate, $expected)
|
||||||
|
{
|
||||||
|
$this->assertSame($expected, VersionParser::formatVersion($package, $truncate));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function formattedVersions()
|
||||||
|
{
|
||||||
|
$data = array(
|
||||||
|
array('sourceReference' => 'v2.1.0-RC2', 'truncate' => true, 'expected' => 'PrettyVersion v2.1.0-RC2'),
|
||||||
|
array('sourceReference' => 'bbf527a27356414bfa9bf520f018c5cb7af67c77', 'truncate' => true, 'expected' => 'PrettyVersion bbf527'),
|
||||||
|
array('sourceReference' => 'v1.0.0', 'truncate' => false, 'expected' => 'PrettyVersion v1.0.0'),
|
||||||
|
array('sourceReference' => 'bbf527a27356414bfa9bf520f018c5cb7af67c77', 'truncate' => false, 'expected' => 'PrettyVersion bbf527a27356414bfa9bf520f018c5cb7af67c77'),
|
||||||
|
);
|
||||||
|
|
||||||
|
$createPackage = function($arr) {
|
||||||
|
$package = new PackageMock();
|
||||||
|
$package->setIsDev(true);
|
||||||
|
$package->setSourceType('git');
|
||||||
|
$package->setPrettyVersion('PrettyVersion');
|
||||||
|
$package->setSourceReference($arr['sourceReference']);
|
||||||
|
|
||||||
|
return array($package, $arr['truncate'], $arr['expected']);
|
||||||
|
};
|
||||||
|
|
||||||
|
return array_map($createPackage, $data);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider successfulNormalizedVersions
|
* @dataProvider successfulNormalizedVersions
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue