From 711231b5c3d4cd048dd70e37de178d62294447b4 Mon Sep 17 00:00:00 2001 From: Alexander Dimitrov <3321085+anchorite@users.noreply.github.com> Date: Sat, 17 Nov 2018 11:40:09 +0200 Subject: [PATCH] Take in account marked for removal kernels. The calculation how many kernels to remove before this commit was not taking in account kernels which are already marked for removal. Thus when adding new kernels for removal the logic would end up removing more than the user requested. This commit just adds the already marked for removal kernels to the calculation. Should fix #15. --- src/ek2/judges/keepnewest.cxx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ek2/judges/keepnewest.cxx b/src/ek2/judges/keepnewest.cxx index ad71710..5069b8f 100644 --- a/src/ek2/judges/keepnewest.cxx +++ b/src/ek2/judges/keepnewest.cxx @@ -10,6 +10,7 @@ #include "ek2/judges/keepnewest.h" #include +#include KeepNewest::KeepNewest(const Options& opts) : Judge(opts) @@ -26,12 +27,16 @@ void KeepNewest::judge(fileset_vote_map& fileset_map, file_vote_map&) const { assert(opts_.keep_newest >= 0); - int to_remove = fileset_map.size() - opts_.keep_newest; + auto is_for_removal = [](FileSetVoteSet& fsv) + { + return !fsv.votes.empty() && fsv.votes.back().remove; + }; + int to_remove = fileset_map.size() - count_if(fileset_map.begin(), fileset_map.end(), is_for_removal) - opts_.keep_newest; for (FileSetVoteSet& fsv : fileset_map) { // skip kernels already listed for removal - if (!fsv.votes.empty() && fsv.votes.back().remove) + if (is_for_removal(fsv)) continue; if (to_remove > 0) @@ -42,4 +47,5 @@ void KeepNewest::judge(fileset_vote_map& fileset_map, else fsv.votes.emplace_back(false, "one of the newest kernels"); } + assert(to_remove == 0); }