diff --git a/local/packages-to-build.R b/local/packages-to-build.R index 0654a43..ead73b8 100644 --- a/local/packages-to-build.R +++ b/local/packages-to-build.R @@ -355,12 +355,30 @@ query_error <- function(pkg, ver) { } # Fetch all relevant columns from the database +# Scoped to the snapshot's own R minor, like `check_package_error()` in +# bincraft (#119) and the per-minor error query (#189). Unscoped, a single +# failure under any one minor removed the package from the candidate list for +# every minor, permanently: the row is keyed by (name, tag, platform, arch) +# only, so an error under 4.6 also cancelled its 4.4 and 4.5 builds. +# +# That is what the residual per-minor gaps were. On amd64/alpine324, 505 of the +# 508 ABI-risky packages missing from 4.4 were also missing from 4.6 -- a 99% +# overlap, which per-minor build failures would not produce. None of them were +# even attempted by the run that had just succeeded. +# +# Errors specific to another minor are still respected downstream: +# `filter_packages_with_errors()` runs per pass with that pass's r_version. errored_pkgs <- DBI::dbGetQuery( con, sprintf( - "SELECT name, tag FROM single_builds WHERE error_occurred = TRUE and platform='%s' and arch='%s'", + paste0( + "SELECT name, tag FROM single_builds WHERE error_occurred = TRUE ", + "and platform='%s' and arch='%s' ", + "and substring(r_version from '^[0-9]+[.][0-9]+') = '%s'" + ), platform, - arch + arch, + snapshot_r_minor ) ) errored_pkgs <- as.data.table(errored_pkgs)