mirror of
https://github.com/jprichardson/node-fs-extra.git
synced 2026-01-25 16:42:57 +00:00
* Remove secure-random from dev-deps (#610) * fix ensureDir() doc * moveSync: refactor to use renameSync * copy*(): fix copying bind-mounted directories (#618) * copy*(): fix copying bind-mounted dirs * copy*(): fix case-insensitive-paths tests * copy*(): refactor to check paths more efficiently * destructure stats object after checking err * move*(): check paths before moving * move*(): add case-insensitive paths test * remove unnecessary done callback from test * copy*(): add new option checkPathsBeforeCopying * update copy*() docs to include checkPathsBeforeCopying * some reformatting * copy*(): use fs.stat with bigint option * move*(): refactor to use the internal stat functions * move*(): add test for prevent moving identical * disable graceful-fs in copy and move tests * fix parsing node version * tiny reformat * update copy*() docs * refactor parsing node version * use semver to parse node version in tests
50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
'use strict'
|
|
|
|
// TODO: enable this once graceful-fs supports bigint option.
|
|
// const fs = require('graceful-fs')
|
|
const fs = require('fs')
|
|
const path = require('path')
|
|
const copySync = require('../copy-sync').copySync
|
|
const removeSync = require('../remove').removeSync
|
|
const mkdirpSync = require('../mkdirs').mkdirpSync
|
|
const stat = require('../util/stat')
|
|
|
|
function moveSync (src, dest, opts) {
|
|
opts = opts || {}
|
|
const overwrite = opts.overwrite || opts.clobber || false
|
|
|
|
const { srcStat } = stat.checkPathsSync(src, dest, 'move')
|
|
stat.checkParentPathsSync(src, srcStat, dest, 'move')
|
|
mkdirpSync(path.dirname(dest))
|
|
return doRename(src, dest, overwrite)
|
|
}
|
|
|
|
function doRename (src, dest, overwrite) {
|
|
if (overwrite) {
|
|
removeSync(dest)
|
|
return rename(src, dest, overwrite)
|
|
}
|
|
if (fs.existsSync(dest)) throw new Error('dest already exists.')
|
|
return rename(src, dest, overwrite)
|
|
}
|
|
|
|
function rename (src, dest, overwrite) {
|
|
try {
|
|
fs.renameSync(src, dest)
|
|
} catch (err) {
|
|
if (err.code !== 'EXDEV') throw err
|
|
return moveAcrossDevice(src, dest, overwrite)
|
|
}
|
|
}
|
|
|
|
function moveAcrossDevice (src, dest, overwrite) {
|
|
const opts = {
|
|
overwrite,
|
|
errorOnExist: true
|
|
}
|
|
copySync(src, dest, opts)
|
|
return removeSync(src)
|
|
}
|
|
|
|
module.exports = moveSync
|