From 0a3b867c44a0abd4786383bfe8234abcd3f032d5 Mon Sep 17 00:00:00 2001 From: dfreire Date: Thu, 7 Jun 2018 20:11:22 +0100 Subject: [PATCH 1/2] Fixes #558 - Node.js rename file doesn't work if oldPath and newPath are in different partitions --- lib/store.js | 26 +++++++++++++++++++++++++- package-lock.json | 4 ++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/store.js b/lib/store.js index 359c8607..f4d41e38 100644 --- a/lib/store.js +++ b/lib/store.js @@ -63,7 +63,7 @@ function Store(opt){ var random = Math.random().toString(36).slice(-3) fs.writeFile(opt.file+'-'+random+'.tmp', data, function(err, ok){ if(err){ return cb(err) } - fs.rename(opt.file+'-'+random+'.tmp', opt.file+'/'+file, cb); + move(opt.file+'-'+random+'.tmp', opt.file+'/'+file, cb); }); }; store.get = function(file, cb){ @@ -88,6 +88,30 @@ function Store(opt){ return store; } +function move(oldPath, newPath, cb) { + fs.rename(oldPath, newPath, function (err) { + if (err) { + if (err.code === 'EXDEV') { + var readStream = fs.createReadStream(oldPath); + var writeStream = fs.createWriteStream(newPath); + + readStream.on('error', cb); + writeStream.on('error', cb); + + readStream.on('close', function () { + fs.unlink(oldPath, cb); + }); + + readStream.pipe(writeStream); + } else { + cb(err); + } + } else { + cb(); + } + }); +}; + module.exports = Store; diff --git a/package-lock.json b/package-lock.json index 7c7c8f9e..b7bac4a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "gun", - "version": "0.9.996", + "name": "custom-gun", + "version": "0.9.99801", "lockfileVersion": 1, "requires": true, "dependencies": { From 1219a8268a9afa8a71062b7e5e488380ee6885af Mon Sep 17 00:00:00 2001 From: dfreire Date: Thu, 7 Jun 2018 20:33:51 +0100 Subject: [PATCH 2/2] Fixes #558 (indent with tabs) --- lib/store.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/store.js b/lib/store.js index f4d41e38..bdf031e2 100644 --- a/lib/store.js +++ b/lib/store.js @@ -89,27 +89,27 @@ function Store(opt){ } function move(oldPath, newPath, cb) { - fs.rename(oldPath, newPath, function (err) { - if (err) { - if (err.code === 'EXDEV') { + fs.rename(oldPath, newPath, function (err) { + if (err) { + if (err.code === 'EXDEV') { var readStream = fs.createReadStream(oldPath); var writeStream = fs.createWriteStream(newPath); - + readStream.on('error', cb); writeStream.on('error', cb); - + readStream.on('close', function () { fs.unlink(oldPath, cb); }); - + readStream.pipe(writeStream); - } else { - cb(err); - } - } else { + } else { + cb(err); + } + } else { cb(); } - }); + }); }; module.exports = Store;