From e4bcbe722ebbe9a5e8409d9fb3e26dbd51c88ecc Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Fri, 1 Nov 2013 17:17:45 +1100 Subject: [PATCH] Introduce includes/utils directory These are classes that provide facilities for use by any caller, are independent of user interface, and have a limited set of dependencies on the rest of MediaWiki. See the README file for a more precise definition. These classes cannot go in includes/libs because of a dependency on the MediaWiki framework, such as wfDebug() or MWException, but they are otherwise similar. I thought it would be useful to put them in their own directory, to make them more discoverable, and as part of a general program of reducing clutter in the base includes/ directory. I've probably missed a few classes which could be included here, but the following classes were considered and were rejected for now: * Fallback: single caller only * GitInfo: getViewers() has inappropriate dependencies * HttpFunctions: depends on configuration, $wgTitle * PoolCounter: depends on configuration * CacheHelper: depends on IContextSource, wfMemc() Also moved a couple of classes into libs/ instead, where that seemed to be more appropriate. Change-Id: I274cff805b7d694b728a89b764a049cd62d320fe --- includes/AutoLoader.php | 60 +++++++++++---------- includes/{ => libs}/ScopedPHPTimeout.php | 0 includes/{ => libs}/XmlTypeCheck.php | 0 includes/{ => utils}/ArrayUtils.php | 0 includes/{ => utils}/Cdb.php | 0 includes/{ => utils}/Cdb_PHP.php | 0 includes/{ => utils}/ConfEditor.php | 0 includes/{ => utils}/HashRing.php | 0 includes/{ => utils}/IP.php | 0 includes/{ => utils}/MWCryptRand.php | 0 includes/{ => utils}/MWFunction.php | 0 includes/{ => utils}/MappedIterator.php | 0 includes/utils/README | 9 ++++ includes/{ => utils}/ScopedCallback.php | 0 includes/{ => utils}/StringUtils.php | 0 includes/{ => utils}/UIDGenerator.php | 0 includes/{ => utils}/ZipDirectoryReader.php | 0 17 files changed, 40 insertions(+), 29 deletions(-) rename includes/{ => libs}/ScopedPHPTimeout.php (100%) rename includes/{ => libs}/XmlTypeCheck.php (100%) rename includes/{ => utils}/ArrayUtils.php (100%) rename includes/{ => utils}/Cdb.php (100%) rename includes/{ => utils}/Cdb_PHP.php (100%) rename includes/{ => utils}/ConfEditor.php (100%) rename includes/{ => utils}/HashRing.php (100%) rename includes/{ => utils}/IP.php (100%) rename includes/{ => utils}/MWCryptRand.php (100%) rename includes/{ => utils}/MWFunction.php (100%) rename includes/{ => utils}/MappedIterator.php (100%) create mode 100644 includes/utils/README rename includes/{ => utils}/ScopedCallback.php (100%) rename includes/{ => utils}/StringUtils.php (100%) rename includes/{ => utils}/UIDGenerator.php (100%) rename includes/{ => utils}/ZipDirectoryReader.php (100%) diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index da854388c1..1417c774db 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -33,7 +33,6 @@ $wgAutoloadLocalClasses = array( 'AjaxDispatcher' => 'includes/AjaxDispatcher.php', 'AjaxResponse' => 'includes/AjaxResponse.php', 'AlphabeticPager' => 'includes/Pager.php', - 'ArrayUtils' => 'includes/ArrayUtils.php', 'Article' => 'includes/Article.php', 'AtomFeed' => 'includes/Feed.php', 'AuthPlugin' => 'includes/AuthPlugin.php', @@ -47,28 +46,17 @@ $wgAutoloadLocalClasses = array( 'Categoryfinder' => 'includes/Categoryfinder.php', 'CategoryPage' => 'includes/CategoryPage.php', 'CategoryViewer' => 'includes/CategoryViewer.php', - 'CdbFunctions' => 'includes/Cdb_PHP.php', - 'CdbReader' => 'includes/Cdb.php', - 'CdbReader_DBA' => 'includes/Cdb.php', - 'CdbReader_PHP' => 'includes/Cdb_PHP.php', - 'CdbWriter' => 'includes/Cdb.php', - 'CdbWriter_DBA' => 'includes/Cdb.php', - 'CdbWriter_PHP' => 'includes/Cdb_PHP.php', 'ChangesFeed' => 'includes/ChangesFeed.php', 'ChangeTags' => 'includes/ChangeTags.php', 'ChannelFeed' => 'includes/Feed.php', 'Collation' => 'includes/Collation.php', 'ConcatenatedGzipHistoryBlob' => 'includes/HistoryBlob.php', - 'ConfEditor' => 'includes/ConfEditor.php', - 'ConfEditorParseError' => 'includes/ConfEditor.php', - 'ConfEditorToken' => 'includes/ConfEditor.php', 'Cookie' => 'includes/Cookie.php', 'CookieJar' => 'includes/Cookie.php', 'CurlHttpRequest' => 'includes/HttpFunctions.php', 'DeprecatedGlobal' => 'includes/DeprecatedGlobal.php', 'DerivativeRequest' => 'includes/WebRequest.php', 'DiffHistoryBlob' => 'includes/HistoryBlob.php', - 'DoubleReplacer' => 'includes/StringUtils.php', 'DummyLinker' => 'includes/Linker.php', 'Dump7ZipOutput' => 'includes/Export.php', 'DumpBZip2Output' => 'includes/Export.php', @@ -84,7 +72,6 @@ $wgAutoloadLocalClasses = array( 'EditPage' => 'includes/EditPage.php', 'EmailNotification' => 'includes/UserMailer.php', 'ErrorPageError' => 'includes/Exception.php', - 'ExplodeIterator' => 'includes/StringUtils.php', 'FakeTitle' => 'includes/FakeTitle.php', 'Fallback' => 'includes/Fallback.php', 'FatalError' => 'includes/Exception.php', @@ -99,8 +86,6 @@ $wgAutoloadLocalClasses = array( 'FormOptions' => 'includes/FormOptions.php', 'FormSpecialPage' => 'includes/SpecialPage.php', 'GitInfo' => 'includes/GitInfo.php', - 'HashRing' => 'includes/HashRing.php', - 'HashtableReplacer' => 'includes/StringUtils.php', 'HistoryBlob' => 'includes/HistoryBlob.php', 'HistoryBlobCurStub' => 'includes/HistoryBlob.php', 'HistoryBlobStub' => 'includes/HistoryBlob.php', @@ -142,7 +127,6 @@ $wgAutoloadLocalClasses = array( 'IncludableSpecialPage' => 'includes/SpecialPage.php', 'IndexPager' => 'includes/Pager.php', 'Interwiki' => 'includes/interwiki/Interwiki.php', - 'IP' => 'includes/IP.php', 'LCStore' => 'includes/cache/LocalisationCache.php', 'LCStore_Accel' => 'includes/cache/LocalisationCache.php', 'LCStore_CDB' => 'includes/cache/LocalisationCache.php', @@ -157,16 +141,13 @@ $wgAutoloadLocalClasses = array( 'MagicWord' => 'includes/MagicWord.php', 'MagicWordArray' => 'includes/MagicWord.php', 'MailAddress' => 'includes/UserMailer.php', - 'MappedIterator' => 'includes/MappedIterator.php', 'MediaWiki' => 'includes/Wiki.php', 'MediaWiki_I18N' => 'includes/SkinTemplate.php', 'Message' => 'includes/Message.php', 'MessageBlobStore' => 'includes/MessageBlobStore.php', 'MimeMagic' => 'includes/MimeMagic.php', - 'MWCryptRand' => 'includes/MWCryptRand.php', 'MWException' => 'includes/Exception.php', 'MWExceptionHandler' => 'includes/Exception.php', - 'MWFunction' => 'includes/MWFunction.php', 'MWHookException' => 'includes/Hooks.php', 'MWHttpRequest' => 'includes/HttpFunctions.php', 'MWInit' => 'includes/Init.php', @@ -196,9 +177,6 @@ $wgAutoloadLocalClasses = array( 'ReadOnlyError' => 'includes/Exception.php', 'RedirectSpecialArticle' => 'includes/SpecialPage.php', 'RedirectSpecialPage' => 'includes/SpecialPage.php', - 'RegexlikeReplacer' => 'includes/StringUtils.php', - 'ReplacementArray' => 'includes/StringUtils.php', - 'Replacer' => 'includes/StringUtils.php', 'ReverseChronologicalPager' => 'includes/Pager.php', 'RevisionItem' => 'includes/RevisionList.php', 'RevisionItemBase' => 'includes/RevisionList.php', @@ -207,8 +185,6 @@ $wgAutoloadLocalClasses = array( 'RevisionList' => 'includes/RevisionList.php', 'RSSFeed' => 'includes/Feed.php', 'Sanitizer' => 'includes/Sanitizer.php', - 'ScopedCallback' => 'includes/ScopedCallback.php', - 'ScopedPHPTimeout' => 'includes/ScopedPHPTimeout.php', 'SiteConfiguration' => 'includes/SiteConfiguration.php', 'SiteStats' => 'includes/SiteStats.php', 'SiteStatsInit' => 'includes/SiteStats.php', @@ -230,7 +206,6 @@ $wgAutoloadLocalClasses = array( 'StatCounter' => 'includes/StatCounter.php', 'Status' => 'includes/Status.php', 'StreamFile' => 'includes/StreamFile.php', - 'StringUtils' => 'includes/StringUtils.php', 'StubContLang' => 'includes/StubObject.php', 'StubObject' => 'includes/StubObject.php', 'StubUserLang' => 'includes/StubObject.php', @@ -241,7 +216,6 @@ $wgAutoloadLocalClasses = array( 'TitleArray' => 'includes/TitleArray.php', 'TitleArrayFromResult' => 'includes/TitleArray.php', 'ThrottledError' => 'includes/Exception.php', - 'UIDGenerator' => 'includes/UIDGenerator.php', 'UnlistedSpecialPage' => 'includes/SpecialPage.php', 'UploadSourceAdapter' => 'includes/Import.php', 'UppercaseCollation' => 'includes/Collation.php', @@ -274,10 +248,7 @@ $wgAutoloadLocalClasses = array( 'XmlJsCode' => 'includes/Xml.php', 'XMLReader2' => 'includes/Import.php', 'XmlSelect' => 'includes/Xml.php', - 'XmlTypeCheck' => 'includes/XmlTypeCheck.php', 'ZhClient' => 'includes/ZhClient.php', - 'ZipDirectoryReader' => 'includes/ZipDirectoryReader.php', - 'ZipDirectoryReaderError' => 'includes/ZipDirectoryReader.php', # includes/actions 'CachedAction' => 'includes/actions/CachedAction.php', @@ -711,6 +682,8 @@ $wgAutoloadLocalClasses = array( 'JSParser' => 'includes/libs/jsminplus.php', 'JSToken' => 'includes/libs/jsminplus.php', 'JSTokenizer' => 'includes/libs/jsminplus.php', + 'ScopedPHPTimeout' => 'includes/libs/ScopedPHPTimeout.php', + 'XmlTypeCheck' => 'includes/libs/XmlTypeCheck.php', # includes/libs/lessphp 'lessc' => 'includes/libs/lessc.inc.php', @@ -1069,6 +1042,35 @@ $wgAutoloadLocalClasses = array( 'UploadStashWrongOwnerException' => 'includes/upload/UploadStash.php', 'UploadStashNoSuchKeyException' => 'includes/upload/UploadStash.php', + # includes/utils + 'ArrayUtils' => 'includes/utils/ArrayUtils.php', + 'CdbFunctions' => 'includes/utils/Cdb_PHP.php', + 'CdbReader' => 'includes/utils/Cdb.php', + 'CdbReader_DBA' => 'includes/utils/Cdb.php', + 'CdbReader_PHP' => 'includes/utils/Cdb_PHP.php', + 'CdbWriter' => 'includes/utils/Cdb.php', + 'CdbWriter_DBA' => 'includes/utils/Cdb.php', + 'CdbWriter_PHP' => 'includes/utils/Cdb_PHP.php', + 'ConfEditor' => 'includes/utils/ConfEditor.php', + 'ConfEditorParseError' => 'includes/utils/ConfEditor.php', + 'ConfEditorToken' => 'includes/utils/ConfEditor.php', + 'DoubleReplacer' => 'includes/utils/StringUtils.php', + 'ExplodeIterator' => 'includes/utils/StringUtils.php', + 'HashRing' => 'includes/utils/HashRing.php', + 'HashtableReplacer' => 'includes/utils/StringUtils.php', + 'IP' => 'includes/utils/IP.php', + 'MWCryptRand' => 'includes/utils/MWCryptRand.php', + 'MWFunction' => 'includes/utils/MWFunction.php', + 'MappedIterator' => 'includes/utils/MappedIterator.php', + 'RegexlikeReplacer' => 'includes/utils/StringUtils.php', + 'ReplacementArray' => 'includes/utils/StringUtils.php', + 'Replacer' => 'includes/utils/StringUtils.php', + 'ScopedCallback' => 'includes/utils/ScopedCallback.php', + 'StringUtils' => 'includes/utils/StringUtils.php', + 'UIDGenerator' => 'includes/utils/UIDGenerator.php', + 'ZipDirectoryReader' => 'includes/utils/ZipDirectoryReader.php', + 'ZipDirectoryReaderError' => 'includes/utils/ZipDirectoryReader.php', + # languages 'ConverterRule' => 'languages/LanguageConverter.php', 'FakeConverter' => 'languages/Language.php', diff --git a/includes/ScopedPHPTimeout.php b/includes/libs/ScopedPHPTimeout.php similarity index 100% rename from includes/ScopedPHPTimeout.php rename to includes/libs/ScopedPHPTimeout.php diff --git a/includes/XmlTypeCheck.php b/includes/libs/XmlTypeCheck.php similarity index 100% rename from includes/XmlTypeCheck.php rename to includes/libs/XmlTypeCheck.php diff --git a/includes/ArrayUtils.php b/includes/utils/ArrayUtils.php similarity index 100% rename from includes/ArrayUtils.php rename to includes/utils/ArrayUtils.php diff --git a/includes/Cdb.php b/includes/utils/Cdb.php similarity index 100% rename from includes/Cdb.php rename to includes/utils/Cdb.php diff --git a/includes/Cdb_PHP.php b/includes/utils/Cdb_PHP.php similarity index 100% rename from includes/Cdb_PHP.php rename to includes/utils/Cdb_PHP.php diff --git a/includes/ConfEditor.php b/includes/utils/ConfEditor.php similarity index 100% rename from includes/ConfEditor.php rename to includes/utils/ConfEditor.php diff --git a/includes/HashRing.php b/includes/utils/HashRing.php similarity index 100% rename from includes/HashRing.php rename to includes/utils/HashRing.php diff --git a/includes/IP.php b/includes/utils/IP.php similarity index 100% rename from includes/IP.php rename to includes/utils/IP.php diff --git a/includes/MWCryptRand.php b/includes/utils/MWCryptRand.php similarity index 100% rename from includes/MWCryptRand.php rename to includes/utils/MWCryptRand.php diff --git a/includes/MWFunction.php b/includes/utils/MWFunction.php similarity index 100% rename from includes/MWFunction.php rename to includes/utils/MWFunction.php diff --git a/includes/MappedIterator.php b/includes/utils/MappedIterator.php similarity index 100% rename from includes/MappedIterator.php rename to includes/utils/MappedIterator.php diff --git a/includes/utils/README b/includes/utils/README new file mode 100644 index 0000000000..b5b8ec88c5 --- /dev/null +++ b/includes/utils/README @@ -0,0 +1,9 @@ +The classes in this directory are general utilities for use by any part of +MediaWiki. They do not favour any particular user interface and are not +constrained to serve any particular feature. This is similar to includes/libs, +except that some dependency on the MediaWiki framework (such as the use of +MWException, Status or wfDebug()) disqualifies them from use outside of +MediaWiki without modification. + +Utilities should not use global configuration variables, rather they should rely +on the caller to configure their behaviour. diff --git a/includes/ScopedCallback.php b/includes/utils/ScopedCallback.php similarity index 100% rename from includes/ScopedCallback.php rename to includes/utils/ScopedCallback.php diff --git a/includes/StringUtils.php b/includes/utils/StringUtils.php similarity index 100% rename from includes/StringUtils.php rename to includes/utils/StringUtils.php diff --git a/includes/UIDGenerator.php b/includes/utils/UIDGenerator.php similarity index 100% rename from includes/UIDGenerator.php rename to includes/utils/UIDGenerator.php diff --git a/includes/ZipDirectoryReader.php b/includes/utils/ZipDirectoryReader.php similarity index 100% rename from includes/ZipDirectoryReader.php rename to includes/utils/ZipDirectoryReader.php -- 2.20.1