2009/1/15 Adam Kennedy <adamkennedybac...@gmail.com>: > Looks fine, although personally I'd... > > sleep $i; > > ... and maybe ... > > $self->log_info("Couldn't remove '$_'; trying " . (5 - $i) . " more times\n"); > > Adam K > > 2009/1/15 David Golden <xda...@gmail.com>: >> Based on the thread about my file deletion heisenbug and the likelihood that >> a virus scanner was keeping files open preventing deletion, I propose the >> following patch specific to Windows. It's cut-and-paste from Base.pm, but >> adding a loop around rmtree. >> >> I'd appreciate any feedback you might have on this hacky solution. >> >> Thanks, >> David >> >> === lib/Module/Build/Platform/Windows.pm >> ================================================================== >> --- lib/Module/Build/Platform/Windows.pm (revision 12568) >> +++ lib/Module/Build/Platform/Windows.pm (local) >> @@ -29,6 +29,25 @@ >> return $value; >> } >> >> +sub delete_filetree { >> + my $self = shift; >> + my $deleted = 0; >> + foreach (@_) { >> + next unless -e $_; >> + $self->log_info("Deleting $_\n"); >> + # try to delete up to 5 times (in case virus scanners are keeping files >> open) >> + for my $i ( 1 .. 5 ) { >> + File::Path::rmtree($_, 0, 0); >> + last if ! -e $_; >> + $self->log_info("Couldn't remove '$_'; trying again\n"); >> + sleep 1; >> + } >> + die "Couldn't remove '$_': $!\n" if -e $_; >> + $deleted++; >> + } >> + return $deleted; >> +}
If this is meant to deal with installation issues then perhaps it should use the "schedule file for deletion at reboot" API, similar to how ExtUtils::Install deals with DLL's that are in use by the installation/build process. Yves -- perl -Mre=debug -e "/just|another|perl|hacker/"