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:
parent
3d3370ac2b
commit
cbcbbf2bf1
1 changed files with 65 additions and 32 deletions
|
|
@ -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.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in a new issue