jenkins-bot has submitted this change and it was merged.
Change subject: Hygiene: Standardize spelling of API classes and methods.
......................................................................
Hygiene: Standardize spelling of API classes and methods.
Before it was mixed between api/Api and API, even in the same file.
There was also e.g. renderAPI but formatApi.
Since core using Api for API class names and mw.Api on the client,
standardize on that.
Change-Id: I5a316b4c3f1148f1a5dad1e4d731a25f4b162d4c
---
M Resources.php
M includes/Block/Block.php
M includes/Block/BoardHistory.php
M includes/Block/Header.php
M includes/Block/Topic.php
M includes/Block/TopicList.php
M includes/Block/TopicSummary.php
M includes/View.php
M includes/api/ApiFlowBaseGet.php
M includes/api/ApiFlowBasePost.php
M modules/engine/components/board/base/flow-board-api-events.js
M modules/engine/components/board/flow-board.js
M modules/engine/components/common/flow-component-engines.js
M modules/engine/components/common/flow-component-events.js
M modules/engine/components/flow-component.js
M modules/engine/misc/flow-api.js
M tests/qunit/engine/components/board/test_flow-board.js
17 files changed, 67 insertions(+), 67 deletions(-)
Approvals:
EBernhardson: Looks good to me, approved
jenkins-bot: Verified
diff --git a/Resources.php b/Resources.php
index 80260df..4fa8e25 100644
--- a/Resources.php
+++ b/Resources.php
@@ -330,7 +330,7 @@
// MW UI
'engine/misc/mw-ui.enhance.js',
'engine/misc/mw-ui.modal.js',
- // FlowAPI
+ // FlowApi
'engine/misc/flow-api.js',
// Component registry
'engine/components/flow-registry.js',
diff --git a/includes/Block/Block.php b/includes/Block/Block.php
index 3fdf2f8..1d540c0 100644
--- a/includes/Block/Block.php
+++ b/includes/Block/Block.php
@@ -41,7 +41,7 @@
* @param array $options
* @return array
*/
- function renderAPI( array $options );
+ function renderApi( array $options );
/**
* @return string Unique name among all blocks on an object
diff --git a/includes/Block/BoardHistory.php b/includes/Block/BoardHistory.php
index 9e8ae94..8c6df45 100644
--- a/includes/Block/BoardHistory.php
+++ b/includes/Block/BoardHistory.php
@@ -29,7 +29,7 @@
throw new DataModelException( __CLASS__ . ' should not invoke
commit()', 'process-data' );
}
- public function renderAPI( array $options ) {
+ public function renderApi( array $options ) {
if ( $this->workflow->isNew() ) {
return array(
'type' => $this->getName(),
diff --git a/includes/Block/Header.php b/includes/Block/Header.php
index 27f6d7e..feac2b6 100644
--- a/includes/Block/Header.php
+++ b/includes/Block/Header.php
@@ -175,7 +175,7 @@
$this->storage->put( $this->newRevision, array(
'workflow' => $this->workflow,
) );
- // Reload $this->header for renderAPI() after
save
+ // Reload $this->header for renderApi() after
save
$this->header = $this->newRevision;
return array(
'new-revision-id' =>
$this->newRevision->getRevisionId(),
@@ -186,7 +186,7 @@
}
}
- public function renderAPI( array $options ) {
+ public function renderApi( array $options ) {
$output = array(
'type' => $this->getName(),
'editToken' => $this->getEditToken(),
@@ -195,22 +195,22 @@
switch ( $this->action ) {
case 'view':
case 'edit-header':
- $output += $this->renderRevisionAPI();
+ $output += $this->renderRevisionApi();
break;
case 'view-header':
if ( isset( $options['revId'] ) &&
$options['revId'] ) {
- $output += $this->renderSingleViewAPI(
$options['revId'] );
+ $output += $this->renderSingleViewApi(
$options['revId'] );
} else {
if ( isset( $options['contentFormat'] )
&& $options['contentFormat'] === 'wikitext' ) {
$this->requiresWikitext[] =
'view-header';
}
- $output += $this->renderRevisionAPI();
+ $output += $this->renderRevisionApi();
}
break;
case 'compare-header-revisions':
- $output += $this->renderDiffviewAPI( $options );
+ $output += $this->renderDiffviewApi( $options );
break;
}
@@ -230,7 +230,7 @@
}
// @Todo - duplicated logic in other diff view block
- protected function renderDiffviewAPI( array $options ) {
+ protected function renderDiffviewApi( array $options ) {
if ( !isset( $options['newRevision'] ) ) {
throw new InvalidInputException( 'A revision must be
provided for comparison', 'revision-comparison' );
}
@@ -250,7 +250,7 @@
}
// @Todo - duplicated logic in other single view block
- protected function renderSingleViewAPI( $revId ) {
+ protected function renderSingleViewApi( $revId ) {
/** @var HeaderViewQuery $query */
$query = Container::get( 'query.header.view' );
$row = $query->getSingleViewResult( $revId );
@@ -262,7 +262,7 @@
);
}
- protected function renderRevisionAPI() {
+ protected function renderRevisionApi() {
$output = array();
if ( $this->header === null ) {
/** @var UrlGenerator $urlGenerator */
diff --git a/includes/Block/Topic.php b/includes/Block/Topic.php
index 1a59dcd..6824af8 100644
--- a/includes/Block/Topic.php
+++ b/includes/Block/Topic.php
@@ -443,7 +443,7 @@
}
}
- public function renderAPI( array $options ) {
+ public function renderApi( array $options ) {
$output = array( 'type' => $this->getName() );
$topic = $this->loadTopicTitle( $this->action === 'history' ?
'history' : 'view' );
@@ -458,10 +458,10 @@
// single post history or full topic?
if ( isset( $options['postId'] ) ) {
// singular post history
- $output += $this->renderPostHistoryAPI(
$options, UUID::create( $options['postId'] ) );
+ $output += $this->renderPostHistoryApi(
$options, UUID::create( $options['postId'] ) );
} else {
// post history for full topic
- $output += $this->renderTopicHistoryAPI(
$options );
+ $output += $this->renderTopicHistoryApi(
$options );
}
} elseif ( $this->action === 'single-view' ) {
if ( isset( $options['revId'] ) ) {
@@ -469,22 +469,22 @@
} else {
throw new InvalidInputException( 'A revision
must be provided', 'invalid-input' );
}
- $output += $this->renderSingleViewAPI( $revId );
+ $output += $this->renderSingleViewApi( $revId );
} elseif ( $this->action === 'lock-topic' ) {
// Treat topic as a post, only the post + summary are
needed
- $result = $this->renderPostAPI( $options,
$this->workflow->getId() );
+ $result = $this->renderPostApi( $options,
$this->workflow->getId() );
$topicId = $result['roots'][0];
$revisionId = $result['posts'][$topicId][0];
$output += $result['revisions'][$revisionId];
} elseif ( $this->action === 'compare-post-revisions' ) {
- $output += $this->renderDiffViewAPI( $options );
- } elseif ( $this->shouldRenderTopicAPI( $options ) ) {
+ $output += $this->renderDiffViewApi( $options );
+ } elseif ( $this->shouldRenderTopicApi( $options ) ) {
// view full topic
- $output += $this->renderTopicAPI( $options );
+ $output += $this->renderTopicApi( $options );
} else {
// view single post, possibly specific revision
// @todo this isn't valid for the topic title
- $output += $this->renderPostAPI( $options );
+ $output += $this->renderPostApi( $options );
}
return $output + $this->finalizeApiOutput($options);
@@ -509,7 +509,7 @@
}
}
- protected function shouldRenderTopicAPI( array $options ) {
+ protected function shouldRenderTopicApi( array $options ) {
switch( $this->action ) {
// Any actions require rerendering the whole topic
case 'edit-post':
@@ -532,7 +532,7 @@
}
// @Todo - duplicated logic in other diff view block
- protected function renderDiffViewAPI( array $options ) {
+ protected function renderDiffViewApi( array $options ) {
if ( !isset( $options['newRevision'] ) ) {
throw new InvalidInputException( 'A revision must be
provided for comparison', 'revision-comparison' );
}
@@ -548,7 +548,7 @@
}
// @Todo - duplicated logic in other single view block
- protected function renderSingleViewAPI( $revId ) {
+ protected function renderSingleViewApi( $revId ) {
$row = Container::get( 'query.post.view'
)->getSingleViewResult( $revId );
return array(
@@ -556,7 +556,7 @@
);
}
- protected function renderTopicAPI( array $options, $workflowId = '' ) {
+ protected function renderTopicApi( array $options, $workflowId = '' ) {
$serializer = Container::get( 'formatter.topic' );
if ( !$workflowId ) {
if ( $this->workflow->isNew() ) {
@@ -591,7 +591,7 @@
* To generate forms with validation errors in the non-javascript
renders we
* need to add something to this output, but not sure what yet
*/
- protected function renderPostAPI( array $options, $postId = '' ) {
+ protected function renderPostApi( array $options, $postId = '' ) {
if ( $this->workflow->isNew() ) {
throw new FlowException( 'No posts can exist for
non-existent topic' );
}
@@ -637,7 +637,7 @@
return $serializer;
}
- protected function renderTopicHistoryAPI( array $options ) {
+ protected function renderTopicHistoryApi( array $options ) {
if ( $this->workflow->isNew() ) {
throw new FlowException( 'No topic history can exist
for non-existent topic' );
}
@@ -645,7 +645,7 @@
return $this->processHistoryResult( $found, $options );
}
- protected function renderPostHistoryAPI( array $options, UUID $postId )
{
+ protected function renderPostHistoryApi( array $options, UUID $postId )
{
if ( $this->workflow->isNew() ) {
throw new FlowException( 'No post history can exist for
non-existent topic' );
}
diff --git a/includes/Block/TopicList.php b/includes/Block/TopicList.php
index f5bd2fc..ad3d2fa 100644
--- a/includes/Block/TopicList.php
+++ b/includes/Block/TopicList.php
@@ -153,7 +153,7 @@
return $output;
}
- public function renderAPI( array $options ) {
+ public function renderApi( array $options ) {
/** @var TopicListFormatter $serializer */
$serializer = Container::get( 'formatter.topiclist' );
$response = array(
diff --git a/includes/Block/TopicSummary.php b/includes/Block/TopicSummary.php
index 65ca158..d4a0b78 100644
--- a/includes/Block/TopicSummary.php
+++ b/includes/Block/TopicSummary.php
@@ -194,7 +194,7 @@
$this->storage->put( $this->nextRevision, array(
'workflow' => $this->workflow,
) );
- // Reload the $this->formatterRow for renderAPI() after save
+ // Reload the $this->formatterRow for renderApi() after save
$this->formatterRow = new FormatterRow();
$this->formatterRow->revision = $this->nextRevision;
$this->formatterRow->previousRevision = $this->topicSummary;
@@ -230,7 +230,7 @@
* @return array
* @throws InvalidInputException
*/
- public function renderAPI( array $options ) {
+ public function renderApi( array $options ) {
$output = array( 'type' => $this->getName() );
if ( $this->wasSubmitted() ) {
diff --git a/includes/View.php b/includes/View.php
index 23a6d1b..b002862 100644
--- a/includes/View.php
+++ b/includes/View.php
@@ -131,7 +131,7 @@
$editToken = $user->getEditToken();
foreach ( $blocks as $block ) {
if ( $wasPosted ? $block->canSubmit( $action ) :
$block->canRender( $action ) ) {
- $apiResponse['blocks'][] = $block->renderAPI(
$parameters[$block->getName()] )
+ $apiResponse['blocks'][] = $block->renderApi(
$parameters[$block->getName()] )
+ array(
'title'
=> $apiResponse['title'],
'block-action-template' => $block->getTemplate( $action ),
diff --git a/includes/api/ApiFlowBaseGet.php b/includes/api/ApiFlowBaseGet.php
index ed025db..1cfe59f 100644
--- a/includes/api/ApiFlowBaseGet.php
+++ b/includes/api/ApiFlowBaseGet.php
@@ -26,7 +26,7 @@
$blockParams =
$passedParams[$block->getName()];
}
- $output[$action]['result'][$block->getName()] =
$block->renderAPI( $blockParams );
+ $output[$action]['result'][$block->getName()] =
$block->renderApi( $blockParams );
}
}
diff --git a/includes/api/ApiFlowBasePost.php b/includes/api/ApiFlowBasePost.php
index 04f7a74..014358f 100644
--- a/includes/api/ApiFlowBasePost.php
+++ b/includes/api/ApiFlowBasePost.php
@@ -52,7 +52,7 @@
// @Todo - hacky, maybe have contentformat in the
request to overwrite
// requiredWikitext
$block->unsetRequiresWikitext( $action );
- $output[$action]['result'][$block->getName()] =
$block->renderAPI( $params[$block->getName()] );
+ $output[$action]['result'][$block->getName()] =
$block->renderApi( $params[$block->getName()] );
}
// required until php5.4 which has the JsonSerializable
interface
diff --git a/modules/engine/components/board/base/flow-board-api-events.js
b/modules/engine/components/board/base/flow-board-api-events.js
index 7dcbe55..6066682 100644
--- a/modules/engine/components/board/base/flow-board-api-events.js
+++ b/modules/engine/components/board/base/flow-board-api-events.js
@@ -82,7 +82,7 @@
/*
* This is prev_revision in "generic" form. Each Flow API has
its
- * own unique prefix, which (in FlowAPI.prototype.getQueryMap)
will
+ * own unique prefix, which (in FlowApi.prototype.getQueryMap)
will
* be properly applied for the respective API call; e.g.
* epprev_revision (for edit post)
*/
@@ -473,7 +473,7 @@
// could then import that and continuously update it with new
revisions from
// api calls. Rendering a topic would then just be pointing
the template at
// the right part of that data instead of requesting it.
- flowBoard.API.apiCall( {
+ flowBoard.Api.apiCall( {
action: 'flow',
submodule: 'view-topic',
workflow: flowId,
diff --git a/modules/engine/components/board/flow-board.js
b/modules/engine/components/board/flow-board.js
index 35cc3be..6b40f04 100644
--- a/modules/engine/components/board/flow-board.js
+++ b/modules/engine/components/board/flow-board.js
@@ -22,7 +22,7 @@
uid = String( window.location.hash.match(
/[0-9a-z]{16,19}$/i ) || '' );
// Default API submodule for FlowBoard URLs is to fetch a
topiclist
- this.API.setDefaultSubmodule( 'view-topiclist' );
+ this.Api.setDefaultSubmodule( 'view-topiclist' );
// Set up the board
if ( this.reinitializeContainer( $container ) === false ) {
diff --git a/modules/engine/components/common/flow-component-engines.js
b/modules/engine/components/common/flow-component-engines.js
index 97ce7d1..2769efd 100644
--- a/modules/engine/components/common/flow-component-engines.js
+++ b/modules/engine/components/common/flow-component-engines.js
@@ -1,10 +1,10 @@
/*!
- * Initializes StorageEngine (Storer), TemplateEngine (Handlebars), and API
(FlowAPI).
+ * Initializes StorageEngine (Storer), TemplateEngine (Handlebars), and API
(FlowApi).
*/
( function ( $, mw, initStorer ) {
/**
- * Initializes Storer, Handlebars, and FlowAPI.
+ * Initializes Storer, Handlebars, and FlowApi.
* @constructor
*/
function FlowComponentEnginesMixin() {}
@@ -24,9 +24,9 @@
/**
* Flow API singleton
- * @type {FlowAPI}
+ * @type {FlowApi}
*/
- mw.flow.API = new mw.flow.FlowAPI(
FlowComponentEnginesMixin.static.StorageEngine );
+ mw.flow.Api = new mw.flow.FlowApi(
FlowComponentEnginesMixin.static.StorageEngine );
// Copy static and prototype from mixin to main class
mw.flow.mixinComponent( 'component', FlowComponentEnginesMixin );
diff --git a/modules/engine/components/common/flow-component-events.js
b/modules/engine/components/common/flow-component-events.js
index 6771444..9a81c89 100644
--- a/modules/engine/components/common/flow-component-events.js
+++ b/modules/engine/components/common/flow-component-events.js
@@ -278,7 +278,7 @@
flowComponent.debug( false, 'apiPreHandler
returned false', handlerName, args );
// Abort any old request in flight; this is
normally done automatically by requestFromNode
- flowComponent.API.abortOldRequestFromNode(
self, null, null, preHandlerReturns );
+ flowComponent.Api.abortOldRequestFromNode(
self, null, null, preHandlerReturns );
// @todo support for multiple indicators on
same target
$target.removeClass( 'flow-api-inprogress' );
@@ -289,9 +289,9 @@
}
// Make the request
- $deferred = flowComponent.API.requestFromNode( self,
preHandlerReturns );
+ $deferred = flowComponent.Api.requestFromNode( self,
preHandlerReturns );
if ( !$deferred ) {
- mw.flow.debug( '[FlowAPI] [interactiveHandlers]
apiRequest element is not anchor or form element' );
+ mw.flow.debug( '[FlowApi] [interactiveHandlers]
apiRequest element is not anchor or form element' );
$deferred = $.Deferred();
$deferred.rejectWith( { error: { info: 'Not an anchor
or form' } } );
}
diff --git a/modules/engine/components/flow-component.js
b/modules/engine/components/flow-component.js
index c2312a8..f3cfe06 100644
--- a/modules/engine/components/flow-component.js
+++ b/modules/engine/components/flow-component.js
@@ -34,7 +34,7 @@
}
// Give this board its own API instance @todo do this with OOjs
- this.API = new mw.flow.FlowAPI(
FlowComponent.static.StorageEngine, this.id );
+ this.Api = new mw.flow.FlowApi(
FlowComponent.static.StorageEngine, this.id );
// Keep this in the registry to find it by other means
while ( parent ) {
diff --git a/modules/engine/misc/flow-api.js b/modules/engine/misc/flow-api.js
index 9b832af..474b170 100644
--- a/modules/engine/misc/flow-api.js
+++ b/modules/engine/misc/flow-api.js
@@ -26,14 +26,14 @@
};
/**
- * Handles Flow API calls. Each FlowComponent has its own instance of
FlowAPI as component.API,
+ * Handles Flow API calls. Each FlowComponent has its own instance of
FlowApi as component.Api,
* so that it can store a workflowId and pageName permanently for
simplicity.
* @param {String} [workflowId]
* @param {String} [pageName]
- * @returns {FlowAPI}
+ * @returns {FlowApi}
* @constructor
*/
- function FlowAPI( storageEngine, workflowId, pageName ) {
+ function FlowApi( storageEngine, workflowId, pageName ) {
this.StorageEngine = storageEngine;
this.workflowId = workflowId;
this.pageName = pageName;
@@ -55,11 +55,11 @@
mwApi = new mw.Api( { ajax: { cache: false } }
);
if ( !params.action ) {
- mw.flow.debug( '[FlowAPI] apiCall error:
missing action string', arguments );
+ mw.flow.debug( '[FlowApi] apiCall error:
missing action string', arguments );
return $deferred.rejectWith({ error: 'Invalid
action' });
}
if ( !params.page ) {
- mw.flow.debug( '[FlowAPI] apiCall error:
missing page string', [ mw.config.get( 'wgPageName' ) ], arguments );
+ mw.flow.debug( '[FlowApi] apiCall error:
missing page string', [ mw.config.get( 'wgPageName' ) ], arguments );
return $deferred.rejectWith({ error: 'Invalid
title' });
}
@@ -80,13 +80,13 @@
}
/** @type {Storer} */
- FlowAPI.prototype.StorageEngine = null;
+ FlowApi.prototype.StorageEngine = null;
/** @type {String} */
- FlowAPI.prototype.pageName = null;
+ FlowApi.prototype.pageName = null;
/** @type {String} */
- FlowAPI.prototype.workflowId = null;
+ FlowApi.prototype.workflowId = null;
/** @type {String} */
- FlowAPI.prototype.defaultSubmodule = null;
+ FlowApi.prototype.defaultSubmodule = null;
/**
* Sets the fixed pageName for this API instance.
@@ -96,7 +96,7 @@
this.pageName = pageName;
}
- FlowAPI.prototype.setPageName = flowApiSetPageName;
+ FlowApi.prototype.setPageName = flowApiSetPageName;
/**
* Sets the fixed workflowId for this API instance.
@@ -106,7 +106,7 @@
this.workflowId = workflowId;
}
- FlowAPI.prototype.setWorkflowId = flowApiSetWorkflowId;
+ FlowApi.prototype.setWorkflowId = flowApiSetWorkflowId;
/**
* Transforms URL request parameters into API params
@@ -144,7 +144,7 @@
this.defaultSubmodule = defaultSubmodule;
}
- FlowAPI.prototype.setDefaultSubmodule = flowApiSetDefaultSubmodule;
+ FlowApi.prototype.setDefaultSubmodule = flowApiSetDefaultSubmodule;
/**
* Overrides (values of) queryMap with a provided override, which can
come
@@ -264,7 +264,7 @@
return queryMap;
}
- FlowAPI.prototype.getQueryMap = flowApiGetQueryMap;
+ FlowApi.prototype.getQueryMap = flowApiGetQueryMap;
/**
* Using a given form, parses its action, serializes the data, and
sends it as GET or POST depending on form method.
@@ -293,7 +293,7 @@
return this.abortOldRequestFromNode( $button, queryMap, method
);
}
- FlowAPI.prototype.requestFromForm = flowApiRequestFromForm;
+ FlowApi.prototype.requestFromForm = flowApiRequestFromForm;
/**
* Using a given anchor, parses its URL and sends it as a GET (default)
or POST depending on data-flow-api-method.
@@ -310,7 +310,7 @@
// Build the query map from this anchor's HREF
if ( !( queryMap = this.getQueryMap( anchor.href, null,
overrides ) ) ) {
- mw.flow.debug( '[FlowAPI] requestFromAnchor error:
invalid href', arguments );
+ mw.flow.debug( '[FlowApi] requestFromAnchor error:
invalid href', arguments );
return $deferred.rejectWith( { error: 'Invalid href' }
);
}
@@ -318,7 +318,7 @@
return this.abortOldRequestFromNode( $anchor, queryMap, method
);
}
- FlowAPI.prototype.requestFromAnchor = flowApiRequestFromAnchor;
+ FlowApi.prototype.requestFromAnchor = flowApiRequestFromAnchor;
/**
* Automatically calls requestFromAnchor or requestFromForm depending
on the type of node given.
@@ -338,7 +338,7 @@
}
}
- FlowAPI.prototype.requestFromNode = flowApiRequestFromNode;
+ FlowApi.prototype.requestFromNode = flowApiRequestFromNode;
/**
* Handles aborting an old in-flight API request.
@@ -355,7 +355,7 @@
if ( !queryMap ) {
// Get the queryMap automatically if one wasn't given
if ( !( queryMap = this.getQueryMap( $node, null,
overrides ) ) ) {
- mw.flow.debug( '[FlowAPI]
abortOldRequestFromNode failed to find a queryMap', arguments );
+ mw.flow.debug( '[FlowApi]
abortOldRequestFromNode failed to find a queryMap', arguments );
return;
}
}
@@ -373,7 +373,7 @@
prevApiCall.abort();
}
- mw.flow.debug( '[FlowAPI] apiCall abort request in
flight: ' + str, arguments );
+ mw.flow.debug( '[FlowApi] apiCall abort request in
flight: ' + str, arguments );
}
// If a method was given, we want to also issue a new API
request now
@@ -396,8 +396,8 @@
}
}
- FlowAPI.prototype.abortOldRequestFromNode =
flowApiAbortOldRequestFromNode;
+ FlowApi.prototype.abortOldRequestFromNode =
flowApiAbortOldRequestFromNode;
// Export
- mw.flow.FlowAPI = FlowAPI;
+ mw.flow.FlowApi = FlowApi;
}( mw, jQuery ) );
diff --git a/tests/qunit/engine/components/board/test_flow-board.js
b/tests/qunit/engine/components/board/test_flow-board.js
index 05f7f76..c063f1d 100644
--- a/tests/qunit/engine/components/board/test_flow-board.js
+++ b/tests/qunit/engine/components/board/test_flow-board.js
@@ -11,7 +11,7 @@
this.$el = $( '<div class="flow-component"
data-flow-component="board">' );
this.component = mw.flow.initComponent( this.$el );
- stub = this.sandbox.stub( this.component.API, 'apiCall' );
+ stub = this.sandbox.stub( this.component.Api, 'apiCall' );
stub.withArgs( {
action: 'flow',
--
To view, visit https://gerrit.wikimedia.org/r/169634
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I5a316b4c3f1148f1a5dad1e4d731a25f4b162d4c
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/Flow
Gerrit-Branch: master
Gerrit-Owner: Mattflaschen <[email protected]>
Gerrit-Reviewer: EBernhardson <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: SG <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits