Packages

Snapshot-first Git object queries for Elixir — bounded, cancellable, structured reads (tree, file, search, log, diff, blame) over pluggable object databases, no worktree or checkout required

Current section

Files

Jump to
gitility CHANGELOG.md
Raw

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.5.0 - 2026-08-22
### Added
- `Gitility.Mirror.publish/4` and `restore/4` for conditional, generation-aware
replication of bare mirrors through object stores.
- `Gitility.ObjectStore`, the `Local` and optional-Req `S3` adapters, and the
reusable `Gitility.ObjectStore.Conformance` suite.
- `Gitility.Repository.init_bare/2` for failure-atomic creation of gc-safe bare
repositories.
- `Gitility.Bundle.write/2` options `:generation`, `:strict_refs`, and `:mode`.
### Changed
- Every bare repository created by Gitility is gc-safe: automatic gc,
maintenance, and receive autogc are disabled. Existing repositories are
never reconfigured.
- Added stable error codes `:not_found`, `:conflict`, and `:malformed_bundle`.
### Fixed
- `Gitility.history/3` and `async_history/3` now return typed
`:invalid_argument` errors naming unsupported `:since` or `:until` options
instead of raising for an unknown option.
## 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).