From: Lee Bousfield Date: Thu, 4 Feb 2016 20:12:41 +0000 (-0700) Subject: resourceloader: Log each deprecation only once from mw.log.deprecate X-Git-Tag: 1.31.0-rc.0~6231 X-Git-Url: https://git.cyclocoop.org/%28%28?a=commitdiff_plain;h=4a09161a2fb6ce7ddf9e068ef82dafd30d3b4429;p=lhc%2Fweb%2Fwiklou.git resourceloader: Log each deprecation only once from mw.log.deprecate Bug: T100412 Change-Id: I0111f0ed84b74774b6665aca2625d07ea53cfc8c --- diff --git a/resources/src/mediawiki/mediawiki.js b/resources/src/mediawiki/mediawiki.js index 942f4aebfa..3600000a70 100644 --- a/resources/src/mediawiki/mediawiki.js +++ b/resources/src/mediawiki/mediawiki.js @@ -660,18 +660,47 @@ log.deprecate = !Object.defineProperty ? function ( obj, key, val ) { obj[ key ] = val; } : function ( obj, key, val, msg ) { + /*globals Set */ msg = 'Use of "' + key + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' ); + var logged, loggedIsSet, uniqueTrace; + if ( window.Set ) { + logged = new Set(); + loggedIsSet = true; + } else { + logged = {}; + loggedIsSet = false; + } + uniqueTrace = function () { + var trace = new Error().stack; + if ( loggedIsSet ) { + if ( logged.has( trace ) ) { + return false; + } + logged.add( trace ); + return true; + } else { + if ( logged.hasOwnProperty( trace ) ) { + return false; + } + logged[ trace ] = 1; + return true; + } + }; Object.defineProperty( obj, key, { configurable: true, enumerable: true, get: function () { - mw.track( 'mw.deprecate', key ); - mw.log.warn( msg ); + if ( uniqueTrace() ) { + mw.track( 'mw.deprecate', key ); + mw.log.warn( msg ); + } return val; }, set: function ( newVal ) { - mw.track( 'mw.deprecate', key ); - mw.log.warn( msg ); + if ( uniqueTrace() ) { + mw.track( 'mw.deprecate', key ); + mw.log.warn( msg ); + } val = newVal; } } );