Current section
Files
Jump to
Current section
Files
CHANGELOG.md
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/).
## [Unreleased]
## 0.4.0 - 2026-08-20
### Added
- `Gitility.Fetch.fetch/4`: bounded, cancellable smart-HTTP fetch into local
bare repositories using gix, reqwest, and statically linked rustls, with
credential providers, optional prune, destination single-flight leases, and
a dedicated two-worker runtime.
### Changed
- The Rust MSRV for from-source consumers is now 1.85, required by gix 0.86.
### Fixed
- Compile warning on Elixir 1.20: bound variables in binary-size matches
are now pinned (`binary-size(^length)`).
## 0.3.0 - 2026-08-20
### Changed
- **Breaking**: `Gitility.Commit` fields renamed for consistency with every
sibling type — `id` → `oid`, `tree_id` → `tree_oid` (matching `blob_oid`,
`commit_oid`, `old_oid`/`new_oid` elsewhere).
### Fixed
- `Bundle.open/2`/`start_link/1` with an unsupported or invalid `:into`
destination (e.g. `into: :memory` on macOS) now returns the documented
error tuple instead of exiting the linked caller from inside the
supervisor's child start.
- Consumers without the optional `postgrex` dependency no longer see
`Postgrex.* is undefined` warnings on every compile.
- `Gitility.read_file/3` docs now name the result's `data` field.
## 0.2.0 - 2026-08-20
### Added
First functional release — the complete snapshot-first query library.
- **Query API** over immutable commit snapshots: `Gitility.list_tree/3`,
`read_file/3`, `search/3`, `log/2`, `history/3`, `diff/3`, `blame/3`, and
`ancestor?/4` — structured, paginated results with explicit byte/entry/time
budgets (`Gitility.Limits`), cancellable jobs, SHA-1 and SHA-256
repositories.
- **Repositories and snapshots**: `Gitility.Repository.open/2` for local
bare/normal directories (worktree never read), selector resolution
(`:head`, `{:branch, _}`, `{:tag, _}`, `{:ref, _}`, `{:oid, _}`) into
pinned `Gitility.Snapshot`s.
- **Pluggable storage behaviours**: static in-memory object sets, Elixir
provider callbacks (`Gitility.ODB.Backend`), immutable range-addressed
pack stores (`Gitility.ODB.RangeBackend` with a `LocalDirectory`
reference backend and `publish/2`), and pluggable ref stores
(`Gitility.RefDB.Backend`).
- **PackFetch hydration** (`Gitility.ODB.PackFetch`): fetch from a remote
immutable pack store under explicit request/byte budgets into a local
scratch directory or straight into a bundle file
(`into: {:bundle, path}`), with warm restarts served locally.
- **Bundles** (`Gitility.Bundle`): a complete read-only repository in one
flat file — `write/2` (byte-deterministic, atomic-rename publication),
`open/2` (`into: :memory` or `{:dir, path}`), `verify/1`, and `info/1`.
Container format **frozen as bundle format v1**
(`docs/format/bundle-v1.md`): 0.2+ readers open any v1 bundle; future
changes bump the format version rather than reinterpret v1 fields.
- Precompiled NIF targets: macOS arm64/x86_64, Linux glibc x86_64/arm64
(`GITILITY_BUILD=1` builds from source elsewhere; Windows unsupported).