From 4f5b44bd3bd490309eb2ba7b44df4769816ba729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Sat, 3 Aug 2013 19:26:54 +0200 Subject: twig implementation --- .../Symfony/Component/Intl/Util/SvnRepository.php | 141 +++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 vendor/symfony/intl/Symfony/Component/Intl/Util/SvnRepository.php (limited to 'vendor/symfony/intl/Symfony/Component/Intl/Util/SvnRepository.php') diff --git a/vendor/symfony/intl/Symfony/Component/Intl/Util/SvnRepository.php b/vendor/symfony/intl/Symfony/Component/Intl/Util/SvnRepository.php new file mode 100644 index 00000000..fb44e3c6 --- /dev/null +++ b/vendor/symfony/intl/Symfony/Component/Intl/Util/SvnRepository.php @@ -0,0 +1,141 @@ + + * + * 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 + */ +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; + } + +} -- cgit v1.2.3