3
3
const fs = require ( '../fs' )
4
4
const path = require ( 'path' )
5
5
const util = require ( 'util' )
6
- const atLeastNode = require ( 'at-least-node' )
7
-
8
- const nodeSupportsBigInt = atLeastNode ( '10.5.0' )
9
- const stat = ( file ) => nodeSupportsBigInt ? fs . stat ( file , { bigint : true } ) : fs . stat ( file )
10
- const lstat = ( file ) => nodeSupportsBigInt ? fs . lstat ( file , { bigint : true } ) : fs . lstat ( file )
11
- const statSync = ( file ) => nodeSupportsBigInt ? fs . statSync ( file , { bigint : true } ) : fs . statSync ( file )
12
- const lstatSync = ( file ) => nodeSupportsBigInt ? fs . lstatSync ( file , { bigint : true } ) : fs . lstatSync ( file )
13
6
14
7
function getStats ( src , dest , opts ) {
15
- const statFunc = opts . dereference ? stat : lstat
8
+ const statFunc = opts . dereference
9
+ ? ( file ) => fs . stat ( file , { bigint : true } )
10
+ : ( file ) => fs . lstat ( file , { bigint : true } )
16
11
return Promise . all ( [
17
12
statFunc ( src ) ,
18
13
statFunc ( dest ) . catch ( err => {
@@ -24,7 +19,9 @@ function getStats (src, dest, opts) {
24
19
25
20
function getStatsSync ( src , dest , opts ) {
26
21
let destStat
27
- const statFunc = opts . dereference ? statSync : lstatSync
22
+ const statFunc = opts . dereference
23
+ ? ( file ) => fs . statSync ( file , { bigint : true } )
24
+ : ( file ) => fs . lstatSync ( file , { bigint : true } )
28
25
const srcStat = statFunc ( src )
29
26
try {
30
27
destStat = statFunc ( dest )
@@ -102,7 +99,7 @@ function checkParentPaths (src, srcStat, dest, funcName, cb) {
102
99
const srcParent = path . resolve ( path . dirname ( src ) )
103
100
const destParent = path . resolve ( path . dirname ( dest ) )
104
101
if ( destParent === srcParent || destParent === path . parse ( destParent ) . root ) return cb ( )
105
- const callback = ( err , destStat ) => {
102
+ fs . stat ( destParent , { bigint : true } , ( err , destStat ) => {
106
103
if ( err ) {
107
104
if ( err . code === 'ENOENT' ) return cb ( )
108
105
return cb ( err )
@@ -111,9 +108,7 @@ function checkParentPaths (src, srcStat, dest, funcName, cb) {
111
108
return cb ( new Error ( errMsg ( src , dest , funcName ) ) )
112
109
}
113
110
return checkParentPaths ( src , srcStat , destParent , funcName , cb )
114
- }
115
- if ( nodeSupportsBigInt ) fs . stat ( destParent , { bigint : true } , callback )
116
- else fs . stat ( destParent , callback )
111
+ } )
117
112
}
118
113
119
114
function checkParentPathsSync ( src , srcStat , dest , funcName ) {
@@ -122,7 +117,7 @@ function checkParentPathsSync (src, srcStat, dest, funcName) {
122
117
if ( destParent === srcParent || destParent === path . parse ( destParent ) . root ) return
123
118
let destStat
124
119
try {
125
- destStat = statSync ( destParent )
120
+ destStat = fs . statSync ( destParent , { bigint : true } )
126
121
} catch ( err ) {
127
122
if ( err . code === 'ENOENT' ) return
128
123
throw err
@@ -134,26 +129,7 @@ function checkParentPathsSync (src, srcStat, dest, funcName) {
134
129
}
135
130
136
131
function areIdentical ( srcStat , destStat ) {
137
- if ( destStat . ino && destStat . dev && destStat . ino === srcStat . ino && destStat . dev === srcStat . dev ) {
138
- if ( nodeSupportsBigInt || destStat . ino < Number . MAX_SAFE_INTEGER ) {
139
- // definitive answer
140
- return true
141
- }
142
- // Use additional heuristics if we can't use 'bigint'.
143
- // Different 'ino' could be represented the same if they are >= Number.MAX_SAFE_INTEGER
144
- // See issue 657
145
- if ( destStat . size === srcStat . size &&
146
- destStat . mode === srcStat . mode &&
147
- destStat . nlink === srcStat . nlink &&
148
- destStat . atimeMs === srcStat . atimeMs &&
149
- destStat . mtimeMs === srcStat . mtimeMs &&
150
- destStat . ctimeMs === srcStat . ctimeMs &&
151
- destStat . birthtimeMs === srcStat . birthtimeMs ) {
152
- // heuristic answer
153
- return true
154
- }
155
- }
156
- return false
132
+ return destStat . ino && destStat . dev && destStat . ino === srcStat . ino && destStat . dev === srcStat . dev
157
133
}
158
134
159
135
// return true if dest is a subdir of src, otherwise false.
0 commit comments