fix(build): stop per-minor objects masking the per-minor candidate list #189
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/candidate-list-per-minor"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Motivation
arm64/alpine324(pipeline 11953) finished in minutes having uploaded 57 packages, and reported:The same run's index step dropped 2407 packages as missing for 4.4 and 2436 for 4.6. Nothing to build, and thousands missing — the candidate list is wrong.
Two omissions
1. Per-minor objects mask the per-minor candidates.
recurse = TRUEwalks4.4/,4.5/,4.6/;basename()throws the directory away.4.5/curl_1.0.tar.gzandcurl_1.0.tar.gzcollapse to one name, so a package present under any R minor counts as built for all of them — pruning exactly the packages a per-minor pass exists to build.Per-minor objects are now excluded, and presence in a specific minor is decided downstream where the running R version is known:
build-all.Rfilters on it, andbuild_binary_package()checks the per-minor path per package and skips what is already there.Archive/is kept. Those are versions built and later superseded; dropping them would make every archived version look unbuilt.Validated against real path shapes:
curl_1.0.tar.gz4.4/curl_1.0.tar.gz4.6/rlang_1.3.0.tar.gzArchive/curl/curl_0.9.tar.gzPACKAGES.gz2. The error query ignores
r_version.A failure under the primary minor drops the package from every other minor's candidate list. This is the same omission fixed in
local/build-all.R(#187) and in bincraft'scheck_package_error()(rpkgs/bincraft#119). This is the third and last consumer of that table — I have grepped the rest;bincraft::R/cran-internal.Ralso reads it, but to list packages present rather than to skip, where the R minor does not apply.Expected effect
The per-minor passes get real candidate lists. Expect slots that reported "0 remaining" to report thousands, and correspondingly long runs.
There is a cost: the list is no longer pruned by per-minor presence, so each pass asks
build_binary_package()about packages that may already exist, and it answersalready exists in S3 ... Skipping buildper package. Slower per pass, and correct — the pruning it replaces was removing the wrong things.