Skip to content

Commit

Permalink
util: adhere to noDeprecation set at runtime
Browse files Browse the repository at this point in the history
Until now, the docs stated that `process.noDeprecation` could be set
at runtime, but before any modules were loaded. That was not true,
because `lib/internal/util.js` was loaded during the process startup
process, so setting the flag at runtime was pointless.

Minimal test case:

    process.noDeprecation = true;
    process.EventEmitter;

This patch moves checking `process.noDeprecation` to the place where
it was actually used.

PR-URL: #6683
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information
addaleax authored and evanlucas committed May 17, 2016
1 parent 3af9382 commit 1d6c17e
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 5 deletions.
6 changes: 3 additions & 3 deletions doc/api/util.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ exports.puts = util.deprecate(() => {

It returns a modified function which warns once by default.

If `--no-deprecation` is set then this function is a NO-OP. Configurable
at run-time through the `process.noDeprecation` boolean (only effective
when set before a module is loaded.)
This function does nothing if either the `--no-deprecation` command
line flag is used, or the `process.noDeprecation` property is set to
`true` *prior* to the first deprecation warning.

If `--trace-deprecation` is set, a warning and a stack trace are logged
to the console the first time the deprecated API is used. Configurable
Expand Down
3 changes: 1 addition & 2 deletions lib/internal/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

const binding = process.binding('util');
const prefix = `(${process.release.name}:${process.pid}) `;
const noDeprecation = process.noDeprecation;

exports.getHiddenValue = binding.getHiddenValue;
exports.setHiddenValue = binding.setHiddenValue;
Expand All @@ -16,7 +15,7 @@ exports.deprecate = function(fn, msg) {
// All the internal deprecations have to use this function only, as this will
// prepend the prefix to the actual message.
exports.printDeprecationMessage = function(msg, warned, ctor) {
if (warned || noDeprecation)
if (warned || process.noDeprecation)
return true;
process.emitWarning(msg, 'DeprecationWarning',
ctor || exports.printDeprecationMessage);
Expand Down
33 changes: 33 additions & 0 deletions test/parallel/test-process-no-deprecation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
'use strict';
// Flags: --expose_internals --no-warnings

// The --no-warnings flag only supresses writing the warning to stderr, not the
// emission of the corresponding event. This test file can be run without it.

process.noDeprecation = true;

const common = require('../common');
const assert = require('assert');

function listener() {
common.fail('received unexpected warning');
}

process.addListener('warning', listener);

const internalUtil = require('internal/util');
internalUtil.printDeprecationMessage('Something is deprecated.');

// The warning would be emitted in the next tick, so continue after that.
process.nextTick(common.mustCall(() => {
// Check that deprecations can be re-enabled.
process.noDeprecation = false;
process.removeListener('warning', listener);

process.addListener('warning', common.mustCall((warning) => {
assert.strictEqual(warning.name, 'DeprecationWarning');
assert.strictEqual(warning.message, 'Something else is deprecated.');
}));

internalUtil.printDeprecationMessage('Something else is deprecated.');
}));

0 comments on commit 1d6c17e

Please sign in to comment.