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

Reply via email to