123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 'use strict'
-
- const fs = require('graceful-fs')
- const BB = require('bluebird')
- const chmod = BB.promisify(fs.chmod)
- const unlink = BB.promisify(fs.unlink)
- let move
- let pinflight
-
- module.exports = moveFile
- function moveFile (src, dest) {
-
-
-
-
-
-
-
-
-
- return BB.fromNode(cb => {
- fs.link(src, dest, err => {
- if (err) {
- if (err.code === 'EEXIST' || err.code === 'EBUSY') {
-
- } else if (err.code === 'EPERM' && process.platform === 'win32') {
-
- } else {
- return cb(err)
- }
- }
- return cb()
- })
- }).then(() => {
-
- return BB.join(unlink(src), process.platform !== 'win32' && chmod(dest, '0444'))
- }).catch(() => {
- if (!pinflight) { pinflight = require('promise-inflight') }
- return pinflight('cacache-move-file:' + dest, () => {
- return BB.promisify(fs.stat)(dest).catch(err => {
- if (err.code !== 'ENOENT') {
-
- throw err
- }
-
- if (!move) { move = require('move-concurrently') }
- return move(src, dest, { BB, fs })
- })
- })
- })
- }
|