From 8ad93245da741b2552f88497ea6afbdc019046f7 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Thu, 14 Feb 2019 15:28:14 +0100 Subject: [PATCH] [backend] do not propagate med events to locked project --- src/backend/BSSched/Lookat.pm | 3 ++- src/backend/BSSched/ProjPacks.pm | 16 ++++++++++++++++ src/backend/bs_sched | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/backend/BSSched/Lookat.pm b/src/backend/BSSched/Lookat.pm index edd5ab698bc..d19d9f5c30a 100644 --- a/src/backend/BSSched/Lookat.pm +++ b/src/backend/BSSched/Lookat.pm @@ -125,7 +125,8 @@ sub changed2lookat { my $rprpdeps = $gctx->{'rprpdeps'}; for my $prp (keys %$changed_med) { $lookat_next->{$prp} = 1; - $lookat_next->{$_} = 1 for @{$rprpdeps->{$prp} || []}; + my $alllocked = $gctx->{'alllocked'}; + $lookat_next->{$_} = 1 for grep {!$alllocked->{$_}} @{$rprpdeps->{$prp} || []}; } #my $prpdeps = $gctx->{'prpdeps'}; diff --git a/src/backend/BSSched/ProjPacks.pm b/src/backend/BSSched/ProjPacks.pm index 359c151c615..5b213e3202f 100644 --- a/src/backend/BSSched/ProjPacks.pm +++ b/src/backend/BSSched/ProjPacks.pm @@ -861,6 +861,7 @@ sub setup_projects { $gctx->{'channeldata'} = {}; $gctx->{'channelids'} = {}; $gctx->{'project_prps'} = {}; + $gctx->{'alllocked'} = {}; } else { for my $projid (@$projids_todo) { # just updating some projects, delete all the entries we currently have @@ -884,6 +885,7 @@ sub setup_projects { delete $gctx->{'prpsearchpath'}->{$prp}; delete $gctx->{'prpdeps'}->{$prp}; delete $gctx->{'relatedprpdeps'}->{$prp}; + delete $gctx->{'alllocked'}->{$prp}; } # remove project from various projid indexed hashes delete $gctx->{'expandedprojlink'}->{$projid}; @@ -1027,6 +1029,20 @@ sub setup_projects { # get list of related prp my @related_prps = grep { $prp ne $_ && is_related($projid, $_) } @{$prpdeps->{$prp} || []}; $relatedprpdeps->{$prp} = \@related_prps if @related_prps; + + # check if all packages are locked + my $alllocked; + if ($proj->{'locked'} && BSUtil::enabled($repoid, $proj->{'locked'}, 0, $myarch)) { + $alllocked = 1; + for my $pack (grep {$_->{'locked'}} values(%{$proj->{'package'} || {}})) { + $alllocked = 0 unless BSUtil::enabled($repoid, $pack->{'locked'}, 1, $myarch); + } + } + if ($alllocked) { + $gctx->{'alllocked'}->{$prp} = 1; + } else { + delete $gctx->{'alllocked'}->{$prp}; + } } $gctx->{'project_prps'}->{$projid} = [ sort keys %myprps ] if %myprps; } diff --git a/src/backend/bs_sched b/src/backend/bs_sched index 58285d21821..7fabdbc198b 100755 --- a/src/backend/bs_sched +++ b/src/backend/bs_sched @@ -446,6 +446,7 @@ my $gctx = { # maps prp => [ prp, prp ... ] 'relatedprpdeps' => {}, # prpdeps filtered for related projects 'rrelatedprpdeps' => {}, # reverse of relatedprpdeps + 'alllocked' => {}, # prps where all packages are locked # triggers 'prpcheckuseforbuild' => {}, # project/package meta has changed