-
Notifications
You must be signed in to change notification settings - Fork 51
New and Noteworthy 5.6
FileReftableDatabase is a new Reftable [1] implementation for JGit's standard file storage backend besides DfsReftableDatabase providing a Reftable implementation for dfs storage API based backends.
Reftable is a binary, block-based storage format for the ref-database. It provides several advantages over the traditional packed and loose refs storage.
- Storage format:
- O(1) write performance, even for deletions and transactions.
- atomic updates to the ref database.
- O(log N) lookup and prefix scans
- free from restrictions imposed by the file system: it is case-sensitive even on case-insensitive file systems, and has no inherent limitations for directory/file conflicts
- Prefix compression reduces space usage for repetitive ref names, such as gerrit's refs/changes/xx/xxxxx format.
- FileReftableDatabase is based on FileReftableStack, which does compactions inline. This is simple, and has good median performance, but every so often it will rewrite the entire ref database.
- refs in existing repositories can be converted to reftable using the JGit command line command "convert-ref_storage".
$ convert-ref-storage --format reftable
- A C and a golang implementation of reftable is being developed here [2] but isn't yet integrated in git-core or git libraries
[1] Reftable Specification [2] C and golang implementation of reftable
The complete list of new features and bug fixes is available in the release notes.
The following 19 developers worked on this release:
Christian Halstrick, David Ostrovsky, David Pursehouse, Gunnar Wagenknecht, Han-Wen Nienhuys, Ivan Frade, John Tipper, Jonathan Nieder, Jonathan Tan, Luca Milanesio, Masaya Suzuki, Matthias Sohn, Michael Keppler, Minh Thai, Roan Hofland, Terry Parker, Thomas Wolf, Tim Neumann, Yunjie Li