astral-sh / astral-sh/tar-codec
Support GNU sparse members when decoding
- Dominant language
- Rust
- Stars
- 9
- Forks
- 3
- Avg merge
- 9m
- Merged PRs (30d)
- 3
Description
There are, annoyingly, so many ways to express these:
1. The "old" GNU format uses typeflag `S` and mashes some stuff into a ustar-ish header.
2. The "new" formats occur in pax streams:
- Version 0.0 is incoherent with the pax spec, since it uses the same pax record name multiple times
- Version 0.1 is similar to 0.0, but uses `GNU.sparse.map` instead
- Version 1.0 adds `GNU.sparse.{major,minor}` for version identification
I think we probably need to support (1) and (2)(b) and (2)(c). (2)(a) seems essentially unsupportable without violating pax.
Contributor guide
Research direction
Start by locating the Rust decoder and its pax-header handling, then compare how it represents GNU sparse metadata. Define the supported old GNU format, pax version 0.1, and pax version 1.0 cases from the issue, while confirming how version 0.0 is excluded. Done means decoding works for the three supported forms with coverage for each format.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100