X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fconfig%2FLoader%2FFileLoader.php;h=016ac4120fc9d76c8282119b3df82a3ecb117965;hb=4e1bfbf98b844da83b18aca92ef00f11a4735806;hp=2b19b52584bdd000a4d099cc0c19539b613e7a94;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/vendor/symfony/config/Loader/FileLoader.php b/vendor/symfony/config/Loader/FileLoader.php index 2b19b5258..016ac4120 100644 --- a/vendor/symfony/config/Loader/FileLoader.php +++ b/vendor/symfony/config/Loader/FileLoader.php @@ -11,9 +11,12 @@ namespace Symfony\Component\Config\Loader; -use Symfony\Component\Config\FileLocatorInterface; -use Symfony\Component\Config\Exception\FileLoaderLoadException; use Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException; +use Symfony\Component\Config\Exception\FileLoaderLoadException; +use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException; +use Symfony\Component\Config\FileLocatorInterface; +use Symfony\Component\Config\Resource\FileExistenceResource; +use Symfony\Component\Config\Resource\GlobResource; /** * FileLoader is the abstract class used by all built-in loaders that are file based. @@ -22,23 +25,12 @@ use Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceExceptio */ abstract class FileLoader extends Loader { - /** - * @var array - */ protected static $loading = array(); - /** - * @var FileLocatorInterface - */ protected $locator; private $currentDir; - /** - * Constructor. - * - * @param FileLocatorInterface $locator A FileLocatorInterface instance - */ public function __construct(FileLocatorInterface $locator) { $this->locator = $locator; @@ -76,27 +68,76 @@ abstract class FileLoader extends Loader * * @throws FileLoaderLoadException * @throws FileLoaderImportCircularReferenceException + * @throws FileLocatorFileNotFoundException */ public function import($resource, $type = null, $ignoreErrors = false, $sourceResource = null) + { + if (\is_string($resource) && \strlen($resource) !== $i = strcspn($resource, '*?{[')) { + $ret = array(); + $isSubpath = 0 !== $i && false !== strpos(substr($resource, 0, $i), '/'); + foreach ($this->glob($resource, false, $_, $ignoreErrors || !$isSubpath) as $path => $info) { + if (null !== $res = $this->doImport($path, $type, $ignoreErrors, $sourceResource)) { + $ret[] = $res; + } + $isSubpath = true; + } + + if ($isSubpath) { + return isset($ret[1]) ? $ret : (isset($ret[0]) ? $ret[0] : null); + } + } + + return $this->doImport($resource, $type, $ignoreErrors, $sourceResource); + } + + /** + * @internal + */ + protected function glob($pattern, $recursive, &$resource = null, $ignoreErrors = false) + { + if (\strlen($pattern) === $i = strcspn($pattern, '*?{[')) { + $prefix = $pattern; + $pattern = ''; + } elseif (0 === $i || false === strpos(substr($pattern, 0, $i), '/')) { + $prefix = '.'; + $pattern = '/'.$pattern; + } else { + $prefix = \dirname(substr($pattern, 0, 1 + $i)); + $pattern = substr($pattern, \strlen($prefix)); + } + + try { + $prefix = $this->locator->locate($prefix, $this->currentDir, true); + } catch (FileLocatorFileNotFoundException $e) { + if (!$ignoreErrors) { + throw $e; + } + + $resource = array(); + foreach ($e->getPaths() as $path) { + $resource[] = new FileExistenceResource($path); + } + + return; + } + $resource = new GlobResource($prefix, $pattern, $recursive); + + foreach ($resource as $path => $info) { + yield $path => $info; + } + } + + private function doImport($resource, $type = null, $ignoreErrors = false, $sourceResource = null) { try { $loader = $this->resolve($resource, $type); if ($loader instanceof self && null !== $this->currentDir) { - // we fallback to the current locator to keep BC - // as some some loaders do not call the parent __construct() - // @deprecated should be removed in 3.0 - $locator = $loader->getLocator(); - if (null === $locator) { - @trigger_error('Not calling the parent constructor in '.get_class($loader).' which extends '.__CLASS__.' is deprecated since version 2.7 and will not be supported anymore in 3.0.', E_USER_DEPRECATED); - $locator = $this->locator; - } - - $resource = $locator->locate($resource, $this->currentDir, false); + $resource = $loader->getLocator()->locate($resource, $this->currentDir, false); } - $resources = is_array($resource) ? $resource : array($resource); - for ($i = 0; $i < $resourcesCount = count($resources); ++$i) { + $resources = \is_array($resource) ? $resource : array($resource); + for ($i = 0; $i < $resourcesCount = \count($resources); ++$i) { if (isset(self::$loading[$resources[$i]])) { if ($i == $resourcesCount - 1) { throw new FileLoaderImportCircularReferenceException(array_keys(self::$loading)); @@ -110,16 +151,10 @@ abstract class FileLoader extends Loader try { $ret = $loader->load($resource, $type); - } catch (\Exception $e) { - unset(self::$loading[$resource]); - throw $e; - } catch (\Throwable $e) { + } finally { unset(self::$loading[$resource]); - throw $e; } - unset(self::$loading[$resource]); - return $ret; } catch (FileLoaderImportCircularReferenceException $e) { throw $e; @@ -130,7 +165,7 @@ abstract class FileLoader extends Loader throw $e; } - throw new FileLoaderLoadException($resource, $sourceResource, null, $e); + throw new FileLoaderLoadException($resource, $sourceResource, null, $e, $type); } } }