123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607 |
- <?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\Package;
- use Composer\Package\Version\VersionParser;
- use Composer\Util\ComposerMirror;
- /**
- * Core package definitions that are needed to resolve dependencies and install packages
- *
- * @author Nils Adermann <naderman@naderman.de>
- */
- class Package extends BasePackage
- {
- protected $type;
- protected $targetDir;
- protected $installationSource;
- protected $sourceType;
- protected $sourceUrl;
- protected $sourceReference;
- protected $sourceMirrors;
- protected $distType;
- protected $distUrl;
- protected $distReference;
- protected $distSha1Checksum;
- protected $distMirrors;
- protected $version;
- protected $prettyVersion;
- protected $releaseDate;
- protected $extra = array();
- protected $binaries = array();
- protected $dev;
- protected $stability;
- protected $notificationUrl;
- protected $requires = array();
- protected $conflicts = array();
- protected $provides = array();
- protected $replaces = array();
- protected $devRequires = array();
- protected $suggests = array();
- protected $autoload = array();
- protected $devAutoload = array();
- protected $includePaths = array();
- protected $archiveExcludes = array();
- /**
- * Creates a new in memory package.
- *
- * @param string $name The package's name
- * @param string $version The package's version
- * @param string $prettyVersion The package's non-normalized version
- */
- public function __construct($name, $version, $prettyVersion)
- {
- parent::__construct($name);
- $this->version = $version;
- $this->prettyVersion = $prettyVersion;
- $this->stability = VersionParser::parseStability($version);
- $this->dev = $this->stability === 'dev';
- }
- /**
- * {@inheritDoc}
- */
- public function isDev()
- {
- return $this->dev;
- }
- /**
- * @param string $type
- */
- public function setType($type)
- {
- $this->type = $type;
- }
- /**
- * {@inheritDoc}
- */
- public function getType()
- {
- return $this->type ?: 'library';
- }
- /**
- * {@inheritDoc}
- */
- public function getStability()
- {
- return $this->stability;
- }
- /**
- * @param string $targetDir
- */
- public function setTargetDir($targetDir)
- {
- $this->targetDir = $targetDir;
- }
- /**
- * {@inheritDoc}
- */
- public function getTargetDir()
- {
- if (null === $this->targetDir) {
- return;
- }
- return ltrim(preg_replace('{ (?:^|[\\\\/]+) \.\.? (?:[\\\\/]+|$) (?:\.\.? (?:[\\\\/]+|$) )*}x', '/', $this->targetDir), '/');
- }
- /**
- * @param array $extra
- */
- public function setExtra(array $extra)
- {
- $this->extra = $extra;
- }
- /**
- * {@inheritDoc}
- */
- public function getExtra()
- {
- return $this->extra;
- }
- /**
- * @param array $binaries
- */
- public function setBinaries(array $binaries)
- {
- $this->binaries = $binaries;
- }
- /**
- * {@inheritDoc}
- */
- public function getBinaries()
- {
- return $this->binaries;
- }
- /**
- * {@inheritDoc}
- */
- public function setInstallationSource($type)
- {
- $this->installationSource = $type;
- }
- /**
- * {@inheritDoc}
- */
- public function getInstallationSource()
- {
- return $this->installationSource;
- }
- /**
- * @param string $type
- */
- public function setSourceType($type)
- {
- $this->sourceType = $type;
- }
- /**
- * {@inheritDoc}
- */
- public function getSourceType()
- {
- return $this->sourceType;
- }
- /**
- * @param string $url
- */
- public function setSourceUrl($url)
- {
- $this->sourceUrl = $url;
- }
- /**
- * {@inheritDoc}
- */
- public function getSourceUrl()
- {
- return $this->sourceUrl;
- }
- /**
- * @param string $reference
- */
- public function setSourceReference($reference)
- {
- $this->sourceReference = $reference;
- }
- /**
- * {@inheritDoc}
- */
- public function getSourceReference()
- {
- return $this->sourceReference;
- }
- /**
- * @param array|null $mirrors
- */
- public function setSourceMirrors($mirrors)
- {
- $this->sourceMirrors = $mirrors;
- }
- /**
- * {@inheritDoc}
- */
- public function getSourceMirrors()
- {
- return $this->sourceMirrors;
- }
- /**
- * {@inheritDoc}
- */
- public function getSourceUrls()
- {
- return $this->getUrls($this->sourceUrl, $this->sourceMirrors, $this->sourceReference, $this->sourceType, 'source');
- }
- /**
- * @param string $type
- */
- public function setDistType($type)
- {
- $this->distType = $type;
- }
- /**
- * {@inheritDoc}
- */
- public function getDistType()
- {
- return $this->distType;
- }
- /**
- * @param string $url
- */
- public function setDistUrl($url)
- {
- $this->distUrl = $url;
- }
- /**
- * {@inheritDoc}
- */
- public function getDistUrl()
- {
- return $this->distUrl;
- }
- /**
- * @param string $reference
- */
- public function setDistReference($reference)
- {
- $this->distReference = $reference;
- }
- /**
- * {@inheritDoc}
- */
- public function getDistReference()
- {
- return $this->distReference;
- }
- /**
- * @param string $sha1checksum
- */
- public function setDistSha1Checksum($sha1checksum)
- {
- $this->distSha1Checksum = $sha1checksum;
- }
- /**
- * {@inheritDoc}
- */
- public function getDistSha1Checksum()
- {
- return $this->distSha1Checksum;
- }
- /**
- * @param array|null $mirrors
- */
- public function setDistMirrors($mirrors)
- {
- $this->distMirrors = $mirrors;
- }
- /**
- * {@inheritDoc}
- */
- public function getDistMirrors()
- {
- return $this->distMirrors;
- }
- /**
- * {@inheritDoc}
- */
- public function getDistUrls()
- {
- return $this->getUrls($this->distUrl, $this->distMirrors, $this->distReference, $this->distType, 'dist');
- }
- /**
- * {@inheritDoc}
- */
- public function getVersion()
- {
- return $this->version;
- }
- /**
- * {@inheritDoc}
- */
- public function getPrettyVersion()
- {
- return $this->prettyVersion;
- }
- /**
- * Set the releaseDate
- *
- * @param \DateTime $releaseDate
- */
- public function setReleaseDate(\DateTime $releaseDate)
- {
- $this->releaseDate = $releaseDate;
- }
- /**
- * {@inheritDoc}
- */
- public function getReleaseDate()
- {
- return $this->releaseDate;
- }
- /**
- * Set the required packages
- *
- * @param array $requires A set of package links
- */
- public function setRequires(array $requires)
- {
- $this->requires = $requires;
- }
- /**
- * {@inheritDoc}
- */
- public function getRequires()
- {
- return $this->requires;
- }
- /**
- * Set the conflicting packages
- *
- * @param array $conflicts A set of package links
- */
- public function setConflicts(array $conflicts)
- {
- $this->conflicts = $conflicts;
- }
- /**
- * {@inheritDoc}
- */
- public function getConflicts()
- {
- return $this->conflicts;
- }
- /**
- * Set the provided virtual packages
- *
- * @param array $provides A set of package links
- */
- public function setProvides(array $provides)
- {
- $this->provides = $provides;
- }
- /**
- * {@inheritDoc}
- */
- public function getProvides()
- {
- return $this->provides;
- }
- /**
- * Set the packages this one replaces
- *
- * @param array $replaces A set of package links
- */
- public function setReplaces(array $replaces)
- {
- $this->replaces = $replaces;
- }
- /**
- * {@inheritDoc}
- */
- public function getReplaces()
- {
- return $this->replaces;
- }
- /**
- * Set the recommended packages
- *
- * @param array $devRequires A set of package links
- */
- public function setDevRequires(array $devRequires)
- {
- $this->devRequires = $devRequires;
- }
- /**
- * {@inheritDoc}
- */
- public function getDevRequires()
- {
- return $this->devRequires;
- }
- /**
- * Set the suggested packages
- *
- * @param array $suggests A set of package names/comments
- */
- public function setSuggests(array $suggests)
- {
- $this->suggests = $suggests;
- }
- /**
- * {@inheritDoc}
- */
- public function getSuggests()
- {
- return $this->suggests;
- }
- /**
- * Set the autoload mapping
- *
- * @param array $autoload Mapping of autoloading rules
- */
- public function setAutoload(array $autoload)
- {
- $this->autoload = $autoload;
- }
- /**
- * {@inheritDoc}
- */
- public function getAutoload()
- {
- return $this->autoload;
- }
- /**
- * Set the dev autoload mapping
- *
- * @param array $devAutoload Mapping of dev autoloading rules
- */
- public function setDevAutoload(array $devAutoload)
- {
- $this->devAutoload = $devAutoload;
- }
- /**
- * {@inheritDoc}
- */
- public function getDevAutoload()
- {
- return $this->devAutoload;
- }
- /**
- * Sets the list of paths added to PHP's include path.
- *
- * @param array $includePaths List of directories.
- */
- public function setIncludePaths(array $includePaths)
- {
- $this->includePaths = $includePaths;
- }
- /**
- * {@inheritDoc}
- */
- public function getIncludePaths()
- {
- return $this->includePaths;
- }
- /**
- * Sets the notification URL
- *
- * @param string $notificationUrl
- */
- public function setNotificationUrl($notificationUrl)
- {
- $this->notificationUrl = $notificationUrl;
- }
- /**
- * {@inheritDoc}
- */
- public function getNotificationUrl()
- {
- return $this->notificationUrl;
- }
- /**
- * Sets a list of patterns to be excluded from archives
- *
- * @param array $excludes
- */
- public function setArchiveExcludes(array $excludes)
- {
- $this->archiveExcludes = $excludes;
- }
- /**
- * {@inheritDoc}
- */
- public function getArchiveExcludes()
- {
- return $this->archiveExcludes;
- }
- /**
- * Replaces current version and pretty version with passed values.
- * It also sets stability.
- *
- * @param string $version The package's normalized version
- * @param string $prettyVersion The package's non-normalized version
- */
- public function replaceVersion($version, $prettyVersion)
- {
- $this->version = $version;
- $this->prettyVersion = $prettyVersion;
- $this->stability = VersionParser::parseStability($version);
- $this->dev = $this->stability === 'dev';
- }
- protected function getUrls($url, $mirrors, $ref, $type, $urlType)
- {
- if (!$url) {
- return array();
- }
- $urls = array($url);
- if ($mirrors) {
- foreach ($mirrors as $mirror) {
- if ($urlType === 'dist') {
- $mirrorUrl = ComposerMirror::processUrl($mirror['url'], $this->name, $this->version, $ref, $type);
- } elseif ($urlType === 'source' && $type === 'git') {
- $mirrorUrl = ComposerMirror::processGitUrl($mirror['url'], $this->name, $url, $type);
- } elseif ($urlType === 'source' && $type === 'hg') {
- $mirrorUrl = ComposerMirror::processHgUrl($mirror['url'], $this->name, $url, $type);
- }
- if (!in_array($mirrorUrl, $urls)) {
- $func = $mirror['preferred'] ? 'array_unshift' : 'array_push';
- $func($urls, $mirrorUrl);
- }
- }
- }
- return $urls;
- }
- }
|