r111770 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r111769‎ | r111770 | r111771 >
Date:18:15, 17 February 2012
Author:reedy
Status:ok
Tags:
Comment:
Modified paths:
  • /branches/REL1_19/phase3 (modified) (history)
  • /branches/REL1_19/phase3/includes (modified) (history)
  • /branches/REL1_19/phase3/includes/Cdb_PHP.php (modified) (history)
  • /branches/REL1_19/phase3/includes/OutputPage.php (modified) (history)
  • /branches/REL1_19/phase3/includes/filerepo/backend/SwiftFileBackend.php (modified) (history)
  • /branches/REL1_19/phase3/maintenance/purgeList.php (modified) (history)
  • /branches/REL1_19/phase3/resources/mediawiki/mediawiki.js (modified) (history)

Diff [purge]

Index: branches/REL1_19/phase3/maintenance/purgeList.php
@@ -47,7 +47,7 @@
4848
4949 while ( !feof( $stdin ) ) {
5050 $page = trim( fgets( $stdin ) );
51 - if ( substr( $page, 0, 7 ) == 'http://' ) {
 51+ if ( preg_match( '%^https?://%', $page ) ) {
5252 $urls[] = $page;
5353 } elseif ( $page !== '' ) {
5454 $title = Title::newFromText( $page );
Index: branches/REL1_19/phase3/includes/filerepo/backend/SwiftFileBackend.php
@@ -792,7 +792,11 @@
793793 */
794794 protected function logException( Exception $e, $func, array $params ) {
795795 wfDebugLog( 'SwiftBackend',
796 - get_class( $e ) . " in '{$this->name}': '{$func}' with " . serialize( $params )
 796+ get_class( $e ) . " in '{$func}' (given '" . serialize( $params ) . "')" .
 797+ ( $e instanceof InvalidResponseException
 798+ ? ": {$e->getMessage()}"
 799+ : ""
 800+ )
797801 );
798802 }
799803 }
Index: branches/REL1_19/phase3/includes/OutputPage.php
@@ -2501,7 +2501,7 @@
25022502 * @param $only String ResourceLoaderModule TYPE_ class constant
25032503 * @param $useESI boolean
25042504 * @param $extraQuery Array with extra query parameters to add to each request. array( param => value )
2505 - * @param $loadCall boolean If true, output a mw.loader.load() call rather than a <script src="..."> tag
 2505+ * @param $loadCall boolean If true, output an (asynchronous) mw.loader.load() call rather than a <script src="..."> tag
25062506 * @return string html <script> and <style> tags
25072507 */
25082508 protected function makeResourceLoaderLink( $modules, $only, $useESI = false, array $extraQuery = array(), $loadCall = false ) {
@@ -2644,7 +2644,7 @@
26452645 } else if ( $loadCall ) {
26462646 $link = Html::inlineScript(
26472647 ResourceLoader::makeLoaderConditionalScript(
2648 - Xml::encodeJsCall( 'mw.loader.load', array( $url ) )
 2648+ Xml::encodeJsCall( 'mw.loader.load', array( $url, 'text/javascript', true ) )
26492649 )
26502650 );
26512651 } else {
@@ -2697,7 +2697,7 @@
26982698 if ( $modules ) {
26992699 $scripts .= Html::inlineScript(
27002700 ResourceLoader::makeLoaderConditionalScript(
2701 - Xml::encodeJsCall( 'mw.loader.load', array( $modules, null, true ) )
 2701+ Xml::encodeJsCall( 'mw.loader.load', array( $modules ) )
27022702 )
27032703 );
27042704 }
@@ -2739,7 +2739,7 @@
27402740 if ( $modules ) {
27412741 $scripts .= Html::inlineScript(
27422742 ResourceLoader::makeLoaderConditionalScript(
2743 - Xml::encodeJsCall( 'mw.loader.load', array( $modules ) )
 2743+ Xml::encodeJsCall( 'mw.loader.load', array( $modules, null, true ) )
27442744 )
27452745 );
27462746 }
Property changes on: branches/REL1_19/phase3/includes/OutputPage.php
___________________________________________________________________
Modified: svn:mergeinfo
27472747 Merged /trunk/phase3/includes/OutputPage.php:r111597,111658
Index: branches/REL1_19/phase3/includes/Cdb_PHP.php
@@ -82,6 +82,9 @@
8383 * CDB reader class
8484 */
8585 class CdbReader_PHP extends CdbReader {
 86+ /** The filename */
 87+ var $fileName;
 88+
8689 /** The file handle */
8790 var $handle;
8891
@@ -110,9 +113,10 @@
111114 * @param $fileName string
112115 */
113116 function __construct( $fileName ) {
 117+ $this->fileName = $fileName;
114118 $this->handle = fopen( $fileName, 'rb' );
115119 if ( !$this->handle ) {
116 - throw new MWException( 'Unable to open CDB file "' . $fileName . '"' );
 120+ throw new MWException( 'Unable to open CDB file "' . $this->fileName . '".' );
117121 }
118122 $this->findStart();
119123 }
@@ -160,7 +164,8 @@
161165 protected function read( $length, $pos ) {
162166 if ( fseek( $this->handle, $pos ) == -1 ) {
163167 // This can easily happen if the internal pointers are incorrect
164 - throw new MWException( __METHOD__.': seek failed, file may be corrupted.' );
 168+ throw new MWException(
 169+ 'Seek failed, file "' . $this->fileName . '" may be corrupted.' );
165170 }
166171
167172 if ( $length == 0 ) {
@@ -169,7 +174,8 @@
170175
171176 $buf = fread( $this->handle, $length );
172177 if ( $buf === false || strlen( $buf ) !== $length ) {
173 - throw new MWException( __METHOD__.': read from CDB file failed, file may be corrupted' );
 178+ throw new MWException(
 179+ 'Read from CDB file failed, file "' . $this->fileName . '" may be corrupted.' );
174180 }
175181 return $buf;
176182 }
@@ -182,7 +188,8 @@
183189 protected function unpack31( $s ) {
184190 $data = unpack( 'V', $s );
185191 if ( $data[1] > 0x7fffffff ) {
186 - throw new MWException( __METHOD__.': error in CDB file, integer too big' );
 192+ throw new MWException(
 193+ 'Error in CDB file "' . $this->fileName . '", integer too big.' );
187194 }
188195 return $data[1];
189196 }
@@ -270,13 +277,14 @@
271278 $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
272279 $this->handle = fopen( $this->tmpFileName, 'wb' );
273280 if ( !$this->handle ) {
274 - throw new MWException( 'Unable to open CDB file for write "' . $fileName . '"' );
 281+ $this->throwException(
 282+ 'Unable to open CDB file "' . $this->tmpFileName . '" for write.' );
275283 }
276284 $this->hplist = array();
277285 $this->numentries = 0;
278286 $this->pos = 2048; // leaving space for the pointer array, 256 * 8
279287 if ( fseek( $this->handle, $this->pos ) == -1 ) {
280 - throw new MWException( __METHOD__.': fseek failed' );
 288+ $this->throwException( 'fseek failed in file "' . $this->tmpFileName . '".' );
281289 }
282290 }
283291
@@ -314,7 +322,7 @@
315323 unlink( $this->realFileName );
316324 }
317325 if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
318 - throw new MWException( 'Unable to move the new CDB file into place.' );
 326+ $this->throwException( 'Unable to move the new CDB file into place.' );
319327 }
320328 unset( $this->handle );
321329 }
@@ -326,7 +334,7 @@
327335 protected function write( $buf ) {
328336 $len = fwrite( $this->handle, $buf );
329337 if ( $len !== strlen( $buf ) ) {
330 - throw new MWException( 'Error writing to CDB file.' );
 338+ $this->throwException( 'Error writing to CDB file "'.$this->tmpFileName.'".' );
331339 }
332340 }
333341
@@ -337,7 +345,8 @@
338346 protected function posplus( $len ) {
339347 $newpos = $this->pos + $len;
340348 if ( $newpos > 0x7fffffff ) {
341 - throw new MWException( 'A value in the CDB file is too large' );
 349+ $this->throwException(
 350+ 'A value in the CDB file "'.$this->tmpFileName.'" is too large.' );
342351 }
343352 $this->pos = $newpos;
344353 }
@@ -366,10 +375,10 @@
367376 */
368377 protected function addbegin( $keylen, $datalen ) {
369378 if ( $keylen > 0x7fffffff ) {
370 - throw new MWException( __METHOD__.': key length too long' );
 379+ $this->throwException( 'Key length too long in file "'.$this->tmpFileName.'".' );
371380 }
372381 if ( $datalen > 0x7fffffff ) {
373 - throw new MWException( __METHOD__.': data length too long' );
 382+ $this->throwException( 'Data length too long in file "'.$this->tmpFileName.'".' );
374383 }
375384 $buf = pack( 'VV', $keylen, $datalen );
376385 $this->write( $buf );
@@ -444,8 +453,22 @@
445454 // Write the pointer array at the start of the file
446455 rewind( $this->handle );
447456 if ( ftell( $this->handle ) != 0 ) {
448 - throw new MWException( __METHOD__.': Error rewinding to start of file' );
 457+ $this->throwException( 'Error rewinding to start of file "'.$this->tmpFileName.'".' );
449458 }
450459 $this->write( $final );
451460 }
 461+
 462+ /**
 463+ * Clean up the temp file and throw an exception
 464+ *
 465+ * @param $msg string
 466+ * @throws MWException
 467+ */
 468+ protected function throwException( $msg ) {
 469+ if ( $this->handle ) {
 470+ fclose( $this->handle );
 471+ unlink( $this->tmpFileName );
 472+ }
 473+ throw new MWException( $msg );
 474+ }
452475 }
Property changes on: branches/REL1_19/phase3/includes
___________________________________________________________________
Modified: svn:mergeinfo
453476 Merged /trunk/phase3/includes:r111571,111574,111597,111658
Index: branches/REL1_19/phase3/resources/mediawiki/mediawiki.js
@@ -620,14 +620,14 @@
621621
622622 /**
623623 * Adds a script tag to the DOM, either using document.write or low-level DOM manipulation,
624 - * depending on whether document-ready has occured yet and whether we are in blocking mode.
 624+ * depending on whether document-ready has occured yet and whether we are in async mode.
625625 *
626626 * @param src String: URL to script, will be used as the src attribute in the script tag
627627 * @param callback Function: Optional callback which will be run when the script is done
628628 */
629 - function addScript( src, callback, blocking ) {
 629+ function addScript( src, callback, async ) {
630630 var done = false, script, head;
631 - if ( ready || !blocking ) {
 631+ if ( ready || async ) {
632632 // jQuery's getScript method is NOT better than doing this the old-fashioned way
633633 // because jQuery will eval the script's code, and errors will not have sane
634634 // line numbers.
@@ -738,7 +738,7 @@
739739 callback();
740740 }
741741 };
742 - nestedAddScript = function ( arr, callback, blocking, i ) {
 742+ nestedAddScript = function ( arr, callback, async, i ) {
743743 // Recursively call addScript() in its own callback
744744 // for each element of arr.
745745 if ( i >= arr.length ) {
@@ -748,13 +748,13 @@
749749 }
750750
751751 addScript( arr[i], function() {
752 - nestedAddScript( arr, callback, blocking, i + 1 );
753 - }, blocking );
 752+ nestedAddScript( arr, callback, async, i + 1 );
 753+ }, async );
754754 };
755755
756756 if ( $.isArray( script ) ) {
757757 registry[module].state = 'loading';
758 - nestedAddScript( script, markModuleReady, registry[module].blocking, 0 );
 758+ nestedAddScript( script, markModuleReady, registry[module].async, 0 );
759759 } else if ( $.isFunction( script ) ) {
760760 script( $ );
761761 markModuleReady();
@@ -777,10 +777,10 @@
778778 * @param dependencies string module name or array of string module names
779779 * @param ready function callback to execute when all dependencies are ready
780780 * @param error function callback to execute when any dependency fails
781 - * @param blocking (optional) If true, load modules in a blocking fashion if
782 - * document ready has not yet occurred
 781+ * @param async (optional) If true, load modules asynchronously even if
 782+ * document ready has not yet occurred
783783 */
784 - function request( dependencies, ready, error, blocking ) {
 784+ function request( dependencies, ready, error, async ) {
785785 var regItemDeps, regItemDepLen, n;
786786
787787 // Allow calling by single module name
@@ -812,9 +812,9 @@
813813 for ( n = 0; n < dependencies.length; n += 1 ) {
814814 if ( $.inArray( dependencies[n], queue ) === -1 ) {
815815 queue[queue.length] = dependencies[n];
816 - if ( blocking ) {
817 - // Mark this module as blocking in the registry
818 - registry[dependencies[n]].blocking = true;
 816+ if ( async ) {
 817+ // Mark this module as async in the registry
 818+ registry[dependencies[n]].async = true;
819819 }
820820 }
821821 }
@@ -855,9 +855,9 @@
856856 * @param moduleMap {Object}: Module map, see buildModulesString()
857857 * @param currReqBase {Object}: Object with other parameters (other than 'modules') to use in the request
858858 * @param sourceLoadScript {String}: URL of load.php
859 - * @param blocking {Boolean}: If true, use a blocking request if document ready has not yet occurred
 859+ * @param async {Boolean}: If true, use an asynchrounous request even if document ready has not yet occurred
860860 */
861 - function doRequest( moduleMap, currReqBase, sourceLoadScript, blocking ) {
 861+ function doRequest( moduleMap, currReqBase, sourceLoadScript, async ) {
862862 var request = $.extend(
863863 { 'modules': buildModulesString( moduleMap ) },
864864 currReqBase
@@ -865,7 +865,7 @@
866866 request = sortQuery( request );
867867 // Asynchronously append a script tag to the end of the body
868868 // Append &* to avoid triggering the IE6 extension check
869 - addScript( sourceLoadScript + '?' + $.param( request ) + '&*', null, blocking );
 869+ addScript( sourceLoadScript + '?' + $.param( request ) + '&*', null, async );
870870 }
871871
872872 /* Public Methods */
@@ -877,7 +877,7 @@
878878 var reqBase, splits, maxQueryLength, q, b, bSource, bGroup, bSourceGroup,
879879 source, group, g, i, modules, maxVersion, sourceLoadScript,
880880 currReqBase, currReqBaseLength, moduleMap, l,
881 - lastDotIndex, prefix, suffix, bytesAdded, blocking;
 881+ lastDotIndex, prefix, suffix, bytesAdded, async;
882882
883883 // Build a list of request parameters common to all requests.
884884 reqBase = {
@@ -954,7 +954,7 @@
955955
956956 currReqBase = $.extend( { 'version': formatVersionNumber( maxVersion ) }, reqBase );
957957 currReqBaseLength = $.param( currReqBase ).length;
958 - blocking = false;
 958+ async = true;
959959 // We may need to split up the request to honor the query string length limit,
960960 // so build it piece by piece.
961961 l = currReqBaseLength + 9; // '&modules='.length == 9
@@ -976,26 +976,26 @@
977977 if ( maxQueryLength > 0 && !$.isEmptyObject( moduleMap ) && l + bytesAdded > maxQueryLength ) {
978978 // This request would become too long, create a new one
979979 // and fire off the old one
980 - doRequest( moduleMap, currReqBase, sourceLoadScript, blocking );
 980+ doRequest( moduleMap, currReqBase, sourceLoadScript, async );
981981 moduleMap = {};
982 - blocking = false;
 982+ async = true;
983983 l = currReqBaseLength + 9;
984984 }
985985 if ( moduleMap[prefix] === undefined ) {
986986 moduleMap[prefix] = [];
987987 }
988988 moduleMap[prefix].push( suffix );
989 - if ( registry[modules[i]].blocking ) {
 989+ if ( !registry[modules[i]].async ) {
990990 // If this module is blocking, make the entire request blocking
991991 // This is slightly suboptimal, but in practice mixing of blocking
992 - // and non-blocking modules will only occur in debug mode.
993 - blocking = true;
 992+ // and async modules will only occur in debug mode.
 993+ async = false;
994994 }
995995 l += bytesAdded;
996996 }
997997 // If there's anything left in moduleMap, request that too
998998 if ( !$.isEmptyObject( moduleMap ) ) {
999 - doRequest( moduleMap, currReqBase, sourceLoadScript, blocking );
 999+ doRequest( moduleMap, currReqBase, sourceLoadScript, async );
10001000 }
10011001 }
10021002 }
@@ -1177,10 +1177,11 @@
11781178 * @param type {String} mime-type to use if calling with a URL of an
11791179 * external script or style; acceptable values are "text/css" and
11801180 * "text/javascript"; if no type is provided, text/javascript is assumed.
1181 - * @param blocking {Boolean} (optional) If true, load modules in a blocking
1182 - * fashion if document ready has not yet occurred
 1181+ * @param async {Boolean} (optional) If true, load modules asynchronously
 1182+ * even if document ready has not yet occurred. If false (default),
 1183+ * block before document ready and load async after
11831184 */
1184 - load: function ( modules, type, blocking ) {
 1185+ load: function ( modules, type, async ) {
11851186 var filtered, m;
11861187
11871188 // Validate input
@@ -1199,7 +1200,7 @@
12001201 } ) );
12011202 return;
12021203 } else if ( type === 'text/javascript' || type === undefined ) {
1203 - addScript( modules, null, blocking );
 1204+ addScript( modules, null, async );
12041205 return;
12051206 }
12061207 // Unknown type
@@ -1232,7 +1233,7 @@
12331234 }
12341235 // Since some modules are not yet ready, queue up a request
12351236 else {
1236 - request( filtered, null, null, blocking );
 1237+ request( filtered, null, null, async );
12371238 return;
12381239 }
12391240 },
Property changes on: branches/REL1_19/phase3
___________________________________________________________________
Modified: svn:mergeinfo
12401241 Merged /trunk/phase3:r111478,111571,111574,111597,111658

Past revisions this follows-up on

RevisionCommit summaryAuthorDate
r111478enable purge of HTTPS URLshashar20:20, 14 February 2012
r111571Put the filename in more of the exceptions thrownaaron20:06, 15 February 2012
r111574Delete the temp cdb file when an exception is thrown so they don't take up /t...aaron20:24, 15 February 2012
r111597Followup r110592: rename 'blocking' to 'async', and invert the logic everywhe...catrope23:38, 15 February 2012
r111658Improve error log formatting and added error message info for InvalidResponse...aaron18:22, 16 February 2012

Status & tagging log