From: Smriti.Singh Date: Sun, 24 May 2015 21:53:14 +0000 (+0300) Subject: AutoloadGenerator.php: Update 'AutoloadClasses' in extension.json X-Git-Tag: 1.31.0-rc.0~11119^2 X-Git-Url: http://git.cyclocoop.org/%24href?a=commitdiff_plain;h=cbcbbf2bf1452abd58b671b3fce3f59a2d6dcd5b;p=lhc%2Fweb%2Fwiklou.git AutoloadGenerator.php: Update 'AutoloadClasses' in extension.json AutoloadGenerator.php until now only updated autoload.php. As we shift to extension registration, it would be cleaner if AutoloadGenerator.php directly updates 'AutoloadClasses' in extension.json. Bug: T88194 Change-Id: Idd601d7897634fae8c69f4d5338d9fc8f8b8f89b --- diff --git a/includes/utils/AutoloadGenerator.php b/includes/utils/AutoloadGenerator.php index 9cf8cab5db..dd1a38a84a 100644 --- a/includes/utils/AutoloadGenerator.php +++ b/includes/utils/AutoloadGenerator.php @@ -126,45 +126,78 @@ class AutoloadGenerator { * developers towards the appropriate way to update the autoload. */ public function generateAutoload( $commandName = 'AutoloadGenerator' ) { - $content = array(); - // We need to generate a line each rather than exporting the - // full array so __DIR__ can be prepended to all the paths - $format = "%s => __DIR__ . %s,"; - foreach ( $this->classes as $path => $contained ) { - $exportedPath = var_export( $path, true ); - foreach ( $contained as $fqcn ) { + // We need to check whether an extenson.json exists or not, and + // incase it doesn't, update the autoload.php file. + + if ( file_exists( $this->basepath . '/extension.json' ) ) { + require_once __DIR__ . '/../../includes/json/FormatJson.php'; + $key = 'AutoloadClasses'; + $json = FormatJson::decode( file_get_contents( $this->basepath + . '/extension.json' ), true ); + unset( $json[$key] ); + // Inverting the key-value pairs so that they become of the + // format class-name : path when they get converted into json. + foreach ( $this->classes as $path => $contained ) { + foreach ( $contained as $fqcn ) { + + // Using substr to remove the leading '/' + $json[$key][$fqcn] = substr( $path, 1 ); + } + } + foreach ( $this->overrides as $path => $fqcn ) { + + // Using substr to remove the leading '/' + $json[$key][$fqcn] = substr( $path, 1 ); + } + + // Sorting the list of autoload classes. + ksort( $json[$key] ); + + // Update extension.json, using constants for the required + // formatting. + file_put_contents( $this->basepath . '/extension.json', + FormatJson::encode( $json, true ) . "\n" ); + } else { + $content = array(); + + // We need to generate a line each rather than exporting the + // full array so __DIR__ can be prepended to all the paths + $format = "%s => __DIR__ . %s,"; + foreach ( $this->classes as $path => $contained ) { + $exportedPath = var_export( $path, true ); + foreach ( $contained as $fqcn ) { + $content[$fqcn] = sprintf( + $format, + var_export( $fqcn, true ), + $exportedPath + ); + } + } + + foreach ( $this->overrides as $fqcn => $path ) { $content[$fqcn] = sprintf( $format, var_export( $fqcn, true ), - $exportedPath + var_export( $path, true ) ); } - } - foreach ( $this->overrides as $fqcn => $path ) { - $content[$fqcn] = sprintf( - $format, - var_export( $fqcn, true ), - var_export( $path, true ) - ); - } - - // sort for stable output - ksort( $content ); + // sort for stable output + ksort( $content ); - // extensions using this generator are appending to the existing - // autoload. - if ( $this->variableName === 'wgAutoloadClasses' ) { - $op = '+='; - } else { - $op = '='; - } + // extensions using this generator are appending to the existing + // autoload. + if ( $this->variableName === 'wgAutoloadClasses' ) { + $op = '+='; + } else { + $op = '='; + } - $output = implode( "\n\t", $content ); - file_put_contents( - $this->basepath . '/autoload.php', - <<basepath . '/autoload.php', + <<variableName}; ); EOD - ); + ); + } } - /** * Ensure that Unix-style path separators ("/") are used in the path. *