fix: a delta layer is the final tree diff against its parent #18
No reviewers
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Keel-Linux/buildtasks!18
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/delta-layer-final-diff"
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?
A child layer was packed as the two deck upper directories in turn (root.build, then root.patched). A file created in stage 1 and deleted in stage 2 is content in one and a whiteout in the other, so the tarball shipped its bytes followed by the whiteout. The unpacked tree was right; the bytes were still published. This is how the postgresql layer of 2026-10-08 (not published) carried the snakeoil key ssl-cert makes;
layer_audit_keysreads the final tree, where the whiteout already hides it.layer_delta_listscomputes the members from the final tree and the parent: paths either upper holds thatroot.patchedstill has (packed fromroot.patched); a whiteout only for a path the parent has and the final tree lacks; an opaque directory over a parent directory taken from its upper so the mark survives. Created-then-deleted leaves nothing.--null --no-recursion: reproducible (the-ure-export stays byte identical).bt-layerpasses the parent rootfs and fails if the members cannot be listed.Tests (
tests/layer, section 10a): a fake key created in stage 1 and whited out in stage 2 is neither named nor present byte for byte in a real tarball; parent file removed = whiteout; file re-created packed once; opaque directory from its upper; refusals; the real predicates.layer-lib99.54 percent locally (gate 99); the one new uncovered line is a loop'sdone.