1
0
Fork 1
mirror of https://github.com/vbatts/tar-split.git synced 2025-08-01 20:00:29 +00:00

Add tar/asm.IterateHeaders

This allows reading the metadata contained in tar-split
without expensively recreating the whole tar stream
including full contents.

We have two use cases for this:
- In a situation where tar-split is distributed along with
  a separate metadata stream, ensuring that the two are
  exactly consistent
- Reading the tar headers allows making a ~cheap check
  of consistency of on-disk layers, just checking that the
  files exist in expected sizes, without reading the full
  contents.

This can be implemented outside of this repo, but it's
not ideal:
- The function necessarily hard-codes some assumptions
  about how tar-split determines the boundaries of
  SegmentType/FileType entries (or, indeed, whether it
  uses FileType entries at all). That's best maintained
  directly beside the code that creates this.
- The ExpectedPadding() value is not currently exported,
  so the consumer would have to heuristically guess where
  the padding ends.

Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
Miloslav Trmač 2024-09-11 19:54:20 +02:00
parent fe4605ae8b
commit 99c8914877
5 changed files with 190 additions and 1 deletions

View file

@ -56,6 +56,11 @@ func (tr *Reader) RawBytes() []byte {
}
// ExpectedPadding returns the number of bytes of padding expected after the last header returned by Next()
func (tr *Reader) ExpectedPadding() int64 {
return tr.pad
}
// NewReader creates a new Reader reading from r.
func NewReader(r io.Reader) *Reader {
return &Reader{r: r, curr: &regFileReader{r, 0}}