mirror of
https://github.com/nodejs/node.git
synced 2025-05-01 08:42:45 +00:00

This pull request makes fs.watch throw exception, whenever it is used in an incompatible platform. For this change following changes were made to api: 1.a new error type has been introduced. 2.fs.watch has been changed accordingly. Users who use recursive on non-windows and osx platforms, will face a new exception. For this reason, it's a breaking change. Fixes: https://github.com/nodejs/node/issues/29901 PR-URL: https://github.com/nodejs/node/pull/29947 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
|
|
|
|
const assert = require('assert');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
const tmpdir = require('../common/tmpdir');
|
|
|
|
const testDir = tmpdir.path;
|
|
const filenameOne = 'watch.txt';
|
|
|
|
tmpdir.refresh();
|
|
|
|
const testsubdir = fs.mkdtempSync(testDir + path.sep);
|
|
const relativePathOne = path.join(path.basename(testsubdir), filenameOne);
|
|
const filepathOne = path.join(testsubdir, filenameOne);
|
|
|
|
if (!common.isOSX && !common.isWindows) {
|
|
assert.throws(() => { fs.watch(testDir, { recursive: true }); },
|
|
{ code: 'ERR_FEATURE_UNAVAILABLE_ON_PLATFORM' });
|
|
return;
|
|
}
|
|
const watcher = fs.watch(testDir, { recursive: true });
|
|
|
|
let watcherClosed = false;
|
|
watcher.on('change', function(event, filename) {
|
|
assert.ok(event === 'change' || event === 'rename');
|
|
|
|
// Ignore stale events generated by mkdir and other tests
|
|
if (filename !== relativePathOne)
|
|
return;
|
|
|
|
if (common.isOSX) {
|
|
clearInterval(interval);
|
|
}
|
|
watcher.close();
|
|
watcherClosed = true;
|
|
});
|
|
|
|
let interval;
|
|
if (common.isOSX) {
|
|
interval = setInterval(function() {
|
|
fs.writeFileSync(filepathOne, 'world');
|
|
}, 10);
|
|
} else {
|
|
fs.writeFileSync(filepathOne, 'world');
|
|
}
|
|
|
|
process.on('exit', function() {
|
|
assert(watcherClosed, 'watcher Object was not closed');
|
|
});
|