You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					48 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					48 lines
				
				1.2 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const fs = require('graceful-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 |