2.8.0
The release that made a second engine family possible and removed the last place where the cache key depended on a file path. It is the biggest change in the 2.x line and the only one that spends time on disk when you upgrade.
Added
- Gecko-family source trees as a preview:
family = "gecko"inbep.toml. Four catalogue patches support it on day one; the rest report an unsupported family instead of failing halfway. bep build --statsprints compiler cache hits, misses and the ten slowest translation units after a build.--jsonforapply,buildandverify, with one object on stdout and progress on stderr.bep fetch --keepkeeps the pack files after checkout, which makes a second series on the same revision start instantly.
Changed
- Cache keys are content hashes: the revision, the fetch command and the effective patch list. Renaming a directory or touching a file no longer invalidates a tree.
- The default job count is
min(cores - 1, 64). It used to be the core count with no cap, which made a 96-core builder slower because of memory pressure. bep doctorresolves the compiler the same way the build does, includingCCandCXX.- The build log line format changed to put the elapsed time last; scripts that match on the first column keep working.
Fixed
- A conflict left a temporary directory behind when the run was interrupted with Ctrl-C; the next apply then saw a half-applied tree.
bep verifyignored empty files, so a patch that emptied a file passed verification.bep initwrote a relative mirror path that broke when the series was moved. It now writes an absolute path or fails with a clear message.- An empty
toucheslist was accepted and silently disabled the overlap warning.
Known issues
- Gecko-family builds are not incremental. A 2.9 goal.
bep series order --checkdoes not see cycles that pass through a disabled optional patch.- Windows paths over 260 characters fail during configure, as before.
Upgrade notes
The lockfile gains a cache_layout field. Applying an old series rewrites the lock and prints which hashes changed. Expect the first bep fetch after the upgrade to take as long as the original fetch, because the cache starts empty under v3. If you keep a mirror on a slow volume, run bep fetch --keep once to avoid paying for it twice.
What we learned
Path-based cache keys looked harmless for a year. The failure was invisible until two teams shared a build server: one of them renamed a directory and both lost an hour of object files. Content hashing costs one extra pass over the patch files and removed a whole class of support questions. The lesson is the subject of the reproducible builds post.