fs: deprecate exists() and existsSync()

These methods don't follow standard conventions, and shouldn't
be used anyway.

Fixes: https://github.com/iojs/io.js/issues/103
PR-URL: https://github.com/iojs/io.js/pull/166
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
cjihrig 2014-12-15 13:58:37 -05:00
parent a5532674b0
commit 5678595856
9 changed files with 37 additions and 22 deletions

View File

@ -56,7 +56,7 @@ function measure(n) {
} }
function rmrf(location) { function rmrf(location) {
if (fs.existsSync(location)) { try {
var things = fs.readdirSync(location); var things = fs.readdirSync(location);
things.forEach(function(thing) { things.forEach(function(thing) {
var cur = path.join(location, thing), var cur = path.join(location, thing),
@ -68,5 +68,7 @@ function rmrf(location) {
fs.unlinkSync(cur); fs.unlinkSync(cur);
}); });
fs.rmdirSync(location); fs.rmdirSync(location);
} catch (err) {
// Ignore error
} }
} }

View File

@ -656,13 +656,13 @@ that leaves you vulnerable to race conditions: another process may remove the
file between the calls to `fs.exists()` and `fs.open()`. Just open the file file between the calls to `fs.exists()` and `fs.open()`. Just open the file
and handle the error when it's not there. and handle the error when it's not there.
`fs.exists()` will be deprecated. `fs.exists()` is **deprecated**.
## fs.existsSync(path) ## fs.existsSync(path)
Synchronous version of `fs.exists`. Synchronous version of `fs.exists`.
`fs.existsSync()` will be deprecated. `fs.existsSync()` is **deprecated**.
## fs.access(path[, mode], callback) ## fs.access(path[, mode], callback)

View File

@ -220,7 +220,7 @@ fs.accessSync = function(path, mode) {
binding.access(pathModule._makeLong(path), mode); binding.access(pathModule._makeLong(path), mode);
}; };
fs.exists = function(path, callback) { fs.exists = util.deprecate(function(path, callback) {
if (!nullCheck(path, cb)) return; if (!nullCheck(path, cb)) return;
var req = new FSReqWrap(); var req = new FSReqWrap();
req.oncomplete = cb; req.oncomplete = cb;
@ -228,9 +228,9 @@ fs.exists = function(path, callback) {
function cb(err, stats) { function cb(err, stats) {
if (callback) callback(err ? false : true); if (callback) callback(err ? false : true);
} }
}; }, 'fs.exists() is deprecated. Use fs.access() instead.');
fs.existsSync = function(path) { fs.existsSync = util.deprecate(function(path) {
try { try {
nullCheck(path); nullCheck(path);
binding.stat(pathModule._makeLong(path)); binding.stat(pathModule._makeLong(path));
@ -238,7 +238,7 @@ fs.existsSync = function(path) {
} catch (e) { } catch (e) {
return false; return false;
} }
}; }, 'fs.existsSync() is deprecated. Use fs.accessSync() instead.');
fs.readFile = function(path, options, callback_) { fs.readFile = function(path, options, callback_) {
var callback = maybeCallback(arguments[arguments.length - 1]); var callback = maybeCallback(arguments[arguments.length - 1]);

View File

@ -58,8 +58,11 @@ if (process.env.NODE_COMMON_PIPE) {
} }
} }
if (!fs.existsSync(exports.opensslCli)) try {
fs.accessSync(exports.opensslCli);
} catch (err) {
exports.opensslCli = false; exports.opensslCli = false;
}
if (process.platform === 'win32') { if (process.platform === 'win32') {
exports.faketimeCli = false; exports.faketimeCli = false;
@ -319,3 +322,12 @@ exports.isValidHostname = function(str) {
return !!str.match(re) && str.length <= 255; return !!str.match(re) && str.length <= 255;
} }
exports.fileExists = function(pathname) {
try {
fs.accessSync(pathname);
return true;
} catch (err) {
return false;
}
};

View File

@ -19,6 +19,7 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE. // USE OR OTHER DEALINGS IN THE SOFTWARE.
var common = require('../common');
var fs = require('fs'); var fs = require('fs');
var spawn = require('child_process').spawn; var spawn = require('child_process').spawn;
var assert = require('assert'); var assert = require('assert');
@ -26,7 +27,7 @@ var assert = require('assert');
var errors = 0; var errors = 0;
var enoentPath = 'foo123'; var enoentPath = 'foo123';
assert.equal(fs.existsSync(enoentPath), false); assert.equal(common.fileExists(enoentPath), false);
var enoentChild = spawn(enoentPath); var enoentChild = spawn(enoentPath);
enoentChild.on('error', function (err) { enoentChild.on('error', function (err) {

View File

@ -38,7 +38,7 @@ function unlink(pathname) {
fs.mkdir(pathname, function(err) { fs.mkdir(pathname, function(err) {
assert.equal(err, null); assert.equal(err, null);
assert.equal(fs.existsSync(pathname), true); assert.equal(common.fileExists(pathname), true);
ncalls++; ncalls++;
}); });
@ -56,7 +56,7 @@ function unlink(pathname) {
fs.mkdir(pathname, 511 /*=0777*/, function(err) { fs.mkdir(pathname, 511 /*=0777*/, function(err) {
assert.equal(err, null); assert.equal(err, null);
assert.equal(fs.existsSync(pathname), true); assert.equal(common.fileExists(pathname), true);
ncalls++; ncalls++;
}); });
@ -72,7 +72,7 @@ function unlink(pathname) {
unlink(pathname); unlink(pathname);
fs.mkdirSync(pathname); fs.mkdirSync(pathname);
var exists = fs.existsSync(pathname); var exists = common.fileExists(pathname);
unlink(pathname); unlink(pathname);
assert.equal(exists, true); assert.equal(exists, true);

View File

@ -54,8 +54,8 @@ fs.symlink(linkData, linkPath, 'junction', function(err) {
fs.unlink(linkPath, function(err) { fs.unlink(linkPath, function(err) {
if (err) throw err; if (err) throw err;
assert(!fs.existsSync(linkPath)); assert(!common.fileExists(linkPath));
assert(fs.existsSync(linkData)); assert(common.fileExists(linkData));
completed++; completed++;
}); });
}); });

View File

@ -40,14 +40,14 @@ fs.watchFile(FILENAME, {interval:TIMEOUT - 250}, function(curr, prev) {
console.log([curr, prev]); console.log([curr, prev]);
switch (++nevents) { switch (++nevents) {
case 1: case 1:
assert.equal(fs.existsSync(FILENAME), false); assert.equal(common.fileExists(FILENAME), false);
break; break;
case 2: case 2:
case 3: case 3:
assert.equal(fs.existsSync(FILENAME), true); assert.equal(common.fileExists(FILENAME), true);
break; break;
case 4: case 4:
assert.equal(fs.existsSync(FILENAME), false); assert.equal(common.fileExists(FILENAME), false);
fs.unwatchFile(FILENAME); fs.unwatchFile(FILENAME);
break; break;
default: default:

View File

@ -44,17 +44,17 @@ for (var i = 0; i < 50; i++) {
} }
// Test existsSync // Test existsSync
var r = fs.existsSync(dir); var r = common.fileExists(dir);
if (r !== true) { if (r !== true) {
cleanup(); cleanup();
throw new Error('fs.existsSync returned false'); throw new Error('fs.accessSync returned false');
} }
// Text exists // Text exists
fs.exists(dir, function(r) { fs.access(dir, function(err) {
cleanup(); cleanup();
if (r !== true) { if (err) {
throw new Error('fs.exists reported false'); throw new Error('fs.access reported false');
} }
}); });