@@ -44,6 +44,7 @@ import del from 'del';
44
44
import deleteEmpty from 'delete-empty' ;
45
45
import tar , { ExtractOptions } from 'tar' ;
46
46
import { ToolingLog } from '@osd/dev-utils' ;
47
+ import { standardize } from '@osd/cross-platform' ;
47
48
48
49
const pipelineAsync = promisify ( pipeline ) ;
49
50
const mkdirAsync = promisify ( fs . mkdir ) ;
@@ -120,7 +121,24 @@ export async function deleteAll(patterns: string[], log: ToolingLog) {
120
121
dryRun : true ,
121
122
} ) ;
122
123
123
- await Promise . all ( filesToDelete . map ( ( folder ) => rm ( folder , { force : true , recursive : true } ) ) ) ;
124
+ await Promise . all (
125
+ filesToDelete . map ( async ( folder ) => {
126
+ if ( process . platform === 'win32' ) {
127
+ folder = standardize ( folder , false , false , true ) ; // extended long path
128
+ }
129
+
130
+ for ( let i = 0 ; i < 3 ; i ++ ) {
131
+ try {
132
+ await rm ( folder , { force : true , recursive : true } ) ;
133
+ return ;
134
+ } catch ( err ) {
135
+ if ( i === 2 ) throw err ;
136
+ log . debug ( `Retry ${ i + 1 } /3 on ${ folder } , waiting for 1000ms` ) ;
137
+ await new Promise ( ( resolveSleep ) => setTimeout ( resolveSleep , 1000 ) ) ;
138
+ }
139
+ }
140
+ } )
141
+ ) ;
124
142
125
143
if ( log ) {
126
144
log . debug ( 'Deleted %d files/directories' , filesToDelete . length ) ;
@@ -155,7 +173,24 @@ export async function deleteEmptyFolders(
155
173
} )
156
174
: [ ] ;
157
175
158
- await Promise . all ( foldersToDelete . map ( ( folder ) => rm ( folder , { force : true , recursive : true } ) ) ) ;
176
+ await Promise . all (
177
+ foldersToDelete . map ( async ( folder ) => {
178
+ if ( process . platform === 'win32' ) {
179
+ folder = standardize ( folder , false , false , true ) ; // extended long path
180
+ }
181
+
182
+ for ( let i = 0 ; i < 3 ; i ++ ) {
183
+ try {
184
+ await rm ( folder , { force : true , recursive : true } ) ;
185
+ return ;
186
+ } catch ( err ) {
187
+ if ( i === 2 ) throw err ;
188
+ log . debug ( `Retry ${ i + 1 } /3 on ${ folder } , waiting for 1000ms` ) ;
189
+ await new Promise ( ( resolveSleep ) => setTimeout ( resolveSleep , 1000 ) ) ;
190
+ }
191
+ }
192
+ } )
193
+ ) ;
159
194
160
195
log . debug ( 'Deleted %d empty folders' , foldersToDelete . length ) ;
161
196
log . verbose ( 'Deleted:' , longInspect ( foldersToDelete ) ) ;
0 commit comments