summaryrefslogtreecommitdiff
path: root/node_modules/graceful-fs/polyfills.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/graceful-fs/polyfills.js')
-rw-r--r--node_modules/graceful-fs/polyfills.js12
1 files changed, 10 insertions, 2 deletions
diff --git a/node_modules/graceful-fs/polyfills.js b/node_modules/graceful-fs/polyfills.js
index ab6b32b67..4c6aca78a 100644
--- a/node_modules/graceful-fs/polyfills.js
+++ b/node_modules/graceful-fs/polyfills.js
@@ -3,6 +3,9 @@ var constants = require('constants')
var origCwd = process.cwd
var cwd = null
+
+var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform
+
process.cwd = function() {
if (!cwd)
cwd = origCwd.call(process)
@@ -87,7 +90,7 @@ function patch (fs) {
// failures. Also, take care to yield the scheduler. Windows scheduling gives
// CPU to a busy looping process, which can cause the program causing the lock
// contention to be starved of CPU by node, so the contention doesn't resolve.
- if (process.platform === "win32") {
+ if (platform === "win32") {
fs.rename = (function (fs$rename) { return function (from, to, cb) {
var start = Date.now()
var backoff = 0;
@@ -96,7 +99,12 @@ function patch (fs) {
&& (er.code === "EACCES" || er.code === "EPERM")
&& Date.now() - start < 60000) {
setTimeout(function() {
- fs$rename(from, to, CB);
+ fs.stat(to, function (stater, st) {
+ if (stater && stater.code === "ENOENT")
+ fs$rename(from, to, CB);
+ else
+ cb(er)
+ })
}, backoff)
if (backoff < 100)
backoff += 10;