X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fconfig%2FLoader%2FFileLoader.php;h=016ac4120fc9d76c8282119b3df82a3ecb117965;hb=4e1bfbf98b844da83b18aca92ef00f11a4735806;hp=cdc4329d5215fe579bcb6af113fc6bfee3fa8dc9;hpb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;p=yaffs-website diff --git a/vendor/symfony/config/Loader/FileLoader.php b/vendor/symfony/config/Loader/FileLoader.php index cdc4329d5..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,8 +68,66 @@ 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); @@ -86,8 +136,8 @@ abstract class FileLoader extends Loader $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)); @@ -115,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); } } }