Source of file SvnRepository.php
Size: 3,373 Bytes - Last Modified: 2013-07-17T08:22:21+02:00
/home/theseer/Downloads/Symfony/vendor/symfony/symfony/src/Symfony/Component/Intl/Util/SvnRepository.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Intl\Util; use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Intl\Exception\RuntimeException; /** * A SVN repository containing ICU data. * * @author Bernhard Schussek <bschussek@gmail.com> */ class SvnRepository { /** * @var string The path to the repository. */ private $path; /** * @var \SimpleXMLElement */ private $svnInfo; /** * @var SvnCommit */ private $lastCommit; /** * Downloads the ICU data for the given version. * * @param string $url The URL to download from. * @param string $targetDir The directory in which to store the repository. * * @return SvnRepository The directory where the data is stored. * * @throws RuntimeException If an error occurs during the download. */ public static function download($url, $targetDir) { exec('which svn', $output, $result); if ($result !== 0) { throw new RuntimeException('The command "svn" is not installed.'); } $filesystem = new Filesystem(); if (!$filesystem->exists($targetDir . '/.svn')) { $filesystem->remove($targetDir); $filesystem->mkdir($targetDir); exec('svn checkout ' . $url . ' ' . $targetDir, $output, $result); if ($result !== 0) { throw new RuntimeException('The SVN checkout of ' . $url . 'failed.'); } } return new static(realpath($targetDir)); } /** * Reads the SVN repository at the given path. * * @param string $path The path to the repository. */ public function __construct($path) { $this->path = $path; } /** * Returns the path to the repository. * * @return string The path to the repository. */ public function getPath() { return $this->path; } /** * Returns the URL of the repository. * * @return string The URL of the repository. */ public function getUrl() { return (string) $this->getSvnInfo()->entry->url; } /** * Returns the last commit of the repository. * * @return SvnCommit The last commit. */ public function getLastCommit() { if (null === $this->lastCommit) { $this->lastCommit = new SvnCommit($this->getSvnInfo()->entry->commit); } return $this->lastCommit; } /** * Returns information about the SVN repository. * * @return \SimpleXMLElement The XML result from the "svn info" command. * * @throws RuntimeException If the "svn info" command failed. */ private function getSvnInfo() { if (null === $this->svnInfo) { exec('svn info --xml '.$this->path, $output, $result); $svnInfo = simplexml_load_string(implode("\n", $output)); if ($result !== 0) { throw new RuntimeException('svn info failed'); } $this->svnInfo = $svnInfo; } return $this->svnInfo; } } |