From: Max H. <fin...@us...> - 2002-05-25 21:40:47
|
Update of /cvsroot/fink/fink/perlmod/Fink In directory usw-pr-cvs1:/tmp/cvs-serv14226 Modified Files: PkgVersion.pm Services.pm ChangeLog Log Message: added MD5 checksum fields Index: PkgVersion.pm =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/PkgVersion.pm,v retrieving revision 1.66 retrieving revision 1.67 diff -u -r1.66 -r1.67 --- PkgVersion.pm 25 May 2002 15:08:03 -0000 1.66 +++ PkgVersion.pm 25 May 2002 21:40:44 -0000 1.67 @@ -22,10 +22,12 @@ package Fink::PkgVersion; use Fink::Base; -use Fink::Services qw(&filename &execute &execute_script &expand_percent - &latest_version &print_breaking - &print_breaking_twoprefix &prompt_boolean - &collapse_space &read_properties_var); +use Fink::Services qw(&filename &execute &execute_script + &expand_percent &latest_version + &print_breaking &print_breaking_twoprefix + &prompt_boolean &prompt_selection + &collapse_space &read_properties_var + &file_MD5_checksum); use Fink::Config qw($config $basepath $libpath $debarch); use Fink::NetAccess qw(&fetch_url_to_file); use Fink::Mirror; @@ -410,6 +412,22 @@ return "-"; } +sub get_checksum { + my $self = shift; + my $index = shift || 1; + if ($index == 1) { + if ($self->has_param("Source-MD5")) { + return $self->param("Source-MD5"); + } + } elsif ($index >= 2 and $index <= $self->{_sourcecount}) { + if ($self->has_param("Source".$index."-MD5")) { + return $self->param("Source".$index."-MD5"); + } + } + return "-"; +} + + sub get_custom_mirror { my $self = shift; @@ -886,7 +904,7 @@ sub phase_unpack { my $self = shift; my ($archive, $found_archive, $bdir, $destdir, $unpack_cmd); - my ($i, $verbosity, $answer, $tries); + my ($i, $verbosity, $answer, $tries, $checksum); if ($self->{_type} eq "bundle") { return; @@ -936,6 +954,36 @@ if (not defined $found_archive) { die "can't find source tarball $archive for package ".$self->get_fullname()."\n"; } + + # verify the MD5 checksum, if specified + $checksum = $self->get_checksum($i); + if ($checksum ne "-") { # Checksum was specified + # compare to the MD5 checksum of the tarball + if ($checksum ne &file_MD5_checksum($found_archive)) { + # mismatch, ask user what to do + $tries++; + + &print_breaking("The checksum of the tarball $archive of package ". + $self->get_fullname()." is incorrect. The most likely ". + "cause for this is a corrupted or incomplete ". + "download. It is recommended that you download it ". + "again. How do you want to proceed?"); + $answer = + &prompt_selection("Make your choice: ", + ($tries >= 3) ? 1 : 2, + { "error" => "Give up", + "redownload" => "Download again", + "continue" => "Use tarball anyway" }, + ( "error", "redownload", "continue" )); + if ($answer eq "redownload") { + &execute("rm -f $found_archive"); + $i--; + next; # restart loop with same tarball + } elsif($answer eq "error") { + die "checksum of tarball $archive of package ".$self->get_fullname()." incorrect\n"; + } + } + } # determine unpacking command $unpack_cmd = "cp $found_archive ."; @@ -978,7 +1026,6 @@ ($tries >= 3) ? 0 : 1); if ($answer) { &execute("rm -f $found_archive"); - $i--; next; # restart loop with same tarball } else { Index: Services.pm =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/Services.pm,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- Services.pm 25 May 2002 15:08:03 -0000 1.20 +++ Services.pm 25 May 2002 21:40:44 -0000 1.21 @@ -42,7 +42,8 @@ &print_breaking_twoprefix &prompt &prompt_boolean &prompt_selection &version_cmp &latest_version - &collapse_space &get_term_width); + &collapse_space &get_term_width + &file_MD5_checksum); } our @EXPORT_OK; @@ -561,5 +562,26 @@ } return $width; } + +### compute the MD5 checksum for a given file + +sub file_MD5_checksum { + my $filename = shift; + my ($pid, $checksum, $name); + + $checksum = "-"; + + $pid = open(MD5SUM, "md5sum $filename |") or die "Couldn't run md5sum: $!\n"; + while (<MD5SUM>) { + if (/([^\s]*)\s*$filename/) { + $checksum = $1; + last; + } + } + close(MD5SUM) or die "Error on closing pipe to md5sum: $!\n"; + + return $checksum; +} + ### EOF 1; Index: ChangeLog =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/ChangeLog,v retrieving revision 1.163 retrieving revision 1.164 diff -u -r1.163 -r1.164 --- ChangeLog 25 May 2002 15:08:03 -0000 1.163 +++ ChangeLog 25 May 2002 21:40:44 -0000 1.164 @@ -1,9 +1,13 @@ 2002-05-25 Max Horn <ma...@qu...> - * Services.pm: Added execute_script function (based on patch #534121 by - Benjamin Reed). + * PkgVersion.pm: Added Source-MD5/SourceN-MD5 fields. + + * Services.pm: Added file_MD5_checksum function. * PkgVersion.pm: Make use of the new execute_script function. + + * Services.pm: Added execute_script function (based on patch #534121 by + Benjamin Reed). 2002-05-25 Alexander Strange <MrV...@ma...> |