diff --git a/docs/changelog.md b/docs/changelog.md index f3b5eff71..2d64ce870 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,11 @@ Requires libvips v8.6.1. +#### v0.20.7 - TBD + +* Use copy+unlink if rename operation fails during installation. + [#1345](https://github.com/lovell/sharp/issues/1345) + #### v0.20.6 - 20th August 2018 * Add removeAlpha operation to remove alpha channel, if any. diff --git a/install/libvips.js b/install/libvips.js index 3f9c829e9..5ffae9308 100644 --- a/install/libvips.js +++ b/install/libvips.js @@ -9,6 +9,7 @@ const npmLog = require('npmlog'); const semver = require('semver'); const simpleGet = require('simple-get'); const tar = require('tar'); +const copyFileSync = require('fs-copy-file-sync'); const agent = require('../lib/agent'); const libvips = require('../lib/libvips'); @@ -82,7 +83,14 @@ try { response.pipe(tmpFile); }); tmpFile.on('close', function () { - fs.renameSync(tarPathTemp, tarPathCache); + try { + // Attempt to rename + fs.renameSync(tarPathTemp, tarPathCache); + } catch (err) { + // Fall back to copy and unlink + copyFileSync(tarPathTemp, tarPathCache); + fs.unlinkSync(tarPathTemp); + } extractTarball(tarPathCache); }); }