[package]
name = "gunnar-bitmap"
version = "2.0.0"
edition = "2021"
rust-version = "1.85"
license = "MIT OR Apache-2.0"
repository = "https://git.gunnar.rs/nordisk/edda"
description = "Git's EWAH bitmap format and the `.bitmap` reachability index, which gitoxide does not have. Plumbing only, no gunnar types."
keywords = ["git", "bitmap", "ewah", "packfile", "reachability"]
categories = ["compression", "development-tools"]
# ── donation shape (D21) ────────────────────────────────────────────────────
#
# Same discipline as `crates/gunnar-delta`, and for the same reason: this crate
# plainly belongs in gitoxide, so it is built standalone from the first line.
# Extraction after the fact never happens; by then the host project's types have
# grown through the code.
#
# Dependency versions are spelled out rather than inherited from the workspace on
# purpose, so that `cp -r crates/gunnar-bitmap` somewhere else still builds.
# `version.workspace = true` would make this manifest meaningless outside
# gunnar's tree, which is exactly the coupling D21 exists to prevent.
#
# There is deliberately NO gunnar dependency, and there never may be one.
# `tests/donation_shape.rs` asserts it, and proves each check red first.
[dependencies]
# Object identity, the hash kind (SHA-1 vs SHA-256 changes the header width --
# there are real SHA-256 `.bitmap` fixtures on this machine), and the hasher used
# to write the trailing checksum. No separate `sha1`/`sha2` dependency needed.
gix-hash = { version = "0.27", features = ["sha1", "sha256"] }
thiserror = "2"
[dev-dependencies]
# Position -> object id mapping for the tests that compare an object set against
# stock `git rev-list --objects`. The crate itself never needs the `.idx`: a
# bitmap is pure set arithmetic over pack index positions, and keeping it that
# way is what makes it plumbing.
gix-pack = { version = "0.75", features = ["streaming-input"] }
tempfile = "3"
# There is deliberately NO `simd` feature. One was added, an AVX2 backend was
# written behind runtime detection, and it was measured slower on the real path
# and removed; `src/words.rs` carries the numbers so it is not written again.
# Measurement, not decoration. Examples rather than `benches/` so that nothing
# pulls in a benchmark harness dependency and the crate stays liftable (D21).
# Timings are persisted to nornir's `bench_runs`, never criterion.
[[example]]
name = "bench"
[[example]]
name = "decode_real"