From d39348929f84eedbf99639a962ce9725611be9f1 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Wed, 9 Dec 2020 20:48:50 +0000 Subject: [PATCH] Removed PLUGIN_PATH constant --- src/PocketMine.php | 5 +++-- src/utils/Filesystem.php | 29 +++++++++++++++++++++++------ tests/phpstan/bootstrap.php | 1 - tests/phpunit/utils/UtilsTest.php | 3 --- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/PocketMine.php b/src/PocketMine.php index bc0f68ecb..de1d860c5 100644 --- a/src/PocketMine.php +++ b/src/PocketMine.php @@ -198,7 +198,8 @@ namespace pocketmine { $opts = getopt("", ["data:", "plugins:", "no-wizard", "enable-ansi", "disable-ansi"]); $dataPath = isset($opts["data"]) ? $opts["data"] . DIRECTORY_SEPARATOR : realpath(getcwd()) . DIRECTORY_SEPARATOR; - define('pocketmine\PLUGIN_PATH', isset($opts["plugins"]) ? $opts["plugins"] . DIRECTORY_SEPARATOR : realpath(getcwd()) . DIRECTORY_SEPARATOR . "plugins" . DIRECTORY_SEPARATOR); + $pluginPath = isset($opts["plugins"]) ? $opts["plugins"] . DIRECTORY_SEPARATOR : realpath(getcwd()) . DIRECTORY_SEPARATOR . "plugins" . DIRECTORY_SEPARATOR; + Filesystem::addCleanedPath($pluginPath, Filesystem::CLEAN_PATH_PLUGINS_PREFIX); if(!file_exists($dataPath)){ mkdir($dataPath, 0777, true); @@ -243,7 +244,7 @@ namespace pocketmine { $autoloader = new \BaseClassLoader(); $autoloader->register(false); - new Server($autoloader, $logger, $dataPath, \pocketmine\PLUGIN_PATH); + new Server($autoloader, $logger, $dataPath, $pluginPath); $logger->info("Stopping other threads"); diff --git a/src/utils/Filesystem.php b/src/utils/Filesystem.php index cc3d8d226..ad5b5b117 100644 --- a/src/utils/Filesystem.php +++ b/src/utils/Filesystem.php @@ -40,7 +40,9 @@ use function rtrim; use function scandir; use function str_replace; use function stream_get_contents; +use function strlen; use function strpos; +use function uasort; use function unlink; use const DIRECTORY_SEPARATOR; use const LOCK_EX; @@ -52,6 +54,13 @@ use const SCANDIR_SORT_NONE; final class Filesystem{ /** @var resource[] */ private static $lockFileHandles = []; + /** + * @var string[] + * @phpstan-var array + */ + private static $cleanedPaths = [ + \pocketmine\PATH => self::CLEAN_PATH_SRC_PREFIX + ]; public const CLEAN_PATH_SRC_PREFIX = "pmsrc"; public const CLEAN_PATH_PLUGINS_PREFIX = "plugins"; @@ -79,6 +88,19 @@ final class Filesystem{ } } + public static function addCleanedPath(string $path, string $replacement) : void{ + self::$cleanedPaths[$path] = $replacement; + uksort(self::$cleanedPaths, function(string $str1, string $str2) : int{ + return strlen($str2) <=> strlen($str1); //longest first + }); + } + + /** + * @return string[] + * @phpstan-return array + */ + public static function getCleanedPaths() : array{ return self::$cleanedPaths; } + /** * @param string $path * @@ -88,12 +110,7 @@ final class Filesystem{ $result = str_replace([DIRECTORY_SEPARATOR, ".php", "phar://"], ["/", "", ""], $path); //remove relative paths - //TODO: make these paths dynamic so they can be unit-tested against - static $cleanPaths = [ - \pocketmine\PLUGIN_PATH => self::CLEAN_PATH_PLUGINS_PREFIX, //this has to come BEFORE \pocketmine\PATH because it's inside that by default on src installations - \pocketmine\PATH => self::CLEAN_PATH_SRC_PREFIX - ]; - foreach($cleanPaths as $cleanPath => $replacement){ + foreach(self::$cleanedPaths as $cleanPath => $replacement){ $cleanPath = rtrim(str_replace([DIRECTORY_SEPARATOR, "phar://"], ["/", ""], $cleanPath), "/"); if(strpos($result, $cleanPath) === 0){ $result = ltrim(str_replace($cleanPath, $replacement, $result), "/"); diff --git a/tests/phpstan/bootstrap.php b/tests/phpstan/bootstrap.php index 1906c5f47..9e514ffc5 100644 --- a/tests/phpstan/bootstrap.php +++ b/tests/phpstan/bootstrap.php @@ -33,4 +33,3 @@ if(!extension_loaded('libdeflate')){ //TODO: these need to be defined properly or removed define('pocketmine\COMPOSER_AUTOLOADER_PATH', dirname(__DIR__, 2) . '/vendor/autoload.php'); -define('pocketmine\PLUGIN_PATH', ''); diff --git a/tests/phpunit/utils/UtilsTest.php b/tests/phpunit/utils/UtilsTest.php index 766290888..20bb88cdf 100644 --- a/tests/phpunit/utils/UtilsTest.php +++ b/tests/phpunit/utils/UtilsTest.php @@ -33,9 +33,6 @@ class UtilsTest extends TestCase{ if(!defined('pocketmine\PATH')){ define('pocketmine\PATH', 'dummy'); } - if(!defined('pocketmine\PLUGIN_PATH')){ - define('pocketmine\PLUGIN_PATH', 'dummy'); - } } /**