123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 'use strict'
- const fs = require('fs')
- const util = require('util')
- const chmod = util.promisify(fs.chmod)
- const unlink = util.promisify(fs.unlink)
- const stat = util.promisify(fs.stat)
- const move = require('@npmcli/move-file')
- const pinflight = require('promise-inflight')
- module.exports = moveFile
- function moveFile (src, dest) {
- const isWindows = global.__CACACHE_TEST_FAKE_WINDOWS__ ||
- process.platform === 'win32'
-
-
-
-
-
-
-
-
-
- return new Promise((resolve, reject) => {
- fs.link(src, dest, (err) => {
- if (err) {
- if (isWindows && err.code === 'EPERM') {
-
-
-
-
-
-
-
- return resolve()
- } else if (err.code === 'EEXIST' || err.code === 'EBUSY') {
-
- return resolve()
- } else {
- return reject(err)
- }
- } else {
- return resolve()
- }
- })
- })
- .then(() => {
-
- return Promise.all([
- unlink(src),
- !isWindows && chmod(dest, '0444')
- ])
- })
- .catch(() => {
- return pinflight('cacache-move-file:' + dest, () => {
- return stat(dest).catch((err) => {
- if (err.code !== 'ENOENT') {
-
- throw err
- }
-
-
- return move(src, dest)
- })
- })
- })
- }
|