astral-sh / astral-sh/tar-codec

Support GNU sparse members when decoding

Open
#6 1 comment 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.