From d69411a2ac73b5dd608a2883a5b550d119717f8f Mon Sep 17 00:00:00 2001 From: Zoffix Znet Date: Sat, 28 Nov 2015 12:59:52 -0500 Subject: [PATCH] Implement build salvage routines If a new build of a dist that"s already in the db fails (e.g. due to network errors), we need to catch that and update the Build ID in the database for that dist, so that it does not get purged as a removed dist at the end of the build process. --- lib/ModulesPerl6/DbBuilder/Dist.pm | 17 +++++++++++++++-- lib/ModulesPerl6/Model/Dists.pm | 10 ++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/ModulesPerl6/DbBuilder/Dist.pm b/lib/ModulesPerl6/DbBuilder/Dist.pm index 4eb08f8..8bb74c0 100644 --- a/lib/ModulesPerl6/DbBuilder/Dist.pm +++ b/lib/ModulesPerl6/DbBuilder/Dist.pm @@ -43,11 +43,14 @@ sub _load_from_source { for my $source ( $self->_sources ) { next unless $url =~ $source->re; log info => "Using $source to load $url"; - my $dist = $source->new( + my $dist_source = $source->new( meta_url => $url, logos_dir => $self->_logos_dir, dist_db => $self->_dist_db, - )->load or return; + ) + my $dist = $dist_source->load + return $self->_salvage_build( $dist_source ); + $dist->{build_id} = $self->_build_id; for my $postprocessor ( $self->_postprocessors ) { @@ -67,4 +70,14 @@ sub _load_from_source { return; } +sub _salvage_build { + my ( $self, $dist_source ) = @_; + + my $dist = $dist_source->_dist; + $self->_dist_db->salvage_build( $dist->{url}, $self->_build_id ) + if ref $dist and length $dist->{url}; + + return; +} + 1; \ No newline at end of file diff --git a/lib/ModulesPerl6/Model/Dists.pm b/lib/ModulesPerl6/Model/Dists.pm index f4faa69..6142a0d 100644 --- a/lib/ModulesPerl6/Model/Dists.pm +++ b/lib/ModulesPerl6/Model/Dists.pm @@ -111,6 +111,16 @@ sub remove_old { $num_deleted; } +sub salvage_build { + my ( $self, $url, $new_build_id ) = @_; + return unless length $url and length $new_build_id; + + $self->_db->resultset('Dist')->search({ url => $url }) + ->update_all({ build_id => $new_build_id }); + + return 1; +} + 1; __END__