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
This commit is contained in:
Smriti.Singh 2015-05-25 00:53:14 +03:00
parent 3d3370ac2b
commit cbcbbf2bf1

View file

@ -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',
<<<EOD
$output = implode( "\n\t", $content );
file_put_contents(
$this->basepath . '/autoload.php',
<<<EOD
<?php
// This file is generated by $commandName, do not adjust manually
// @codingStandardsIgnoreFile
@ -175,9 +208,9 @@ global \${$this->variableName};
);
EOD
);
);
}
}
/**
* Ensure that Unix-style path separators ("/") are used in the path.
*