Skip Menu |
 

This queue is for tickets about the libwww-perl CPAN distribution.

Report information
The Basics
Id: 23450
Status: resolved
Priority: 0/
Queue: libwww-perl

People
Owner: Nobody in particular
Requestors: MARKSTOS [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: 5.805
Fixed in: (no value)



Subject: PATCH: tidy and document the internals of mirror() better
Download (untitled) / with headers
text/plain 283b
The following patch to mirror() makes no functional changes, but makes the function easier to review for those who need to. The changes include: - Running perltidy on parts of it to clarify the indentation meaning. - Adding internal comments to clarify the code flow. Mark
Subject: lwp_mirror_docs.patch
--- /usr/local/lib/perl5/site_perl/5.8.0/LWP/UserAgent.pm Fri Nov 12 06:12:04 2004 +++ /home/mark/tmp/UserAgent.pm Fri Nov 17 13:33:42 2006 @@ -670,49 +670,52 @@ LWP::Debug::trace('()'); my $request = HTTP::Request->new('GET', $url); - if (-e $file) { - my($mtime) = (stat($file))[9]; - if($mtime) { - $request->header('If-Modified-Since' => - HTTP::Date::time2str($mtime)); - } + # If the file exists, add a cache-related header + if ( -e $file ) { + my ($mtime) = ( stat($file) )[9]; + if ($mtime) { + $request->header( 'If-Modified-Since' => HTTP::Date::time2str($mtime) ); + } } my $tmpfile = "$file-$$"; my $response = $self->request($request, $tmpfile); - if ($response->is_success) { - my $file_length = (stat($tmpfile))[7]; - my($content_length) = $response->header('Content-length'); + # Only fetching a fresh copy of the would be considered success. + # If the file was not modified, "304" would returned, which + # is considered by HTTP::Status to be a "redirect", /not/ "success" + if ( $response->is_success ) { + my $file_length = ( stat($tmpfile) )[7]; + my ($content_length) = $response->header('Content-length'); - if (defined $content_length and $file_length < $content_length) { - unlink($tmpfile); - die "Transfer truncated: " . - "only $file_length out of $content_length bytes received\n"; - } - elsif (defined $content_length and $file_length > $content_length) { - unlink($tmpfile); - die "Content-length mismatch: " . - "expected $content_length bytes, got $file_length\n"; - } - else { - # OK - if (-e $file) { - # Some dosish systems fail to rename if the target exists - chmod 0777, $file; - unlink $file; - } - rename($tmpfile, $file) or - die "Cannot rename '$tmpfile' to '$file': $!\n"; + if ( defined $content_length and $file_length < $content_length ) { + unlink($tmpfile); + die "Transfer truncated: " . "only $file_length out of $content_length bytes received\n"; + } + elsif ( defined $content_length and $file_length > $content_length ) { + unlink($tmpfile); + die "Content-length mismatch: " . "expected $content_length bytes, got $file_length\n"; + } + # The file was the expected length. + else { + # Replace the stale file with a fresh copy + if ( -e $file ) { + # Some dosish systems fail to rename if the target exists + chmod 0777, $file; + unlink $file; + } + rename( $tmpfile, $file ) + or die "Cannot rename '$tmpfile' to '$file': $!\n"; - if (my $lm = $response->last_modified) { - # make sure the file has the same last modification time - utime $lm, $lm, $file; - } - } + # make sure the file has the same last modification time + if ( my $lm = $response->last_modified ) { + utime $lm, $lm, $file; + } + } } + # The local copy is fresh enough, so just delete the temp file else { - unlink($tmpfile); + unlink($tmpfile); } return $response; }
Applied. Thanks! Sorry about the delay!


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.