@@ -35,8 +35,12 @@ function copy (src, dest, opts, cb) {
35
35
const { srcStat, destStat } = stats
36
36
stat . checkParentPaths ( src , srcStat , dest , 'copy' , err => {
37
37
if ( err ) return cb ( err )
38
- if ( opts . filter ) return handleFilter ( checkParentDir , destStat , src , dest , opts , cb )
39
- return checkParentDir ( destStat , src , dest , opts , cb )
38
+ runFilter ( src , dest , opts , ( err , include ) => {
39
+ if ( err ) return cb ( err )
40
+ if ( ! include ) return cb ( )
41
+
42
+ checkParentDir ( destStat , src , dest , opts , cb )
43
+ } )
40
44
} )
41
45
} )
42
46
}
@@ -53,16 +57,10 @@ function checkParentDir (destStat, src, dest, opts, cb) {
53
57
} )
54
58
}
55
59
56
- function handleFilter ( onInclude , destStat , src , dest , opts , cb ) {
57
- Promise . resolve ( opts . filter ( src , dest ) ) . then ( include => {
58
- if ( include ) return onInclude ( destStat , src , dest , opts , cb )
59
- return cb ( )
60
- } , error => cb ( error ) )
61
- }
62
-
63
- function startCopy ( destStat , src , dest , opts , cb ) {
64
- if ( opts . filter ) return handleFilter ( getStats , destStat , src , dest , opts , cb )
65
- return getStats ( destStat , src , dest , opts , cb )
60
+ function runFilter ( src , dest , opts , cb ) {
61
+ if ( ! opts . filter ) return cb ( null , true )
62
+ Promise . resolve ( opts . filter ( src , dest ) )
63
+ . then ( include => cb ( null , include ) , error => cb ( error ) )
66
64
}
67
65
68
66
function getStats ( destStat , src , dest , opts , cb ) {
@@ -178,12 +176,17 @@ function copyDirItems (items, src, dest, opts, cb) {
178
176
function copyDirItem ( items , item , src , dest , opts , cb ) {
179
177
const srcItem = path . join ( src , item )
180
178
const destItem = path . join ( dest , item )
181
- stat . checkPaths ( srcItem , destItem , 'copy' , opts , ( err , stats ) => {
179
+ runFilter ( srcItem , destItem , opts , ( err , include ) => {
182
180
if ( err ) return cb ( err )
183
- const { destStat } = stats
184
- startCopy ( destStat , srcItem , destItem , opts , err => {
181
+ if ( ! include ) return copyDirItems ( items , src , dest , opts , cb )
182
+
183
+ stat . checkPaths ( srcItem , destItem , 'copy' , opts , ( err , stats ) => {
185
184
if ( err ) return cb ( err )
186
- return copyDirItems ( items , src , dest , opts , cb )
185
+ const { destStat } = stats
186
+ getStats ( destStat , srcItem , destItem , opts , err => {
187
+ if ( err ) return cb ( err )
188
+ return copyDirItems ( items , src , dest , opts , cb )
189
+ } )
187
190
} )
188
191
} )
189
192
}
0 commit comments