Skip to content

Commit

Permalink
[backend] refactor: split clone_projpacks_part and postprocess_needed…
Browse files Browse the repository at this point in the history
…_check from delayedfetchprojpacks processing
  • Loading branch information
mlschroe committed Feb 19, 2013
1 parent 5a8920d commit a036cd1
Showing 1 changed file with 40 additions and 24 deletions.
64 changes: 40 additions & 24 deletions src/backend/bs_sched
Original file line number Diff line number Diff line change
Expand Up @@ -2344,6 +2344,42 @@ sub update_project_meta {
return 1;
}

# used to remember old data before calling update_projpacks so that
# postprocess_needed_check has something to compare against.
sub clone_projpacks_part {
my ($projid, $packids) = @_;

my $oldprojdata = { %{$projpacks->{$projid} || {}} };
delete $oldprojdata->{'package'};
$oldprojdata = Storable::dclone($oldprojdata);
my $oldpackdata = {};
my $packs = ($projpacks->{$projid} || {})->{'package'} || {};
for my $packid (@$packids) {
$oldpackdata->{$packid} = $packs->{$packid} ? Storable::dclone($packs->{$packid}) : undef;
}
$oldprojdata->{'package'} = $oldpackdata;
return $oldprojdata;
}

sub postprocess_needed_check {
my ($projid, $oldprojdata) = @_;

return 1 unless $oldprojdata && $oldprojdata->{'package'}; # sanity
# if we just had a srcmd5 change in some packages there's no need to postprocess
if (!identical($projpacks->{$projid}, $oldprojdata, {'package' => 1})) {
return 1;
}
my $packs = ($projpacks->{$projid} || {})->{'package'} || {};
my %except = map {$_ => 1} qw{rev srcmd5 versrel verifymd5 revtime dep prereq file name error build publish useforbuild};
my $oldpackdata = $oldprojdata->{'package'};
for my $packid (keys %$oldpackdata) {
if (!identical($oldpackdata->{$packid}, $packs->{$packid}, \%except)) {
return 1;
}
}
return 0;
}


#
# post-process projpack information
Expand Down Expand Up @@ -6348,30 +6384,10 @@ eval {
my %packids = map {$_ => 1} @{$delayedfetchprojpacks{$projid}};
delete $delayedfetchprojpacks{$projid};
if (%packids) {
# remember old values
my $packs = ($projpacks->{$projid} || {})->{'package'} || {};
for my $packid (keys %packids) {
$packids{$packid} = $packs->{$packid} ? Storable::dclone($packs->{$packid}) : undef;
}
my $oldprojdata = { %{$projpacks->{$projid} || {}} };
delete $oldprojdata->{'package'};
$oldprojdata = Storable::dclone($oldprojdata);
get_projpacks($projid, sort keys %packids);
# if we just had a srcmd5 change, no need to postprocess
my $need_postprocess;
if (!identical($projpacks->{$projid}, $oldprojdata, {'package' => 1})) {
$need_postprocess = 1;
} else {
$packs = ($projpacks->{$projid} || {})->{'package'} || {};
my %except = map {$_ => 1} qw{rev srcmd5 versrel verifymd5 revtime dep prereq file name error build publish useforbuild};
for my $packid (keys %packids) {
if (!identical($packids{$packid}, $packs->{$packid}, \%except)) {
$need_postprocess = 1;
last;
}
}
}
get_projpacks_postprocess() if $need_postprocess;
my @packids = sort keys %packids;
my $oldprojdata = clone_projpacks_part($projid, \@packids);
get_projpacks($projid, @packids);
get_projpacks_postprocess() if postprocess_needed_check($projid, $oldprojdata);
}
}

Expand Down

0 comments on commit a036cd1

Please sign in to comment.