Legoktm has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/372521 )

Change subject: Core alias list
......................................................................


Core alias list

Bug: T166010
Change-Id: I05949673837e797093da7b4e4241c00077f912ec
---
A .gitignore
A .gitreview
A bin/dumpCoreAliases.php
A composer.json
A src/AutoloadLoader.php
A src/CoreAliases.php
6 files changed, 646 insertions(+), 0 deletions(-)

Approvals:
  Legoktm: Verified; Looks good to me, approved



diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4719332
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+*~
+.*.swp
+/vendor
+/composer.lock
+/composer.local.json
diff --git a/.gitreview b/.gitreview
new file mode 100644
index 0000000..dc4e124
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,6 @@
+[gerrit]
+host=gerrit.wikimedia.org
+port=29418
+project=mediawiki/tools/namespaceizer.git
+defaultbranch=master
+defaultrebase=0
diff --git a/bin/dumpCoreAliases.php b/bin/dumpCoreAliases.php
new file mode 100644
index 0000000..e115c2b
--- /dev/null
+++ b/bin/dumpCoreAliases.php
@@ -0,0 +1,84 @@
+<?php
+
+use MediaWiki\Tool\Namespaceizer\AutoloadLoader;
+use MediaWiki\Tool\Namespaceizer\CoreAliases;
+
+if ( PHP_SAPI !== 'cli' ) {
+       exit( 1 );
+}
+
+require __DIR__ . '/../vendor/autoload.php';
+
+$self = array_shift( $argv );
+
+if ( !count( $argv ) ) {
+       echo "Usage: $self <autoload file>\n";
+       exit( 1 );
+}
+
+if ( $argv[0] === '--counts' ) {
+       $report = 'counts';
+       array_shift( $argv );
+} elseif ( $argv[0] === '--3col' ) {
+       $report = '3col';
+       array_shift( $argv );
+} elseif ( $argv[0] === '--classes' ) {
+       $report = 'classes';
+       array_shift( $argv );
+} else {
+       $report = 'php';
+}
+
+if ( !count( $argv ) ) {
+       echo "Usage: $self <autoload file>\n";
+       exit( 1 );
+}
+
+$file = $argv[0];
+
+$autoload = AutoloadLoader::getAutoloadClasses( $file );
+if ( $autoload === false ) {
+       echo "Unable to open autoload file $file\n";
+       exit( 1 );
+}
+
+$ca = new CoreAliases( $autoload );
+$aliases = $ca->getAliases();
+
+asort( $aliases );
+
+$counts = [];
+if ( $report === 'php' ) {
+       print "<?php\n\nreturn [\n";
+}
+foreach ( $aliases as $old => $new ) {
+       if ( $report === 'classes' ) {
+               print "$old\t$new\n";
+       } elseif ( $report === 'php' ) {
+               print "\t'" .
+                       strtr( $old, [ "\\" => "\\\\", "'" => "\\'" ] ) .
+                       "' => '" .
+                       strtr( $new, [ "\\" => "\\\\", "'" => "\\'" ] ) .
+                       "',\n";
+       } else {
+               if ( preg_match( '/(.*)\\\\([^\\\\]*)$/', $new, $m ) ) {
+                       if ( $report === 'counts' ) {
+                               if ( !isset( $counts[$m[1]] ) ) {
+                                       $counts[$m[1]] = 0;
+                               }
+                               $counts[$m[1]]++;
+                       } elseif ( $report === '3col' ) {
+                               print "$old\t{$m[1]}\t{$m[2]}\n";
+                       }
+               }
+       }
+}
+if ( $report === 'php' ) {
+       print "];\n";
+}
+
+if ( $report === 'counts' ) {
+       foreach ( $counts as $ns => $count ) {
+               print "$ns\t$count\n";
+       }
+}
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..1a2d50d
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,9 @@
+{
+       "name": "mediawiki/namespaceizer",
+       "description": "Namespace migration script",
+       "autoload": {
+               "psr-4": {
+                       "MediaWiki\\Tool\\Namespaceizer\\": "src/"
+               }
+       }
+}
diff --git a/src/AutoloadLoader.php b/src/AutoloadLoader.php
new file mode 100644
index 0000000..ea04c06
--- /dev/null
+++ b/src/AutoloadLoader.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace MediaWiki\Tool\Namespaceizer;
+
+class AutoloadLoader {
+       public static function getAutoloadClasses( $file ) {
+               $autoload = file_get_contents( $file );
+               if ( $autoload === false ) {
+                       return false;
+               }
+               $autoload = str_replace( "__DIR__ . '/", "'", $autoload );
+               $autoload = str_replace( '<?php', '', $autoload );
+               eval( $autoload );
+               return $wgAutoloadLocalClasses;
+       }
+}
diff --git a/src/CoreAliases.php b/src/CoreAliases.php
new file mode 100644
index 0000000..e78e507
--- /dev/null
+++ b/src/CoreAliases.php
@@ -0,0 +1,526 @@
+<?php
+
+namespace MediaWiki\Tool\Namespaceizer;
+
+class CoreAliases {
+       static $namespacesByDir = [
+               'includes' => 'MediaWiki',
+               'includes/actions' => 'MediaWiki\Action',
+               'includes/api' => null,
+               'includes/auth' => 'MediaWiki\Auth',
+               'includes/cache' => 'MediaWiki', // to parent
+               'includes/cache/localisation' => 
'MediaWiki\Language\LocalisationCache',
+               'includes/changes' => 'MediaWiki\Changes',
+               'includes/changetags' => 'MediaWiki\ChangeTags',
+               'includes/clientpool' => 'MediaWiki', // to parent
+               'includes/collation' => 'MediaWiki\Collation',
+               'includes/compat' => 'MediaWiki', // to parent
+               'includes/compat/normal' => 'MediaWiki', // to parent
+               'includes/composer' => null,
+               'includes/config' => 'MediaWiki\Config',
+               'includes/content' => 'MediaWiki\Content',
+               'includes/context' => 'MediaWiki\Context',
+               'includes/dao' => 'MediaWiki\Dao',
+               'includes/db' => 'MediaWiki\Db',
+               'includes/debug' => 'MediaWiki', // to parent
+               'includes/debug/logger' => 'MediaWiki\Logger', // to parent
+               'includes/debug/logger/monolog' => 'MediaWiki\Logger\Monolog', 
// to parent
+               'includes/deferred' => 'MediaWiki\Deferred',
+               'includes/diff' => 'MediaWiki\Diff',
+               'includes/edit' => 'MediaWiki\Edit', // single class
+               'includes/editpage' => 'MediaWiki\EditPage',
+               'includes/exception' => 'MediaWiki\Exception',
+               'includes/export' => 'MediaWiki\Export',
+               'includes/externalstore' => 'MediaWiki\ExternalStore',
+               'includes/filebackend' => 'MediaWiki\FileBackend',
+               'includes/filebackend/filejournal' => 
'MediaWiki\FileBackend\FileJournal',
+               'includes/filebackend/lockmanager' => 
'MediaWiki\FileBackend\LockManager',
+               'includes/filerepo' => 'MediaWiki\FileRepo',
+               'includes/filerepo/file' => 'MediaWiki\FileRepo\File',
+               'includes/gallery' => 'MediaWiki\Gallery',
+               'includes/htmlform' => 'MediaWiki\HTMLForm',
+               'includes/htmlform/fields' => 'MediaWiki\HTMLForm\Fields',
+               'includes/http' => 'MediaWiki\Http',
+               'includes/import' => 'MediaWiki\Import',
+               'includes/installer' => 'MediaWiki\Installer',
+               'includes/interwiki' => 'MediaWiki\Interwiki',
+               'includes/jobqueue' => 'MediaWiki\JobQueue',
+               'includes/jobqueue/aggregator' => 
'MediaWiki\JobQueue\Aggregator',
+               'includes/jobqueue/jobs' => 'MediaWiki\JobQueue\Job',
+               'includes/jobqueue/utils' => 'MediaWiki\JobQueue\Utils',
+               'includes/json' => 'MediaWiki', // to parent
+               'includes/libs' => null,
+               'includes/libs/composer' => 'Wikimedia\Composer',
+               'includes/libs/eventrelayer' => 'Wikimedia\EventRelayer',
+               'includes/libs/filebackend' => 'Wikimedia\FileBackend',
+               'includes/libs/filebackend/filejournal' => 
'Wikimedia\FileBackend\FileJournal',
+               'includes/libs/filebackend/fileop' => 
'Wikimedia\FileBackend\FileOp',
+               'includes/libs/filebackend/fsfile' => 
'Wikimedia\FileBackend\FSFile',
+               'includes/libs/http' => 'Wikimedia\Http',
+               'includes/libs/iterators' => 'Wikimedia\Iterators',
+               'includes/libs/lockmanager' => 'Wikimedia\LockManager',
+               'includes/libs/mime' => 'Wikimedia\Mime',
+               'includes/libs/objectcache' => 'Wikimedia\ObjectCache',
+               'includes/libs/rdbms' => 'Wikimedia\Rdbms',
+               'includes/libs/rdbms/connectionmanager' => 
'Wikimedia\Rdbms\ConnectionManager',
+               'includes/libs/rdbms/database' => 'Wikimedia\Rdbms\Database',
+               'includes/libs/rdbms/database/position' => 
'Wikimedia\Rdbms\Database\Position',
+               'includes/libs/rdbms/database/resultwrapper' => 
'Wikimedia\Rdbms\Database\ResultWrapper',
+               'includes/libs/rdbms/database/utils' => 
'Wikimedia\Rdbms\Database\Utils',
+               'includes/libs/rdbms/encasing' => 'Wikimedia\Rdbms\Encasing',
+               'includes/libs/rdbms/exception' => 'Wikimedia\Rdbms\Exception',
+               'includes/libs/rdbms/field' => 'Wikimedia\Rdbms\Field',
+               'includes/libs/rdbms/lbfactory' => 'Wikimedia\Rdbms\LBFactory',
+               'includes/libs/rdbms/loadbalancer' => 
'Wikimedia\Rdbms\LoadBalancer',
+               'includes/libs/rdbms/loadmonitor' => 
'Wikimedia\Rdbms\LoadMonitor',
+               'includes/libs/redis' => 'Wikimedia\Redis',
+               'includes/libs/replacers' => 'Wikimedia\StringUtils', // reorg
+               'includes/libs/stats' => 'Wikimedia\Stats',
+               'includes/libs/virtualrest' => 'Wikimedia\VirtualREST',
+               'includes/libs/xmp' => 'Wikimedia\XMP',
+               'includes/linkeddata' => null,
+               'includes/linker' => 'MediaWiki\Linker',
+               'includes/logging' => 'MediaWiki\Logging',
+               'includes/mail' => 'MediaWiki\Mail',
+               'includes/media' => 'MediaWiki\Media',
+               'includes/objectcache' => 'MediaWiki\ObjectCache',
+               'includes/page' => 'MediaWiki\Page',
+               'includes/pager' => 'MediaWiki\Pager',
+               'includes/parser' => 'MediaWiki\Parser',
+               'includes/password' => 'MediaWiki\Password',
+               'includes/poolcounter' => 'MediaWiki\PoolCounter',
+               'includes/profiler' => 'MediaWiki\Profiler',
+               'includes/profiler/output' => 'MediaWiki\Profiler', // to parent
+               'includes/rcfeed' => 'MediaWiki\RCFeed',
+               'includes/registration' => 'MediaWiki\Registration',
+               'includes/resourceloader' => 'MediaWiki\ResourceLoader',
+               'includes/revisiondelete' => 'MediaWiki\RevisionDelete',
+               'includes/search' => 'MediaWiki\Search',
+               'includes/services' => 'MediaWiki\Services',
+               'includes/session' => 'MediaWiki\Session',
+               'includes/shell' => 'MediaWiki\Shell',
+               'includes/site' => 'MediaWiki\Site',
+               'includes/skins' => 'MediaWiki\Skin', // deplural
+               'includes/specialpage' => 'MediaWiki\Special', // reorg
+               'includes/specials' => 'MediaWiki\Special', // deplural
+               'includes/specials/helpers' => 'MediaWiki\Special', // reorg
+               'includes/specials/pagers' => 'MediaWiki\Special\Pager', // 
deplural
+               'includes/specials/forms' => 'MediaWiki\Special\Form', // 
deplural
+               'includes/specials/formfields' => 
'MediaWiki\Special\FormField', // deplural
+               'includes/tidy' => 'MediaWiki\Tidy',
+               'includes/title' => 'MediaWiki\Title',
+               'includes/upload' => 'MediaWiki\Upload',
+               'includes/user' => 'MediaWiki\User',
+               'includes/utils' => 'MediaWiki\Utils',
+               'includes/watcheditem' => 'MediaWiki\WatchedItem',
+               'includes/widget' => 'MediaWiki\Widget',
+               'includes/widget/search' => 'MediaWiki\Widget\Search',
+               'languages' => 'MediaWiki\Language',
+               'languages/data' => 'MediaWiki\Language\Data',
+       ];
+
+       static $deprefixesByDir = [
+               'includes/api' => [ 'MediaWiki\Api', 'Api' ],
+               'includes/specials' => [ 'MediaWiki\Special\Page', 'Special' ],
+               'includes/composer' => [ 'MediaWiki\Composer', 'Composer' ],
+               'languages/classes' => [ 'MediaWiki\Language\ByCode', 
'Language' ],
+       ];
+
+       static $namespacesByClass = [
+               // Some extra classes for the Parser namespace
+               'Sanitizer' => 'MediaWiki\Parser',
+               'MagicWord' => 'MediaWiki\Parser',
+               'MagicWordArray' => 'MediaWiki\Parser',
+
+               // New Languages namespace
+               'MessageCache' => 'MediaWiki\Language',
+               'Message' => 'MediaWiki\Language',
+               'RawMessage' => 'MediaWiki\Language',
+
+               // New WebApp namespace
+               'PathRouter' => 'MediaWiki\WebApp',
+               'AjaxDispatcher' => 'MediaWiki\WebApp',
+               'AjaxResponse' => 'MediaWiki\WebApp',
+               'WebRequest' => 'MediaWiki\WebApp',
+               'WebRequestUpload' => 'MediaWiki\WebApp',
+               'FauxRequest' => 'MediaWiki\WebApp',
+               'DerivativeRequest' => 'MediaWiki\WebApp',
+               'WebResponse' => 'MediaWiki\WebApp',
+               'OutputPage' => 'MediaWiki\WebApp',
+               'HeaderCallback' => 'MediaWiki\WebApp',
+
+               // New ArticleStore namespace
+               'Revision' => 'MediaWiki\ArticleStore',
+               'RevisionList' => 'MediaWiki\ArticleStore',
+               'MergeHistory' => 'MediaWiki\ArticleStore',
+               'MovePage' => 'MediaWiki\ArticleStore',
+               'HistoryBlob' => 'MediaWiki\ArticleStore',
+               'LinkBatch' => 'MediaWiki\ArticleStore',
+               'LinkCache' => 'MediaWiki\ArticleStore',
+
+               // HistoryBlob, was a file with many classes
+               'HistoryBlob' => 'MediaWiki\ArticleStore\HistoryBlob',
+               'HistoryBlobCurStub' => 'MediaWiki\ArticleStore\HistoryBlob',
+               'HistoryBlobStub' => 'MediaWiki\ArticleStore\HistoryBlob',
+               'ConcatenatedGzipHistoryBlob' => 
'MediaWiki\ArticleStore\HistoryBlob',
+               'DiffHistoryBlob' => 'MediaWiki\ArticleStore\HistoryBlob',
+
+               // Feed, was mostly in Feed.php
+               'AtomFeed' => 'MediaWiki\Feed',
+               'ChannelFeed' => 'MediaWiki\Feed',
+               'FeedItem' => 'MediaWiki\Feed',
+               'RSSFeed' => 'MediaWiki\Feed',
+               'ChangesFeed' => 'MediaWiki\Feed', // moved from changes
+               'FeedUtils' => 'MediaWiki\Feed',
+
+               // libs reorg
+               'Cookie' => 'Wikimedia\Http',
+               'CookieJar' => 'Wikimedia\Http',
+               'ExplodeIterator' => 'Wikimedia\StringUtils',
+               'GenericArrayObject' => 'Wikimedia\ArrayUtils',
+               'HttpStatus' => 'Wikimedia\Http',
+               'JSCompilerContext' => 'Wikimedia\JSMinPlus',
+               'JSMinPlus' => 'Wikimedia\JSMinPlus',
+               'JSNode' => 'Wikimedia\JSMinPlus',
+               'JSParser' => 'Wikimedia\JSMinPlus',
+               'JSToken' => 'Wikimedia\JSMinPlus',
+               'JSTokenizer' => 'Wikimedia\JSMinPlus',
+               'MappedIterator' => 'Wikimedia\Iterators',
+               'ReverseArrayIterator' => 'Wikimedia\Iterators',
+               'MultiHttpClient' => 'Wikimedia\Http',
+               'MapCacheLRU' => 'Wikimedia\LRU',
+               'ProcessCacheLRU' => 'Wikimedia\LRU',
+               'ReplacementArray' => 'Wikimedia\StringUtils',
+               'Xhprof' => 'Wikimedia\Xhprof',
+               'XhprofData' => 'Wikimedia\Xhprof',
+
+               // libs trivial breakup
+               'ArrayUtils' => 'Wikimedia\ArrayUtils',
+               'CryptHKDF' => 'Wikimedia\CryptHKDF',
+               'CryptRand' => 'Wikimedia\CryptRand',
+               'CSSMin' => 'Wikimedia\CSSMin',
+               'DeferredStringifier' => 'Wikimedia\DeferredStringifier',
+               'DnsSrvDiscoverer' => 'Wikimedia\DnsSrvDiscoverer',
+               'HashRing' => 'Wikimedia\HashRing',
+               'HtmlArmor' => 'Wikimedia\HtmlArmor',
+               'IEUrlExtension' => 'Wikimedia\IEUrlExtension',
+               'IP' => 'Wikimedia\IP',
+               'JavaScriptMinifier' => 'Wikimedia\JavaScriptMinifier',
+               'MemoizedCallable' => 'Wikimedia\MemoizedCallable',
+               'MessageSpecifier' => 'Wikimedia\MessageSpecifier',
+               'ObjectFactory' => 'Wikimedia\ObjectFactory',
+               'RiffExtractor' => 'Wikimedia\RiffExtractor',
+               'StatusValue' => 'Wikimedia\StatusValue',
+               'StringUtils' => 'Wikimedia\StringUtils',
+               'Timing' => 'Wikimedia\Timing',
+               'UDPTransport' => 'Wikimedia\UDPTransport',
+               
+               // Special page helpers formerly in specials/ and linkeddata/
+               'EditWatchlistNormalHTMLForm' => 'MediaWiki\Special',
+               'EditWatchlistCheckboxSeriesField' => 'MediaWiki\Special',
+               'ImportReporter' => 'MediaWiki\Special',
+               'MovePageForm' => 'MediaWiki\Special',
+               'UploadForm' => 'MediaWiki\Special',
+               'UploadSourceField' => 'MediaWiki\Special',
+               'PageDataRequestHandler' => 'MediaWiki\Special',
+
+               // Language converter reorg
+               'ConverterRule' => 'MediaWiki\Language\Converter',
+               'LanguageConverter' => 'MediaWiki\Language\Converter',
+               'FakeConverter' => 'MediaWiki\Language\Converter',
+               'EnConverter' => 'MediaWiki\Language\Converter',
+               'GanConverter' => 'MediaWiki\Language\Converter',
+               'IuConverter' => 'MediaWiki\Language\Converter',
+               'KkConverter' => 'MediaWiki\Language\Converter',
+               'KuConverter' => 'MediaWiki\Language\Converter',
+               'ShiConverter' => 'MediaWiki\Language\Converter',
+               'SrConverter' => 'MediaWiki\Language\Converter',
+               'TgConverter' => 'MediaWiki\Language\Converter',
+               'UzConverter' => 'MediaWiki\Language\Converter',
+               'ZhConverter' => 'MediaWiki\Language\Converter',
+       ];
+
+       static $renamedClasses = [
+               // Rename the MediaWiki class after the entry point it serves
+               'MediaWiki' => 'MediaWiki\WebApp\Index',
+
+               // API query
+               'ApiQueryAllCategories' => 'MediaWiki\Api\Query\AllCategories',
+               'ApiQueryAllDeletedRevisions' => 
'MediaWiki\Api\Query\AllDeletedRevisions',
+               'ApiQueryAllImages' => 'MediaWiki\Api\Query\AllImages',
+               'ApiQueryAllLinks' => 'MediaWiki\Api\Query\AllLinks',
+               'ApiQueryAllMessages' => 'MediaWiki\Api\Query\AllMessages',
+               'ApiQueryAllPages' => 'MediaWiki\Api\Query\AllPages',
+               'ApiQueryAllRevisions' => 'MediaWiki\Api\Query\AllRevisions',
+               'ApiQueryAllUsers' => 'MediaWiki\Api\Query\AllUsers',
+               'ApiQueryAuthManagerInfo' => 
'MediaWiki\Api\Query\AuthManagerInfo',
+               'ApiQueryBacklinks' => 'MediaWiki\Api\Query\Backlinks',
+               'ApiQueryBacklinksprop' => 'MediaWiki\Api\Query\BacklinksProp',
+               'ApiQueryBlocks' => 'MediaWiki\Api\Query\Blocks',
+               'ApiQueryCategories' => 'MediaWiki\Api\Query\Categories',
+               'ApiQueryCategoryInfo' => 'MediaWiki\Api\Query\CategoryInfo',
+               'ApiQueryCategoryMembers' => 
'MediaWiki\Api\Query\CategoryMembers',
+               'ApiQueryContributions' => 'MediaWiki\Api\Query\UserContribs', 
// renamed to match action
+               'ApiQueryContributors' => 'MediaWiki\Api\Query\Contributors',
+               'ApiQueryDeletedRevisions' => 
'MediaWiki\Api\Query\DeletedRevisions',
+               'ApiQueryDeletedrevs' => 'MediaWiki\Api\Query\DeletedRevs',
+               'ApiQueryDisabled' => 'MediaWiki\Api\Query\Disabled',
+               'ApiQueryDuplicateFiles' => 
'MediaWiki\Api\Query\DuplicateFiles',
+               'ApiQueryExtLinksUsage' => 'MediaWiki\Api\Query\ExtLinksUsage',
+               'ApiQueryExternalLinks' => 'MediaWiki\Api\Query\ExternalLinks',
+               'ApiQueryFileRepoInfo' => 'MediaWiki\Api\Query\FileRepoInfo',
+               'ApiQueryFilearchive' => 'MediaWiki\Api\Query\FileArchive',
+               'ApiQueryIWBacklinks' => 'MediaWiki\Api\Query\IWBacklinks',
+               'ApiQueryIWLinks' => 'MediaWiki\Api\Query\IWLinks',
+               'ApiQueryImageInfo' => 'MediaWiki\Api\Query\ImageInfo',
+               'ApiQueryImages' => 'MediaWiki\Api\Query\Images',
+               'ApiQueryInfo' => 'MediaWiki\Api\Query\Info',
+               'ApiQueryLangBacklinks' => 'MediaWiki\Api\Query\LangBacklinks',
+               'ApiQueryLangLinks' => 'MediaWiki\Api\Query\LangLinks',
+               'ApiQueryLinks' => 'MediaWiki\Api\Query\Links',
+               'ApiQueryLogEvents' => 'MediaWiki\Api\Query\LogEvents',
+               'ApiQueryMyStashedFiles' => 
'MediaWiki\Api\Query\MyStashedFiles',
+               'ApiQueryPagePropNames' => 'MediaWiki\Api\Query\PagePropNames',
+               'ApiQueryPageProps' => 'MediaWiki\Api\Query\PageProps',
+               'ApiQueryPagesWithProp' => 'MediaWiki\Api\Query\PagesWithProp',
+               'ApiQueryPrefixSearch' => 'MediaWiki\Api\Query\PrefixSearch',
+               'ApiQueryProtectedTitles' => 
'MediaWiki\Api\Query\ProtectedTitles',
+               'ApiQueryQueryPage' => 'MediaWiki\Api\Query\QueryPage',
+               'ApiQueryRandom' => 'MediaWiki\Api\Query\Random',
+               'ApiQueryRecentChanges' => 'MediaWiki\Api\Query\RecentChanges',
+               'ApiQueryRevisions' => 'MediaWiki\Api\Query\Revisions',
+               'ApiQuerySearch' => 'MediaWiki\Api\Query\Search',
+               'ApiQuerySiteinfo' => 'MediaWiki\Api\Query\SiteInfo',
+               'ApiQueryStashImageInfo' => 
'MediaWiki\Api\Query\StashImageInfo',
+               'ApiQueryTags' => 'MediaWiki\Api\Query\Tags',
+               'ApiQueryTokens' => 'MediaWiki\Api\Query\Tokens',
+               'ApiQueryUserInfo' => 'MediaWiki\Api\Query\UserInfo',
+               'ApiQueryUsers' => 'MediaWiki\Api\Query\Users',
+               'ApiQueryWatchlist' => 'MediaWiki\Api\Query\Watchlist',
+               'ApiQueryWatchlistRaw' => 'MediaWiki\Api\Query\WatchlistRaw',
+
+               // API actions
+               'ApiAMCreateAccount' => 'MediaWiki\Api\Action\CreateAccount', 
// remove legacy "AM" prefix
+               'ApiBlock' => 'MediaWiki\Api\Action\Block',
+               'ApiChangeAuthenticationData' => 
'MediaWiki\Api\Action\ChangeAuthenticationData',
+               'ApiCheckToken' => 'MediaWiki\Api\Action\CheckToken',
+               'ApiClearHasMsg' => 'MediaWiki\Api\Action\ClearHasMsg',
+               'ApiClientLogin' => 'MediaWiki\Api\Action\ClientLogin',
+               'ApiComparePages' => 'MediaWiki\Api\Action\ComparePages',
+               'ApiCSPReport' => 'MediaWiki\Api\Action\CSPReport',
+               'ApiDelete' => 'MediaWiki\Api\Action\Delete',
+               'ApiDisabled' => 'MediaWiki\Api\Action\Disabled',
+               'ApiEditPage' => 'MediaWiki\Api\Action\Edit', // rename to 
match action name
+               'ApiEmailUser' => 'MediaWiki\Api\Action\EmailUser',
+               'ApiExpandTemplates' => 'MediaWiki\Api\Action\ExpandTemplates',
+               'ApiFeedContributions' => 
'MediaWiki\Api\Action\FeedContributions',
+               'ApiFeedRecentChanges' => 
'MediaWiki\Api\Action\FeedRecentChanges',
+               'ApiFeedWatchlist' => 'MediaWiki\Api\Action\FeedWatchlist',
+               'ApiFileRevert' => 'MediaWiki\Api\Action\FileRevert',
+               'ApiHelp' => 'MediaWiki\Api\Action\Help',
+               'ApiImageRotate' => 'MediaWiki\Api\Action\ImageRotate',
+               'ApiImport' => 'MediaWiki\Api\Action\Import',
+               'ApiLinkAccount' => 'MediaWiki\Api\Action\LinkAccount',
+               'ApiLogin' => 'MediaWiki\Api\Action\Login',
+               'ApiLogout' => 'MediaWiki\Api\Action\Logout',
+               'ApiManageTags' => 'MediaWiki\Api\Action\ManageTags',
+               'ApiMergeHistory' => 'MediaWiki\Api\Action\MergeHistory',
+               'ApiMove' => 'MediaWiki\Api\Action\Move',
+               'ApiOpenSearch' => 'MediaWiki\Api\Action\OpenSearch',
+               'ApiOptions' => 'MediaWiki\Api\Action\Options',
+               'ApiParamInfo' => 'MediaWiki\Api\Action\ParamInfo',
+               'ApiParse' => 'MediaWiki\Api\Action\Parse',
+               'ApiPatrol' => 'MediaWiki\Api\Action\Patrol',
+               'ApiProtect' => 'MediaWiki\Api\Action\Protect',
+               'ApiPurge' => 'MediaWiki\Api\Action\Purge',
+               'ApiQuery' => 'MediaWiki\Api\Action\Query',
+               'ApiRemoveAuthenticationData' => 
'MediaWiki\Api\Action\RemoveAuthenticationData',
+               'ApiResetPassword' => 'MediaWiki\Api\Action\ResetPassword',
+               'ApiRevisionDelete' => 'MediaWiki\Api\Action\RevisionDelete',
+               'ApiRollback' => 'MediaWiki\Api\Action\Rollback',
+               'ApiRsd' => 'MediaWiki\Api\Action\Rsd',
+               'ApiSetNotificationTimestamp' => 
'MediaWiki\Api\Action\SetNotificationTimestamp',
+               'ApiSetPageLanguage' => 'MediaWiki\Api\Action\SetPageLanguage',
+               'ApiStashEdit' => 'MediaWiki\Api\Action\StashEdit',
+               'ApiTag' => 'MediaWiki\Api\Action\Tag',
+               'ApiTokens' => 'MediaWiki\Api\Action\Tokens',
+               'ApiUnblock' => 'MediaWiki\Api\Action\Unblock',
+               'ApiUndelete' => 'MediaWiki\Api\Action\Undelete',
+               'ApiUpload' => 'MediaWiki\Api\Action\Upload',
+               'ApiUserrights' => 'MediaWiki\Api\Action\UserRights',
+               'ApiValidatePassword' => 
'MediaWiki\Api\Action\ValidatePassword',
+               'ApiWatch' => 'MediaWiki\Api\Action\Watch',
+
+               // API format
+               'ApiFormatFeedWrapper' => 'MediaWiki\Api\Format\FeedWrapper',
+               'ApiFormatJson' => 'MediaWiki\Api\Format\Json',
+               'ApiFormatNone' => 'MediaWiki\Api\Format\None',
+               'ApiFormatPhp' => 'MediaWiki\Api\Format\Php',
+               'ApiFormatRaw' => 'MediaWiki\Api\Format\Raw',
+               'ApiFormatXml' => 'MediaWiki\Api\Format\Xml',
+               'ApiOpenSearchFormatJson' => 
'MediaWiki\Api\Format\OpenSearchJson',
+               'ApiFormatXmlRsd' => 'MediaWiki\Api\Format\XmlRsd',
+
+               // Other API classes
+               'ApiBase' => 'MediaWiki\Api\ActionBase',
+               'UsageException' => 'MediaWiki\Api\MWUsageException',
+
+               // Standardize special pages with class names ending in "Page"
+               'AncientPagesPage' => 'MediaWiki\Special\Page\AncientPages',
+               'BrokenRedirectsPage' => 
'MediaWiki\Special\Page\BrokenRedirects',
+               'DeadendPagesPage' => 'MediaWiki\Special\Page\DeadendPages',
+               'DeletedContributionsPage' => 
'MediaWiki\Special\Page\DeletedContributions',
+               'DoubleRedirectsPage' => 
'MediaWiki\Special\Page\DoubleRedirects',
+               'EmailConfirmation' => 'MediaWiki\Special\Page\ConfirmEmail',
+               'FewestrevisionsPage' => 
'MediaWiki\Special\Page\FewestRevisions',
+               'LinkSearchPage' => 'MediaWiki\Special\Page\LinkSearch',
+               'ListDuplicatedFilesPage' => 
'MediaWiki\Special\Page\ListDuplicatedFiles',
+               'ListredirectsPage' => 'MediaWiki\Special\Page\ListRedirects',
+               'LonelyPagesPage' => 'MediaWiki\Special\Page\LonelyPages',
+               'LongPagesPage' => 'MediaWiki\Special\Page\LongPages',
+               'MIMEsearchPage' => 'MediaWiki\Special\Page\MIMESearch',
+               'MediaStatisticsPage' => 
'MediaWiki\Special\Page\MediaStatistics',
+               'MostcategoriesPage' => 'MediaWiki\Special\Page\MostCategories',
+               'MostimagesPage' => 'MediaWiki\Special\Page\MostImages',
+               'MostinterwikisPage' => 'MediaWiki\Special\Page\MostInterwikis',
+               'MostlinkedCategoriesPage' => 
'MediaWiki\Special\Page\MostLinkedCategories',
+               'MostlinkedPage' => 'MediaWiki\Special\Page\MostLinked',
+               'MostlinkedTemplatesPage' => 
'MediaWiki\Special\Page\MostLinkedTemplates',
+               'MostrevisionsPage' => 'MediaWiki\Special\Page\MostRevisions',
+               'ShortPagesPage' => 'MediaWiki\Special\Page\ShortPages',
+               'UncategorizedCategoriesPage' => 
'MediaWiki\Special\Page\UncategorizedCategories',
+               'UncategorizedImagesPage' => 
'MediaWiki\Special\Page\UncategorizedImages',
+               'UncategorizedPagesPage' => 
'MediaWiki\Special\Page\UncategorizedPages',
+               'UncategorizedTemplatesPage' => 
'MediaWiki\Special\Page\UncategorizedTemplates',
+               'UnusedCategoriesPage' => 
'MediaWiki\Special\Page\UnusedCategories',
+               'UnusedimagesPage' => 'MediaWiki\Special\Page\UnusedImages',
+               'UnusedtemplatesPage' => 
'MediaWiki\Special\Page\UnusedTemplates',
+               'UnwatchedpagesPage' => 'MediaWiki\Special\Page\UnwatchedPages',
+               'UserrightsPage' => 'MediaWiki\Special\Page\UserRights',
+               'WantedCategoriesPage' => 
'MediaWiki\Special\Page\WantedCategories',
+               'WantedFilesPage' => 'MediaWiki\Special\Page\WantedFiles',
+               'WantedPagesPage' => 'MediaWiki\Special\Page\WantedPages',
+               'WantedTemplatesPage' => 
'MediaWiki\Special\Page\WantedTemplates',
+               'WithoutInterwikiPage' => 
'MediaWiki\Special\Page\WithoutInterwiki',
+
+               // Other non-camel-case special pages
+               'SpecialProtectedpages' => 
'MediaWiki\Special\Page\ProtectedPages',
+               'SpecialProtectedtitles' => 
'MediaWiki\Special\Page\ProtectedTitles',
+               'SpecialPrefixindex' => 'MediaWiki\Special\Page\PrefixIndex',
+               'SpecialNewpages' => 'MediaWiki\Special\Page\NewPages',
+               'SpecialFilepath' => 'MediaWiki\Special\Page\FilePath',
+               'SpecialLockdb' => 'MediaWiki\Special\Page\LockDB',
+               'SpecialUnlockdb' => 'MediaWiki\Special\Page\UnlockDB',
+               'SpecialRandomredirect' => 
'MediaWiki\Special\Page\RandomRedirect',
+               'SpecialRandomrootpage' => 
'MediaWiki\Special\Page\RandomRootPage',
+               'SpecialMycontributions' => 
'MediaWiki\Special\Page\MyContributions',
+               'SpecialMypage' => 'MediaWiki\Special\Page\MyPage',
+               'SpecialMytalk' => 'MediaWiki\Special\Page\MyTalk',
+               'SpecialMyuploads' => 'MediaWiki\Special\Page\MyUploads',
+               'SpecialSpecialpages' => 'MediaWiki\Special\Page\SpecialPages',
+
+               // Special page classes that weren't named after their page name
+               'EmailInvalidation' => 'MediaWiki\Special\Page\InvalidateEmail',
+
+               // deprefixing of classes with "MW" prefix
+               'MWCallableUpdate' => 'MediaWiki\Deferred\CallableUpdate',
+               'MWContentSerializationException' => 
'MediaWiki\Exception\ContentSerializationException',
+               'MWCryptHKDF' => 'MediaWiki\Utils\CryptHKDF',
+               'MWCryptHash' => 'Wikimedia\CryptHash\CryptHash',
+               'MWCryptRand' => 'MediaWiki\Utils\CryptRand',
+               'MWDebug' => 'MediaWiki\Debug',
+               'MWExceptionHandler' => 'MediaWiki\Exception\ExceptionHandler',
+               'MWExceptionRenderer' => 
'MediaWiki\Exception\ExceptionRenderer',
+               'MWFileProps' => 'MediaWiki\Utils\FileProps',
+               'MWGrants' => 'MediaWiki\Grants',
+               'MWHttpRequest' => 'MediaWiki\Http\HttpRequest',
+               'MWMessagePack' => 'Wikimedia\MessagePack\MessagePack',
+               'MWOldPassword' => 'MediaWiki\Password\OldPassword',
+               'MWSaltedPassword' => 'MediaWiki\Password\SaltedPassword',
+               'MWRestrictions' => 'MediaWiki\Utils\Restrictions',
+               'MWTimestamp' => 'MediaWiki\Timestamp',
+               'MWUnknownContentModelException' => 
'MediaWiki\Exception\UnknownContentModelException',
+       ];
+
+       static $ignoreDirs = [
+               'maintenance',
+       ];
+
+       public function __construct( $autoloadClasses ) {
+               $this->autoloadClasses = $autoloadClasses;
+       }
+
+       private function getAutoloadClasses() {
+               $autoload = file_get_contents( $this->options['autoloadFile'] );
+               str_replace( "__DIR__ . '/", "'", $autoload );
+               eval( $autoload );
+               return $wgAutoloadLocalClasses;
+       }
+
+       private function startsWith( $haystack, $needle ) {
+               return substr( $haystack, 0, strlen( $needle ) ) === $needle;
+       }
+
+       public function getAliases() {
+               $aliases = [];
+
+               foreach ( $this->autoloadClasses as $class => $file ) {
+                       $dir = dirname( $file );
+
+                       if ( isset( self::$renamedClasses[$class] ) ) {
+                               $aliases[$class] = 
self::$renamedClasses[$class];
+                               continue;
+                       }
+                       
+                       if ( isset( self::$namespacesByClass[$class] ) ) {
+                               $aliases[$class] = 
self::$namespacesByClass[$class] . '\\' . $class;
+                               continue;
+                       }
+
+                       if ( isset( self::$deprefixesByDir[$dir] ) ) {
+                               list( $namespace, $prefix ) = 
self::$deprefixesByDir[$dir];
+                               if ( $this->startsWith( $class, $prefix ) ) {
+                                       $aliases[$class] = $namespace . '\\' . 
substr( $class, strlen( $prefix ) );
+                                       continue;
+                               } else {
+                                       $aliases[$class] = $namespace . '\\' . 
$class;
+                                       continue;
+                               }
+                       }
+
+                       if ( isset( self::$namespacesByDir[$dir] ) ) {
+                               $namespace = self::$namespacesByDir[$dir];
+                               $slashPos = strrpos( $class, '\\' );
+                               if ( $slashPos !== false ) {
+                                       $priorNamespace = substr( $class, 0, 
$slashPos );
+                                       $classPart = substr( $class, $slashPos 
+ 1 );
+                                       
+                                       if ( $priorNamespace !== $namespace ) {
+                                               $aliases[$class] = $namespace . 
'\\' . $classPart;
+                                               continue;
+                                       } else {
+                                               continue;
+                                       }
+                               } else {
+                                       $aliases[$class] = $namespace . '\\' . 
$class;
+                                       continue;
+                               }
+                       }
+
+                       foreach ( self::$ignoreDirs as $ignoreDir ) {
+                               if ( $this->startsWith( $dir, "$ignoreDir/" ) 
|| $dir === $ignoreDir ) {
+                                       continue 2;
+                               }
+                       }
+
+                       if ( $dir === '.' ) {
+                               // profileinfo.php
+                               continue;
+                       }
+
+                       throw new \Exception( "Don't know what to do with class 
$class in directory $dir" );
+               }
+
+               return $aliases;
+       }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/372521
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I05949673837e797093da7b4e4241c00077f912ec
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/tools/namespaceizer
Gerrit-Branch: master
Gerrit-Owner: Tim Starling <[email protected]>
Gerrit-Reviewer: Anomie <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Tim Starling <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to