@@ -60,6 +60,17 @@ async function pathExists(targetPath: string): Promise<boolean> {
6060 }
6161}
6262
63+ async function removePathBestEffort ( targetPath : string ) : Promise < void > {
64+ await fs
65+ . rm ( targetPath , {
66+ recursive : true ,
67+ force : true ,
68+ maxRetries : process . platform === "win32" ? 5 : 2 ,
69+ retryDelay : 100 ,
70+ } )
71+ . catch ( ( ) => undefined ) ;
72+ }
73+
6374async function readPackageVersionIfPresent ( packageRoot : string | null ) : Promise < string | null > {
6475 if ( ! packageRoot ) {
6576 return null ;
@@ -129,12 +140,12 @@ async function cleanupStagedNpmInstall(stage: StagedNpmInstall | null): Promise<
129140 if ( ! stage ) {
130141 return ;
131142 }
132- await fs . rm ( stage . prefix , { recursive : true , force : true } ) . catch ( ( ) => undefined ) ;
143+ await removePathBestEffort ( stage . prefix ) ;
133144}
134145
135146async function copyPathEntry ( source : string , destination : string ) : Promise < void > {
136147 const stat = await fs . lstat ( source ) ;
137- await fs . rm ( destination , { recursive : true , force : true } ) . catch ( ( ) => undefined ) ;
148+ await removePathBestEffort ( destination ) ;
138149 if ( stat . isSymbolicLink ( ) ) {
139150 await fs . symlink ( await fs . readlink ( source ) , destination ) ;
140151 return ;
@@ -201,15 +212,15 @@ async function replaceNpmBinShims(params: {
201212 await restoreNpmBinShimBackup ( backup ) ;
202213 throw err ;
203214 } finally {
204- await fs . rm ( backup . backupDir , { recursive : true , force : true } ) . catch ( ( ) => undefined ) ;
215+ await removePathBestEffort ( backup . backupDir ) ;
205216 }
206217}
207218
208219async function restoreNpmBinShimBackup ( backup : NpmBinShimBackup ) : Promise < void > {
209220 await fs . mkdir ( backup . targetBinDir , { recursive : true } ) ;
210221 for ( const entry of backup . entries ) {
211222 const destination = path . join ( backup . targetBinDir , entry . name ) ;
212- await fs . rm ( destination , { recursive : true , force : true } ) . catch ( ( ) => undefined ) ;
223+ await removePathBestEffort ( destination ) ;
213224 if ( entry . hadExisting ) {
214225 await copyPathEntry ( path . join ( backup . backupDir , entry . name ) , destination ) ;
215226 }
@@ -253,7 +264,7 @@ async function swapStagedNpmInstall(params: {
253264 packageName : params . packageName ,
254265 } ) ;
255266 if ( movedExisting ) {
256- await fs . rm ( backupRoot , { recursive : true , force : true } ) ;
267+ await removePathBestEffort ( backupRoot ) ;
257268 }
258269 return {
259270 name : "global install swap" ,
@@ -268,7 +279,7 @@ async function swapStagedNpmInstall(params: {
268279 } ;
269280 } catch ( err ) {
270281 if ( movedStaged ) {
271- await fs . rm ( targetPackageRoot , { recursive : true , force : true } ) . catch ( ( ) => undefined ) ;
282+ await removePathBestEffort ( targetPackageRoot ) ;
272283 }
273284 if ( movedExisting ) {
274285 await fs . rename ( backupRoot , targetPackageRoot ) . catch ( ( ) => undefined ) ;
0 commit comments