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/"

Reply via email to