jenkins-bot has submitted this change and it was merged.
Change subject: Cleanup switchToConfig + bug fix in removeInterwiki
......................................................................
Cleanup switchToConfig + bug fix in removeInterwiki
* env.switchToConfig was a bit convoluted -- cleaned it up.
Also added error checking for missing prefix and unavailable
API uri.
Removed hack from ConfigRequest.
* ParsoidConfig.removeInterwiki had edge case bugs -- this is
currently unused, so no harm done.
Change-Id: I6fa40c9f4cf4101d041fb0cf584266874d95d199
---
M js/lib/mediawiki.ApiRequest.js
M js/lib/mediawiki.ParsoidConfig.js
M js/lib/mediawiki.parser.environment.js
3 files changed, 50 insertions(+), 43 deletions(-)
Approvals:
GWicke: Looks good to me, approved
jenkins-bot: Verified
diff --git a/js/lib/mediawiki.ApiRequest.js b/js/lib/mediawiki.ApiRequest.js
index e5ce2ca..20b1f78 100644
--- a/js/lib/mediawiki.ApiRequest.js
+++ b/js/lib/mediawiki.ApiRequest.js
@@ -550,20 +550,11 @@
* A request for the wiki's configuration variables.
*
* @constructor
- * @param {string} confSource The API URI to use for fetching, or a filename
+ * @param {string} apiURI The API URI to use for fetching
* @param {MWParserEnvironment} env
*/
-var ConfigRequest = function ( confSource, env ) {
+var ConfigRequest = function ( apiURI, env ) {
ApiRequest.call( this, env, null );
-
- if ( !env.conf.parsoid.fetchConfig ) {
- // Hack! Configured to use local configurations, probably for
- // parserTests. Fetch the cached versions and use those.
- // The confSource will be a filename in this case.
- var localConf = require( confSource );
- this._handleJSON( null, localConf );
- return;
- }
var metas = [
'siteinfo'
@@ -588,18 +579,15 @@
siprop: siprops.join( '|' )
};
- if ( !confSource ) {
+ if ( !apiURI ) {
this._requestCB( new Error( 'There was no base URI for the API
we tried to use.' ) );
return;
}
- var url = confSource + '?' +
- qs.stringify( apiargs );
-
this.requestOptions = {
method: 'GET',
followRedirect: true,
- url: url,
+ url: apiURI + '?' + qs.stringify( apiargs ),
timeout: 40 * 1000,
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64;
rv:9.0.1) ' +
diff --git a/js/lib/mediawiki.ParsoidConfig.js
b/js/lib/mediawiki.ParsoidConfig.js
index 37e682a..753a674 100644
--- a/js/lib/mediawiki.ParsoidConfig.js
+++ b/js/lib/mediawiki.ParsoidConfig.js
@@ -81,7 +81,10 @@
ParsoidConfig.prototype.removeInterwiki = function ( prefix ) {
delete this.interwikiMap[prefix];
this.interwikiRegexp = this.interwikiRegexp.replace(
- new RegExp( '\\|' + prefix + '\\|' ), '|' );
+ new RegExp( '(^|\\|)' + prefix + '(\\||$)' ), function() {
+ return arguments[0] === ("|" + prefix + "|") ? "|" : '';
+ }
+ );
};
/**
diff --git a/js/lib/mediawiki.parser.environment.js
b/js/lib/mediawiki.parser.environment.js
index ccfbbdf..d331021 100644
--- a/js/lib/mediawiki.parser.environment.js
+++ b/js/lib/mediawiki.parser.environment.js
@@ -281,36 +281,52 @@
* @param {Error} cb.err
*/
MWParserEnvironment.prototype.switchToConfig = function ( prefix, cb ) {
- // This is sometimes a URI, sometimes a prefix.
- var confSource,
- uri = this.conf.parsoid.interwikiMap[prefix] ||
- this.conf.parsoid.interwikiMap.en;
- this.conf.parsoid.apiURI = uri;
- if ( !this.conf.parsoid.fetchConfig ) {
- // Use the name of a cache file as the source of the config.
- confSource = './baseconfig/' + prefix + '.json';
- } else {
- confSource = uri;
+ function setupWikiConfig(env, apiURI, error, config) {
+ if ( error === null ) {
+ env.conf.wiki = new WikiConfig( config, prefix, apiURI
);
+ env.confCache[prefix] = env.conf.wiki;
+ }
+
+ cb( error );
}
- if ( this.confCache[prefix || ''] ) {
- this.conf.wiki = this.confCache[prefix || ''];
- cb( null );
- } else {
- var confRequest = new ConfigRequest( confSource, this );
- confRequest.on( 'src', function ( error, resultConf ) {
- var thisuri = confSource;
- if ( !this.conf.parsoid.fetchConfig && uri ) {
- thisuri = uri;
- }
- if ( error === null ) {
- this.conf.wiki = new WikiConfig( resultConf,
prefix, thisuri );
- this.confCache[prefix || ''] = this.conf.wiki;
- }
+ if (!prefix) {
+ console.error("ERROR: No prefix provided!");
+ cb(new Error("Wiki prefix not provided"));
+ return;
+ }
- cb( error );
- }.bind( this ) );
+ var uri = this.conf.parsoid.interwikiMap[prefix];
+ if (!uri) {
+ // SSS: Ugh! Looks like parser tests use a prefix
+ // that is not part of the interwikiMap -- so we
+ // cannot crash with an error. Hence defaulting
+ // to enwiki api which is quite odd. Does the
+ // interwikiMap need updating or is this use-case
+ // valid outside of parserTests??
+ console.error("ERROR: Did not find api uri for " + prefix + ";
defaulting to en");
+ uri = this.conf.parsoid.interwikiMap.en;
+ }
+
+ this.conf.parsoid.apiURI = uri;
+
+ if ( this.confCache[prefix] ) {
+ this.conf.wiki = this.confCache[prefix];
+ cb( null );
+ } else if ( this.conf.parsoid.fetchConfig ) {
+ var confRequest = new ConfigRequest( uri, this );
+ confRequest.on( 'src', setupWikiConfig.bind(null, this, uri));
+ } else {
+ // Load the config from cached config on disk
+ var localConfigFile = './baseconfig/' + prefix + '.json',
+ localConfig = require(localConfigFile);
+
+ if (localConfig && localConfig.query) {
+ setupWikiConfig(this, uri, null, localConfig.query);
+ } else {
+ cb(new Error("Could not read valid config from file: "
+ localConfigFile));
+ }
}
};
--
To view, visit https://gerrit.wikimedia.org/r/68614
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I6fa40c9f4cf4101d041fb0cf584266874d95d199
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: GWicke <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits