Subramanya Sastry has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/68614


Change subject: WIP: Cleanup switchToConfig + bug fix in removeInterwiki
......................................................................

WIP: 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.

* Currently some tests fail (because we dont have a local config
  for the be-tarask prefix wiki).

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, 34 insertions(+), 36 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid 
refs/changes/14/68614/1

diff --git a/js/lib/mediawiki.ApiRequest.js b/js/lib/mediawiki.ApiRequest.js
index e5ce2ca..39e0917 100644
--- a/js/lib/mediawiki.ApiRequest.js
+++ b/js/lib/mediawiki.ApiRequest.js
@@ -556,15 +556,6 @@
 var ConfigRequest = function ( confSource, 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'
                ],
diff --git a/js/lib/mediawiki.ParsoidConfig.js 
b/js/lib/mediawiki.ParsoidConfig.js
index 37e682a..81b616b 100644
--- a/js/lib/mediawiki.ParsoidConfig.js
+++ b/js/lib/mediawiki.ParsoidConfig.js
@@ -81,7 +81,7 @@
 ParsoidConfig.prototype.removeInterwiki = function ( prefix ) {
        delete this.interwikiMap[prefix];
        this.interwikiRegexp = this.interwikiRegexp.replace(
-               new RegExp( '\\|' + prefix + '\\|' ), '|' );
+               new RegExp( '\\|' + prefix + '|' + prefix + '\\|' ), '' );
 };
 
 /**
diff --git a/js/lib/mediawiki.parser.environment.js 
b/js/lib/mediawiki.parser.environment.js
index ccfbbdf..cf44572 100644
--- a/js/lib/mediawiki.parser.environment.js
+++ b/js/lib/mediawiki.parser.environment.js
@@ -281,36 +281,43 @@
  * @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) {
+               cb(new Error("Wiki prefix not provided"));
+       }
 
-                       cb( error );
-               }.bind( this ) );
+       var uri = this.conf.parsoid.interwikiMap[prefix];
+       if (!uri) {
+               cb(new Error("No API URI available for prefix: " + prefix));
+       }
+
+       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: newchange
Gerrit-Change-Id: I6fa40c9f4cf4101d041fb0cf584266874d95d199
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>

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

Reply via email to