You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Release v0.3.3: hotfix v0.3.2 Linux PPM end-to-end (BLOCK + HIGH)
Code review on v0.3.2 caught two silent-failure bugs that made the new
Linux PPM binaries feature broken end-to-end. Both produce broken
R libraries with no error — packages "install" but fail at library()
time because the wrong tarball got extracted to the lib dir.
BLOCK — Bioc on Linux installs source as binary
P3MBinaryIndex::fetch was unconditionally fetching
bioconductor.org/packages/<release>/bioc/src/contrib/PACKAGES.gz on
Linux. That index lists SOURCE tarballs (Bioc doesn't serve Linux
binaries), but they got registered in the binary index and routed
through install_binary_package — which extracts them as if they had
pre-built libs/*.so. Result: any Bioc package on a Linux project was
silently broken. Fix: gate bioc_fut with `!info.is_linux`.
HIGH — Per-package downloads didn't carry the R-shaped User-Agent
PPM serves source vs. binary at the same URL based on UA. v0.3.2 set
the UA on the index fetch (correctly got binary URLs in the listing)
but the per-package downloads in download_one used a bare client.get(),
so PPM served source for every actual tarball. We extracted the source
trees as if they were binaries → unloadable installs.
Fix: threaded a `user_agent: Option<&str>` field through DownloadSpec
and download_one; sync.rs sets it for any URL containing /__linux__/.
MED — r_minor wired into the UA (drops hardcoded "4.5.3")
Future-proof against PPM tightening its UA sniffing rules. The actual
project R minor was already in scope at the call site.
Tests added:
- ppm_codename_rhel_centos_naming_discontinuity: pins the rhel-7/8 →
centos7/8 / rhel-9 → rhel9 mapping (the asymmetric naming is the
highest-value regression anchor in the table).
- linux_user_agent_uses_r_minor_not_hardcoded: asserts the UA reflects
the wired r_minor for both x86_64 and aarch64.
163 uvr-core tests, 31 CLI tests, 45 unit tests. Clippy clean (added a
single allow for too_many_arguments on download_one — 8 params is past
clippy's 7-arg threshold but the alternative of bundling into a struct
adds more noise than it saves).
Per cadence rule: install-blocking-bug exception applies — v0.3.2 was
a feature release whose feature is broken; v0.3.3 is the right fix.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
0 commit comments