From: This, that and the other Date: Tue, 9 Dec 2014 00:05:29 +0000 (+1100) Subject: Make the autoload generator use forward slashes on all OSs X-Git-Tag: 1.31.0-rc.0~12905 X-Git-Url: http://git.cyclocoop.org/%24self?a=commitdiff_plain;h=3e975cfc94f298e3bd6c17c813a2a416463e0af2;p=lhc%2Fweb%2Fwiklou.git Make the autoload generator use forward slashes on all OSs It was previously using the platform-specific directory separator, meaning that we got backslashes on Windows and forward slashes on other OSs. Bug: T77004 Change-Id: I5d502b54fddd55272e63d4a2a14b6d5de541263a --- diff --git a/includes/utils/AutoloadGenerator.php b/includes/utils/AutoloadGenerator.php index 4e65e11e8b..6149a23f33 100644 --- a/includes/utils/AutoloadGenerator.php +++ b/includes/utils/AutoloadGenerator.php @@ -50,13 +50,24 @@ class AutoloadGenerator { if ( !is_array( $flags ) ) { $flags = array( $flags ); } - $this->basepath = realpath( $basepath ); + $this->basepath = self::platformAgnosticRealpath( $basepath ); $this->collector = new ClassCollector; if ( in_array( 'local', $flags ) ) { $this->variableName = 'wgAutoloadLocalClasses'; } } + /** + * Wrapper for realpath() that returns the same results (using forward + * slashes) on both Windows and *nix. + * + * @param string $path Parameter to realpath() + * @return string + */ + protected static function platformAgnosticRealpath( $path ) { + return str_replace( '\\', '/', realpath( $path ) ); + } + /** * Force a class to be autoloaded from a specific path, regardless of where * or if it was detected. @@ -65,7 +76,7 @@ class AutoloadGenerator { * @param string $inputPath Full path to the file containing the class */ public function forceClassPath( $fqcn, $inputPath ) { - $path = realpath( $inputPath ); + $path = self::platformAgnosticRealpath( $inputPath ); if ( !$path ) { throw new \Exception( "Invalid path: $inputPath" ); } @@ -78,9 +89,10 @@ class AutoloadGenerator { } /** - * @var string $inputPath Path to a php file to find classes within + * @param string $inputPath Path to a php file to find classes within */ public function readFile( $inputPath ) { + $inputPath = self::platformAgnosticRealpath( $inputPath ); $len = strlen( $this->basepath ); if ( substr( $inputPath, 0, $len ) !== $this->basepath ) { throw new \Exception( "Path is not within basepath: $inputPath" ); @@ -99,7 +111,8 @@ class AutoloadGenerator { * for php files with either .php or .inc extensions */ public function readDir( $dir ) { - $it = new RecursiveDirectoryIterator( realpath( $dir ) ); + $it = new RecursiveDirectoryIterator( + self::platformAgnosticRealpath( $dir ) ); $it = new RecursiveIteratorIterator( $it ); foreach ( $it as $path => $file ) {