in VersionParser only truncate the version if hash

main
Zbigniew Czapran 12 years ago
parent a04591bbd7
commit 80c2736021

@ -26,6 +26,7 @@ use Composer\Package\LinkConstraint\VersionConstraint;
class VersionParser
{
private static $modifierRegex = '[._-]?(?:(beta|b|RC|alpha|a|patch|pl|p)(?:[.-]?(\d+))?)?([.-]?dev)?';
private static $sha1Length = 40;
/**
* Returns the stability of a version
@ -73,10 +74,26 @@ class VersionParser
if (!$package->isDev() || !in_array($package->getSourceType(), array('hg', 'git'))) {
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
*
@ -274,5 +291,5 @@ class VersionParser
}
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\LinkConstraint\MultiConstraint;
use Composer\Package\LinkConstraint\VersionConstraint;
use Composer\Package\PackageInterface;
use Composer\Test\Mock\PackageMock;
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
*/

Loading…
Cancel
Save