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
						
					
					
				| '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
 |