X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Ffilesystem%2FTests%2FFilesystemTestCase.php;h=642925ddee578d5f1c743861c167268b151b5eed;hb=4e1bfbf98b844da83b18aca92ef00f11a4735806;hp=0a1254818da2a3be70481e5bc85e3748424339eb;hpb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;p=yaffs-website diff --git a/vendor/symfony/filesystem/Tests/FilesystemTestCase.php b/vendor/symfony/filesystem/Tests/FilesystemTestCase.php index 0a1254818..642925dde 100644 --- a/vendor/symfony/filesystem/Tests/FilesystemTestCase.php +++ b/vendor/symfony/filesystem/Tests/FilesystemTestCase.php @@ -30,16 +30,42 @@ class FilesystemTestCase extends TestCase */ protected $workspace = null; + /** + * @var bool|null Flag for hard links on Windows + */ + private static $linkOnWindows = null; + + /** + * @var bool|null Flag for symbolic links on Windows + */ private static $symlinkOnWindows = null; public static function setUpBeforeClass() { - if ('\\' === DIRECTORY_SEPARATOR && null === self::$symlinkOnWindows) { - $target = tempnam(sys_get_temp_dir(), 'sl'); - $link = sys_get_temp_dir().'/sl'.microtime(true).mt_rand(); - self::$symlinkOnWindows = @symlink($target, $link) && is_link($link); - @unlink($link); - unlink($target); + if ('\\' === \DIRECTORY_SEPARATOR) { + self::$linkOnWindows = true; + $originFile = tempnam(sys_get_temp_dir(), 'li'); + $targetFile = tempnam(sys_get_temp_dir(), 'li'); + if (true !== @link($originFile, $targetFile)) { + $report = error_get_last(); + if (\is_array($report) && false !== strpos($report['message'], 'error code(1314)')) { + self::$linkOnWindows = false; + } + } else { + @unlink($targetFile); + } + + self::$symlinkOnWindows = true; + $originDir = tempnam(sys_get_temp_dir(), 'sl'); + $targetDir = tempnam(sys_get_temp_dir(), 'sl'); + if (true !== @symlink($originDir, $targetDir)) { + $report = error_get_last(); + if (\is_array($report) && false !== strpos($report['message'], 'error code(1314)')) { + self::$symlinkOnWindows = false; + } + } else { + @unlink($targetDir); + } } } @@ -101,28 +127,39 @@ class FilesystemTestCase extends TestCase $this->markTestSkipped('Unable to retrieve file group name'); } + protected function markAsSkippedIfLinkIsMissing() + { + if (!\function_exists('link')) { + $this->markTestSkipped('link is not supported'); + } + + if ('\\' === \DIRECTORY_SEPARATOR && false === self::$linkOnWindows) { + $this->markTestSkipped('link requires "Create hard links" privilege on windows'); + } + } + protected function markAsSkippedIfSymlinkIsMissing($relative = false) { - if ('\\' === DIRECTORY_SEPARATOR && false === self::$symlinkOnWindows) { + if ('\\' === \DIRECTORY_SEPARATOR && false === self::$symlinkOnWindows) { $this->markTestSkipped('symlink requires "Create symbolic links" privilege on Windows'); } // https://bugs.php.net/bug.php?id=69473 - if ($relative && '\\' === DIRECTORY_SEPARATOR && 1 === PHP_ZTS) { + if ($relative && '\\' === \DIRECTORY_SEPARATOR && 1 === PHP_ZTS) { $this->markTestSkipped('symlink does not support relative paths on thread safe Windows PHP versions'); } } protected function markAsSkippedIfChmodIsMissing() { - if ('\\' === DIRECTORY_SEPARATOR) { + if ('\\' === \DIRECTORY_SEPARATOR) { $this->markTestSkipped('chmod is not supported on Windows'); } } protected function markAsSkippedIfPosixIsMissing() { - if (!function_exists('posix_isatty')) { + if (!\function_exists('posix_isatty')) { $this->markTestSkipped('Function posix_isatty is required.'); } }