End user testing of the 2a format revealed two serious bugs. The first, #365615, caused bzr to raise AbsentContentFactory errors when autopacking. This meant that commits or pushes to 2a-format repositories failed intermittently.
The second bug, #390563, caused the smart server to raise AbsentContentFactory when streaming 2a stacked 2a-format branches. This particularly affected branches stored on Launchpad in the 2a format.
Both of these bugs cause command failures only, neither of them cause data corruption or data loss. And, of course, both of these bugs are now fixed.
- We now properly request a more minimal set of file texts when fetching multiple revisions. (Robert Collins, John Arbash Meinel, #390563)
- Repositories using CHK pages (which includes the new 2a format) will no longer error during commit or push operations when an autopack operation is triggered. (Robert Collins, #365615)
- chk_map.iter_interesting_nodes now properly uses the intersection of referenced nodes rather than the union to determine what uninteresting pages we still need to look at. Prior to this, incrementally pushing to stacked branch would push the minimal data, but fetching everything would request extra texts. There are some unhandled cases wrt trees of different depths, but this fixes the common cases. (Robert Collins, John Arbash Meinel, #390563)
- GroupCompress repositories now take advantage of the pack hints parameter to permit cross-format fetching to incrementally pack the converted data. (Robert Collins)
- Repository.commit_write_group now returns opaque data about what was committed, for passing to the Repository.pack. Repositories without atomic commits will still return None. (Robert Collins)
- Repository.pack now takes an optional hint parameter which will support doing partial packs for repositories that can do that. (Robert Collins)
- RepositoryFormat has a new attribute ‘pack_compresses’ which is True when doing a pack operation changes the compression of content in the repository. (Robert Collins)
- StreamSink and InterDifferingSerialiser will call Repository.pack with the hint returned by Repository.commit_write_group if the formats were different and the repository can increase compression by doing a pack operation. (Robert Collins, #376748)