All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
local refs created during fetching will now always be valid. Previously it could create symbolic refs that were effectively unborn, i.e. point to a reference which doesn't exist.
Now these will always point to the peeled object instead.
300a838
)PathspecDetached
as pathspec that can more easily be used across threads.PathSpec
implements gix_status::PathSpec
to allow it to be used there. The reason we need a trait and can't do with simply a function is that multiple calls are needed to test for inclusion and allow the common-prefix optimization.Repository::stat_options()
to learn how an index would compare filesystem stats.parallel
feature toggle Make certain data structure threadsafe (or Sync
) to facilitate multithreading. Further, many algorithms will now use multiple threads by default. If unset, most of gix
can only be used in a single thread as data structures won't be Send
anymore.stat
isn't having.core.askpass
settings This is the same as what git
does, it's explicit per value, which means that other paths might be flagged as empty automatically.gix
is happy to open repositories that won't be handled by git
unless overrides are set.ThreadSafeRepository
is sync. If it doesn't appear to be sync, be sure to use the max-performance-safe
feature.PrepareCheckout::main_worktree()
now takes Progress
as geric argument. This makes it more flexible and convenient, but is technically a breaking change.7891fb1
)8a60d5b
)54a8495
)PathspecDetached
as pathspec that can more easily be used across threads. (f9d14d8
)e22893c
)PathSpec
implements gix_status::PathSpec
to allow it to be used there. (f066f98
)Repository::stat_options()
to learn how an index would compare filesystem stats. (a8333f1
)4ce7f7c
)c270f78
)parallel
feature toggle (2734e84
)ThreadSafeRepository
is sync. (79e47a5
)14312b6
)9c528dc
)afb1960
)core.askpass
settings (334281c
)1f2ffb6
)PrepareCheckout::main_worktree()
now takes Progress
as geric argument. (ee9276f
)e022096
)clone::PrepareCheckout::main_worktree`` ([
938f518`](https://github.com/Byron/gitoxide/commit/938f5187f0ff51561971ca463584ec0db93f3455))maybe_async
(c80e809
)d82f84b
)remote::fetch::Prepare::receive
(44faa01
)3eb8653
)6a33594
)progress
in PrepareFetch::fetch_only
(70989b3
)d5aa2ba
)Repository::write_blob_stream
: Avoid dup codegen (ca8a373
)gix_macros::momo
to Repository::write_blob
(bae928d
)Repository::write_object
: Avoid dup momo (32f1c7d
)Repository::commit_as_inner
(cf70a2e
)gix
: de-momo impl TryInto
by hand (b19c140
)interrupt
feature only gates signal-handling, but leaves the interrupt
module alone.This release adds feature toggles which help to reduce compile time. Please see the library documentation for all the details.
log
dependency in favor of gix-trace
interrupt
feature to reduce dependenciesindex
feature.excludes
feature to make exclude-checks possible.mailmap
featurerevision
component behind a feature toggle.gix
without connection support includes less codeblob-diff
capability This also removes all diff capabilities.Clone
for ThreadSafeRepository
It is Sync
and can easily be passed by reference, but sometimes it's nice to be cloning it as well.Repository::find_fetch_remote()
to obtain a remote just like git would.gix-credentials
and gix-prompt
behind the ‘credentials’ feature toggle. They are also available when using https transports.prodash
It makes proper usage of Progress
types easier and allows them to be used as dyn
traits as well.stack
abstraction in Repository::excludes()
. This makes it easier to use.prodash::Count
to indicate that nothing more than counting is performed, in place of prodash::Progress
gix_worktree::Stack
for simpler attribute queries.regex
feature in favor of revparse-regex
. revparse-regex
is only used when parsing revspecs that use a special syntax. This feature is also enabled by default.dyn
trait where possible. This reduces compile time due to avoiding duplication.Clippy helped 2 times to make code idiomatic.
1ff3064
)8bd0456
)375db06
)6135a5e
)gix
(805b8aa
)log
dependency in favor of gix-trace
(2b8d09f
)interrupt
feature to reduce dependencies (36d34bd
)index
feature. (721c377
)gix-credentials
and gix-prompt
behind the ‘credentials’ feature toggle. (a957478
)excludes
feature to make exclude-checks possible. (92dd181
)stack
abstraction in Repository::excludes()
. (58b0e6f
)mailmap
feature (c4ffde0
)799a515
)regex
feature in favor of revparse-regex
. (741b41e
)revision
component behind a feature toggle. (c42064d
)gix
without connection support includes less code (147528f
)blob-diff
capability (fea044e
)c5ec244
)a1ed6a1
)4971a48
)dyn
ification (f658fcc
)dyn
trait where possible. (072ee32
)prodash::Count
to indicate that nothing more than counting is performed, in place of prodash::Progress
(24dd870
)prodash
(ed327f6
)8a7c2af
)gix_worktree::Stack
for simpler attribute queries. (54291fd
)Clone
for ThreadSafeRepository
(c79991c
)b7560a2
)gix-submodule
(f8471b1
)11b9c71
)3be2b1c
)momo
to fn gix::Remote::save_as_to
(875c287
)momo
to fn gix::revision::Spec::from_bstr
(1d90301
)momo
to mod config::snapshot::access
(25912fe
)momo
to mod gix::create::into
(cd3c289
)#[allow(unused_mut)]
put on momo
ed functions (89ae797
)repository/config/transport.rs
(86b8e50
)#[allow(clippy::needless_lifetimes)]
(e1b9d51
)gix_macros::momo
(c72eaa0
)momo
Repository::try_find_remote_{without_url_rewrite}
(e760225
)4bfd1cc
)0d6d4ec
)gix-index
and pass skip-hash through for performance.. (713cd59
)gix
method to obtain the fetch remote (instead of implementing it by hand) (e2c0912
)Repository::find_fetch_remote()
to obtain a remote just like git would. (d22b7fb
)gix/src/repository/remote.rs
(ff210d8
)momo
to mod gix::repository
(5a50537
)momo
to mod remote::connection::fetch::receive_pack
(ea5c2db
)momo
to gix::reference
(3c205ab
)momo
to gix::pathspec
(767ec2d
)momo
to mod gix::open::repository
(3ce0144
)momo
to gix::object::tree
(d835526
)momo
to mod gix::init
(46a9dfe
)momo
to mod gix::discover
(58fbb08
)5044c3b
)6194ebe
)363ee77
)Worktree::pathspec()
to easily get worktree-scoped pathspec searches.Submodule
type to represent a declared submodule.pathspec_search([specs])
to instantiate a search using pathspecs. It can be used to for filtering input paths. This type also makes filtering index entries easy.gix-pathspec
crate availableCommit::signature()
to yield the PGP sigature of a commit, if present.fix incorrect s/git-config/gix-config/ 3a861c8f049f6502d3bcbdac752659aa1aeda46a just blindly replaced any occurence of “git-config” or “git_config” with “gix-config”/“gix_config”.
There is no such thing as a gix-config file. gix-config is a git-config file parser.
Repository::prefix()
turns Option<Result
into Result<Option
. This makes it easier for the caller as they won't have to call transpose anymore.
improve interrupt::init_handler()
to be usable from multiple threads Previously it was geared towards applications which would initialize handlers only from the main thread.
Now the API supports multiple threads.
Repository::prefix()
is now side-effect free and won't error if CWD is outside of working tree dir. This makes it more usable, especially in contexts where many repositories are held, possibly with changing current working dirs.6c62e74
)30b2761
)f23ea88
)8f3f358
)c96f26b
)c35ddab
)0d258f4
)36f7b78
)gix
(9fe3052
)Worktree::pathspec()
to easily get worktree-scoped pathspec searches. (28249bd
)Submodule
type to represent a declared submodule. (59bb3c4
)8d0d8e0
)gix-worktree
(e5717e1
)7735047
)c51c8da
)a3afaa4
)gix-url
(f8fc662
)pathspec_search([specs])
to instantiate a search using pathspecs. (a7d0e44
)Repository::prefix()
is now side-effect free and won't error if CWD is outside of working tree dir. (430e58c
)9f4dfe0
)Repository::prefix()
turns Option<Result
into Result<Option
. (b1e55d6
)gix-pathspec
crate available (77da014
)f584d76
)interrupt::init_handler()
to be usable from multiple threads (46225c2
)b37affe
)Commit::signature()
to yield the PGP sigature of a commit, if present. (5c13459
)4604f83
)b629f8a
)config.section_by_name()
(0a584ee
)gix-validate
(a8bc0de
)6b4a303
)ef8ccd9
)This is mostly a bug-fix release with many improvements for fetching, along with more forgiving commit parsing.
Reference::follow()
as a way to peel symbolic refs step by step. handle symbolic ref updates far more gracefully and with more logical consistency. Previously, refspecs couldn‘t be used to update sybolic references locally, particularly because the logic to do so correctly isn’t trivial and git
itself also seems to cover only the most common cases.
However, the logic now changed so that remote updates will only be rejected if
231ac1c
)db63815
)e4d2890
)f8b1f55
)74ce863
)gix-protocol
(df81076
)Reference::follow()
as a way to peel symbolic refs step by step. (d9e551b
)Tree::lookup_entry(_by_path)()
now actually works Previously it was lacking a test and that showed.TreeEntryRefExt
and TreeEntryExt
to be able to easily attach a repo to it. Also, add detach()
to types that were missing it.Tree::find_entry()
to easily find an entry in a tree's entries.Repository::archive()
as extra It implements a high-level interface to achieve git archive
like functionality.gix-workspace-stream
available via Repository::worktree_stream()
That way it's easy to obtain a representation of the worktree in a fully streaming fashion, which is also the basis for archive
-like functionality.object::tree::Entry
and object::tree::EntryRef<'_>
Tree::lookup_entry(_by_path))()
are not mutating anymore; add Tree::peel_to_entry()
and peel_to_entry_by_path()
The previous implementation was a crutch that could now be circumvented.
The new methods allow to reuse a buffer in case the object isn't used or needed further, possibly saving allocations.
d34a4ea
)0062971
)107a64e
)16295b5
)c4cc5f2
)5cb3589
)2fc66b5
)3f914e8
)TreeEntryRefExt
and TreeEntryExt
to be able to easily attach a repo to it. (caa8fb9
)Tree::find_entry()
to easily find an entry in a tree's entries. (62cacd4
)Tree::lookup_entry(_by_path))()
are not mutating anymore; add Tree::peel_to_entry()
and peel_to_entry_by_path()
(8cad009
)object::tree::Entry
and object::tree::EntryRef<'_>
(d5e4ee0
)57cab40
)1dda48b
)61aed0e
)Repository::archive()
as extra (c4a1fb1
)gix-workspace-stream
available via Repository::worktree_stream()
(4ee2857
)9064ea3
)A maintenance release without user-facing changes.
Tree::lookup_entry(_by_path))()
are not mutating anymore; add Tree::peel_to_entry()
and peel_to_entry_by_path()
The previous implementation was a crutch that could now be circumvented.
The new methods allow to reuse a buffer in case the object isn't used or needed further, possibly saving allocations.
object::tree::Entry
and object::tree::EntryRef<'_>
TreeEntryRefExt
and TreeEntryExt
to be able to easily attach a repo to it. Also, add detach()
to types that were missing it.Tree::find_entry()
to easily find an entry in a tree's entries.Repository::archive()
as extra It implements a high-level interface to achieve git archive
like functionality.gix-workspace-stream
available via Repository::worktree_stream()
That way it's easy to obtain a representation of the worktree in a fully streaming fashion, which is also the basis for archive
-like functionality.EntryMode
available from gix::object::tree
. Previously one had to go through gix::objs::tree
which wasn't symmetric with gix::object::Kind
.Id::header()
and Id::try_header()
as syblings to ::object()
and ::try_object()
. With the new header related functions one can obtain information about an object more quickly.Repository::header()
and ::try_header()
to learn about objects, quickly Accessing just the headers of an object is much faster than accessing the entire object. Previously, this method was only available on the objects
field, now it's available through Repository
directly.Repository::filter_pipeline()
to obtain a primitive to handle data conversions. It's fully configured as git would, and can be used to convert data from git or to git.repository
module where appropriate.Clippy helped 1 time to make code idiomatic.
5ac2269
)4aca8c2
)68ae3ff
)c70e54f
)e4dded0
)a063c62
)b82868d
)EntryMode
available from gix::object::tree
. (980c2ba
)Id::header()
and Id::try_header()
as syblings to ::object()
and ::try_object()
. (d4a8f8c
)Repository::header()
and ::try_header()
to learn about objects, quickly (b73435b
)47ca846
)c05eb22
)6121b8f
)git log
example include empty parents and paths (bd59bbe
)git log
example now accepts multiple paths. (0df9f70
)git log
example filter for min/max parents (01e9c29
)git log
example iterator now properly lazy (8a6f1e8
)git log
example now shows merge parents (5cbb6a7
)git log
example (03b3423
)git ls-tree
example (6f4b431
)3ef32af
)cbb0db8
)6297d22
)b19a56d
)8cc106a
)Repository::filter_pipeline()
to obtain a primitive to handle data conversions. (8993b77
)repository
module where appropriate. (c548780
)3fbd7b0
)The main feature of this release is support dates prior to the UNIX epoch. Note that this is a feature that isn't supported by git
, but only by libgit2
.
git2
functions and their counterpart in gix
. That way the ground-work is laid for making the usage of gix
easier for those who used git2
before.onefetch
PR: https://github.com/o2sh/onefetch/pull/1093f27ca12
)5ce81ef
)69c6a36
)9ca3464
)27e8c18
)00f96fb
)b407461
)git2
functions and their counterpart in gix
. (fb63f3f
)gix-date
(fba45c6
)9cfc4aa
)57a5cd1
)3c8e3c1
)6906e0d
)8341d08
)ec73479
)clippy::redundant-closure-for-method-calls
linttracing
spans for common operations. This is just the beginning and more crates will integrate with it over time.hashtable
in root for access to optimized-for-object-ids sets and maps.make sure empty packs in shallow clones are working as well.
no-want detection for negotiation phase is now consistent. It being inconsistent was a reason for ‘failing to parse server response’ which was empty as we didn‘t provide any wants to the server, but didn’t detect that case in the initial negotiation-preparation phase.
Turns out we didn't detect it as our special handling of implicit tags was not done in the negotiation-preparation phase.
The fix consists of unifying the filtering phase to all places that needed, so the preparation phase outcome is now consistent with what would have come later.
fetch::outcome::Negotiate
for details on what happened during negotiation. We also remove the negotiation_rounds
field in favor of a far more detailed fetch::outcome::Negotiate
struct.core.commitGraph
option. Previously, we would always use the commitgraph when available, but now we only do so if the core.commitGraph
option is set.ea9f942
)18b0a37
)f2e7ec4
)just fmt
(871dd0b
)aa16c8c
)4f635fc
)tracing
spans for common operations. (3cffa26
)036e60a
)hashtable
in root for access to optimized-for-object-ids sets and maps. (47c7b0d
)fetch::outcome::Negotiate
for details on what happened during negotiation. (682def0
)71efcbb
)67c06d9
)db69e31
)fe59956
)clippy::redundant-closure-for-method-calls
lint (bcad5c2
)8d2e6a9
)core.commitGraph
option. (574e0f4
)gix-revision
/gix-revwalk
(1fdaf71
)gix-protocol
(b785e81
)gix-traverse
(b447f47
)gix-actor
(4a80e86
)gix-date
(d575336
)revision::Walk
yields revision::Info
structs instead of Id
s. This enables re-use of information that was already obtained, like the parents of a commit and possibly its commit-time. rename Repository::commit_graph()
to ::revision_graph()
. THat's a better fix given its locaion in gix-revision
, while differentiating it further from the lower-level commit-graph
.
Also rename Repository::commit_cache()
to ::commit_graph()
now that the name is free.
gix::revision::walk::Platform
now informas about the commitgraph. In short, one should use the Graph
to obtain the tools necessary for potentially accelerated, custom commit walks. make it possible to use config::tree::Key
to more conveniently set values via config::SnapshotMut::set()
use the commitgraph
if possible and allow its usage to be controlled via revision::walk::Platform::use_commit_graph(toggle)
. The commitgraph is a data structure to greatly accelerate commit walks. It is now supported and used by default, but can be deactivated if desired.
Further, add Repository::commit_cache()
for direct access to just the commit-graph datastructure, without the extras provided by gix_revision::Graph
.
add Repository::index_or_load_from_head()
. That way it's possible to either open the existing worktree index, or create one in-memory by turning our HEAD tree into an index on the fly.
make it possible to use config::tree::Key
to more conveniently set values via config::SnapshotMut::set()
2560a2c
)298f3d7
)d50bfa9
)fdee9a2
)gix
(20f73c8
)revision::Walk
yields revision::Info
structs instead of Id
s. (7e9f202
)Repository::commit_graph()
to ::revision_graph()
. (068603a
)commitgraph
if possible and allow its usage to be controlled via revision::walk::Platform::use_commit_graph(toggle)
. (b2b88dc
)gix-traverse
(1f682fd
)gix-revwalk
(f7d95d1
)Repository::index_or_load_from_head()
. (5d32012
)gix::revision::walk::Platform
now informas about the commitgraph. (f0ddc3b
)gix
CLI. (4e081f2
)config::tree::Key
to more conveniently set values via config::SnapshotMut::set()
(2a698fa
)9c99ed3
)gix::env::fetch::collate::Error
now considers negotiation errors a sign of corrupt git repos. Indeed, all of these negotiation errors are due to failures reading references or objects that ought to be there.The reason for this release is the ability to properly negotiate packs, also across multiple rounds, and with protocol.version
1 or 2, across stateless or stateful transports.
use gix-negotiate
in fetch machinery. Thanks to it we are finally able to do pack negotiations just like git can, as many rounds as it takes and with all available algorithms.
Works for V1 and V2 and for stateless and stateful transports.
Add gitoxide.core.defaultPackCacheMemoryLimit
to control memory limits. Previously the 64 slot LRU cache didn't have any limit, now one is implemented that defaults to about 96MB.
core.useReplaceRefs
and remove gitoxide.objects.noReplace
. The gitoxide specific variable wasn't needed in the first place.Kind
into repository::Kind
. This type was from old times where gix
was called gix-repository
. Also remote ThreadSafeRepository::kind()
in favor of leaving only Repository::kind()
.Clippy helped 1 time to make code idiomatic.
gitoxide.core.defaultPackCacheMemoryLimit
to control memory limits. (020ff4e
)9a9fa96
)just fmt
(ffc1276
)8f15cec
)ae845de
)ae1bc41
)gix-negotiate
in fetch machinery. (af0ef2f
)core.useReplaceRefs
and remove gitoxide.objects.noReplace
. (e011e36
)9525ac8
)420553a
)89a8cfe
)2578e57
)Kind
into repository::Kind
. (9689a08
)dbf8aa1
)2087032
)3ef5c90
)279dc09
)9375cd7
)dbc6cbb
)facaaf6
)97b3f7e
)92832ca
)4507f94
)gix-revision
(56f4d30
)f4245f4
)2f275d5
)gix-pack
(215889c
)33b7770
)4f879bf
)f7b6c6f
)08c6f9d
)13e01f5
)Shallow
(3d95bb7
)A maintenance release without user-facing changes. It's meant to fix breakage that occurred when publishing a breaking change in gix-path
by accident.
7ebc9f7
)0135158
)43ebaf2
)gix index entries
also prints attributes.Repository::attributes()
and Worktree::attributes()
.index.threads
configuration to gix::config::tree
Object::into_tag()
and Tag::decode()
methods. This makes the API more symmetric as similar methods exist for commits and trees.USE_NSEC
and USE_STDEV
compile time flags to configured at runtime. Right now git may be compiled without these capabilities, even though on some platforms it might make perfect sense to enable them by default or enable them on a per repository basis. This is now possible thanks to added gitoxide specific functions.open::Options
now allow controlling where gitattributes files are loaded from. That way it's possible to, for example, isolate all operations that rely on the gitattribute
system, like checkouts or additions to the index.revision::walk::Platform::selected(filter)
to selectively prune parts of the commit graph.gix::open()
can handle bare repositories with index. These are mis-classified as non-bare repository, which previosuly caused it to get off-track. add Repository::excludes()
and simplify signature of Worktree::excludes()
. Further, this change removes the permission
module without replacement, and moves permissions
into open
.
This corrects an artifact of this crate previously being name gix-repository
and brings these types semantically closer to where they are actually used.
support configuring the connection (i.e. for auth) during clone. This change also removes the generic type for Progress from Connection
which forces it to be passed to every potentially long-running method.
Rename serde1
cargo feature to serde
and use the weak-deps cargo capability. With it it's possible to not automatically declare all optional dependencies externally visible features, and thus re-use feature names that oterwise are also a crate name.
Previously I thought that serde1
is for future-proofing and supporting multiple serde versions at the same time. However, it‘s most definitely a burden I wouldn’t want anyway, so using serde
seems to be the way to go into the future.
remove types that are now available in gix-os
Clippy helped 1 time to make code idiomatic.
revision::walk::Platform::selected(filter)
to selectively prune parts of the commit graph. (ec93f75
)serde1
cargo feature to serde
and use the weak-deps cargo capability. (b83ee36
)4527fb8
)d7173b2
)e4df557
)91134a1
)30a1a71
)2cd5054
)f37a930
)gix index entries
also prints attributes. (08e8fc2
)gix-worktree
(27a39ca
)Repository::attributes()
and Worktree::attributes()
. (bc28443
)Repository::excludes()
and simplify signature of Worktree::excludes()
. (26e6a66
)index.threads
configuration to gix::config::tree
(40a1b74
)gix-worktree
(f722d6b
)3456c84
)gix-worktree
(13a070f
)6ebd61e
)gix::open()
can handle bare repositories with index. (43f695a
)14e64e7
)1a65308
)cb34376
)69faad0
)afe7faa
)Object::into_tag()
and Tag::decode()
methods. (037f52d
)8dbd0a6
)9a6e0d7
)5d2b5d0
)cdef398
)8920229
)19338d9
)gix-fs
crate to consolidate all filesystem utilities (f8cc33c
)USE_NSEC
and USE_STDEV
compile time flags to configured at runtime. (35cb6b4
)23ee47f
)3d47919
)open::Options
now allow controlling where gitattributes files are loaded from. (358500f
)gix-attributes
(1755c81
)gix-os
(b645d28
)0677406
)870bdb2
)b574a39
)b02bf24
)fb31ee8
)d0052c1
)6932017
)ec64a88
)a884121
)61eec5a
)Tree::decode()
and TryFrom<Tree> for gix::objs::Tree
. This makes it possible to obtain mutable trees for creating trees by hand for the purpose of making commits.38eed1d
)d47cebe
)d1e5e12
)d1bd513
)02c4659
)cc48c35
)Tree::decode()
and TryFrom<Tree> for gix::objs::Tree
. (7c2e5c8
)e965b18
)877951a
)gix::discover()
isn't suited for authentication remote operations. We also provide information on how to accomplish this.gix::discover()
isn't suited for authentication remote operations. (87f5621
)7bd8823
)5dc1f9f
)3016a28
)ee36e5b
)serial_test
no default features) (8f2accd
)fetch
operations.clone
operations.c1f1bfb
)c66e298
)3836cc0
)cc0f506
)a22621d
)b43ea6b
)gix-packetline
(4f45814
)531dd19
)fetch
operations. (93d412c
)clone
operations. (4e89c19
)01277a6
)A maintenance release without user-facing changes, but with some fixes in the dependency chain, namely:
gix-credentials
allows credential helpers to ignore stdin
, making it robust when facing helpers that don't read from stdin
.gix-tempfile
refers to the most recent version of tempfile
without pinning it, which removes a security vulnerability.29a0870
)e06f5f5
)85f8b28
)gix-url
(66602bb
)Repository::shallow_commits()
returns an uptodate list of shallow boundary commits.Repository::is_shallow()
to test if a repository is shallow.allow to traverse the entire commit graph of shallow repos Previously, when traversing commits, we would assume to be in a shallow repository if a commit's parent could not be found in the repository.
Now we validate that assumption by reading the ‘shallow’ file to check if the last seen commit is on the commit boundary.
This removes is_shallow
and error_on_missing_commit()
on the revision::walk::Platform
as shallow commits are now known and handled without any guesswork.
18e72c9
)6d88fd2
)1046ea2
)Repository::shallow_commits()
returns an uptodate list of shallow boundary commits. (5bfbb9a
)Repository::is_shallow()
to test if a repository is shallow. (3e69535
)A maintenance release without user-facing changes, primarily for getting the progress-bar updates into cargo
.
93e75fe
)895e482
)0f411e9
)hp-tempfile-registry
feature toggle to control the dashmap
dependency. And also, probably provide a better performance in certain cases.gix-pack
feature toggles related to pack caches available. Previously they would have to be configured by pulling in gix-pack
, which isn't desirable as the only crate we want to expose like that is gix-features
.comfort
feature toggle (default enabled) to make better progress units available. This could be a breaking change for those who turned default-features off, as you may now have to re-add the comfort
feature to get nicer progress messages.gix-tempfile
is now configured to not use the high-performance hashmap anymore. It was hard to justify as tests actually seemed to be faster without it. Put progress::tree
behind the progress-tree
feature toggle. It's a convenience export that implies pulling in more dependencies, so it should be gated.
gate all signal handling behind the signals
feature toggle. This change also consolidates all signal handling into its own module called signal
to provide reusable handlers and as well as well as signal initialization.
Note that the functions to cleanup tempfiles don't interact with the signal registry, hence they still can be called without the signals
feature enabled.
Note that this change sneakily fixes a bug that could have caused a write_all()
on a tempfile that was removed by a signal to enter an infinite loop.
signals
feature toggle. (441f5ac
)ea9fd1d
)e6cc618
)addd789
)94c99c7
)d686d94
)gix-tempfile
is now configured to not use the high-performance hashmap anymore. (b2375e3
)prodash
for performance improvements. (5d00324
)hp-tempfile-registry
feature toggle to control the dashmap
dependency. (256f7d4
)gix-pack
feature toggles related to pack caches available. (fd7eebc
)progress::tree
behind the progress-tree
feature toggle. (fea8c56
)comfort
feature toggle (default enabled) to make better progress units available. (5b0ebd2
)56c005b
)3522cba
)gix-tempfile
(c6785fc
)8ef1cb2
)441a64b
)A maintenance release to restore MSRV (1.64) support.
Repository::object_cache_size()
now unsets the cache if Some(0)
is passed. Previously it would fail. object::tree::diff::Platform::track_rewrites(...)
The invocation of object::tree::diff::Platform::track_rewrites(Rewrites { percentage: None, ..Default::default() })
is now able to explicitly configure perfect rename tracking without percentage of equivalence.
By setting percentage = Some(<fraction>)
one can set how similar both files should be to be considered related.
The same can be configured for copy-tracking, which also includes something like --find-copies-harder
.
Note that by default, renames are considered if a file looks 50% similar, and copies tracking is using the same convention.
bstr
v1.3, use *.as_bytes()
instead of .as_ref()
. as_ref()
relies on a known target type which isn‘t always present. However, once there is only one implementation, that’s no problem, but when that changes compilation fails due to ambiguity.fac6bce
)9604783
)bstr
v1.3, use *.as_bytes()
instead of .as_ref()
. (135d317
)c56d336
)f872ba8
)4f49992
)7fc00f8
)59e9fac
)48f5bd2
)a5869e0
)41d57b9
)e313112
)6efd0d3
)6ccc88a
)c9275b9
)90035a3
)git-testtools
to gix-testtools
(b65c33d
)git-pack
to gix-pack
(1ee81ad
)git-odb
to gix-odb
(476e2ad
)git-index
to gix-index
(86db5e0
)git-diff
to gix-diff
(49a163e
)git-mailmap
to gix-mailmap
(2e28c56
)git-discover
to gix-discover
(53adfe1
)git-protocol
to gix-protocol
(823795a
)git-refspec
to gix-refspec
(c958802
)git-revision
to gix-revision
(ee0ee84
)git-transport
to gix-transport
(b2ccf71
)git-credentials
to gix-credentials
(6b18abc
)git-prompt
to gix-prompt
(6a4654e
)git-worktree
to gix-worktree
(73a1282
)git-hashtable
to gix-hashtable
(26a0c98
)git-worktree
to gix-worktree
(108bb1a
)git-url
to gix-url
(b50817a
)git-date
to gix-date
(9a79ff2
)git-attributes
to gix-attributes
(4a8b3b8
)git-config
to gix-config
(3a861c8
)git-ref
to gix-ref
(1f5f695
)git-lock
to gix-lock
(2028e78
)git-tempfile
to gix-tempfile
(b6cc3eb
)git-object
to gix-object
(fc86a1e
)git-actor
to gix-actor
(4dc9b44
)git-validate
to gix-validate
(5e40ad0
)git-hash
to gix-hash
(4a9d025
)git-features
to gix-features
(e2dd68a
)git-glob
to gix-glob
(35b2a3a
)git-sec
to gix-sec
(eabbb92
)git-path
to gix-path
(d3bbcfc
)gix
changelog (find-replace issue) to indicate renaming from git-repository
(f86b780
)109f434
)1ecfb7f
)This is the last release under this name and merely a notice to inform that git-repository
from now on is gix
.
Furthermore, all git-*
crates belonging to the gitoxide
project will be renamed to gix-*
.
git-repository
to gix
diff.renames
and diff.renameLimit
keys to config tree. In preparation for the implementation. add env::collate::fetch::Error
- a combined error type with its own API. This error API allows to look at all the steps it takes to perform an operation and gather insights from it which require understanding a lot about the semantics of the contained errors.
use enumerations to advertise progress ids publicly. Previously these were an implementation detail which also means they couldn't be relied upon.
Thanks to an intermediate enumeration, they become part of the public API and their actual value is not exposed.
read shared indices by dissolving them into the current one. This allows the ‘link’ extension to be processed correctly, even though it won't be maintained. When written back, the ‘link’ extension will be removed automatically.
^
, ..
, ...
.gitoxide
for clap upgrade to 4.1transfer knowledge about configuration and its usage into the type system. That way it's possible to use configuration overrides, even though ultimately being strings, in a type-safe manner and leverage code-completion while at it.
In that process, we also change Repository::(committer|Author)()
to return Option<Result<...>>
to be able to account for date parse errors.
windows
upgrade)default author and committer time When needing to fallback to a default author or committer signature, the time from GIT_AUTHOR_DATE should only be used for the author and GIT_COMMITTER_DATE should only be used for the committer and not intermixed. This change enforces that constraint.
signature name and email resolution The name and email for the author and/or committer may come from different config files. For example, user.name may be set in the global config and user.email may come from the repository local config.
This case was broken due to Personas.from_config_and_env() only looking in the last config section containing, for example, a “user” section. Thus if the user.name and user.email are split across multiple sections (i.e. originating from separate config files), the fallback name and email (“gitoxide” and “gitoxide@localhost”) would be used.
The solution is to use gix_config::File::string() to lookup the name and email separately. The string() method correctly resolves the value by looking through all sections from all files in the correct order.
committer_or_default()
, author_or_default()
and user_default()
. This means that all methods that previously succeeded by adding a default will now fail.
This is preferable over ‘doing something’ and also admits that gits guesswork that tries to find user information by querying the system is nothing we want to repeat.
ssh
urls can ask for a different username. If authentication fails, the user will be queried for a different username to try authentication via ssh mechanisms again. explain how it‘s possible to deal with the first commit when comparing trees The reason the other tree isn’t an option is that it's a special case that can more easily be handled with an .unwrap_or_else(|| repo.empty_tree())
(or similar) for those who need it.
Making the empty tree explicit also helps to deal with diffs from the empty tree (which can't be Option<Tree>
) to the first tree of the first commit.
http.schannelCheckRevoke
open::Options::open_path_as_is()
allows to avoid ‘smart opening’ to try the path verbatim. The path to git repositories is well-known as they either end in .git
or .../.git
. If this is not the case, by default we append /.git
to the path.
With this new option enabled, no path transformations apply to open the given path as is, which is preferable if you know it's a non-standard git repository folder name.
GIT_(COMMITTER|AUTHOR)_(NAME|EMAIL|DATE)
with git configuration. That way it becomes more obvious where values are coming from. expose gix-features
crate at root under features
. That way application developers can use more of the utilities that power most of the gitoxide
plumbing crates.
Remote
knows about its tagOpt
configuration. That way it‘s clear if it should or shouldn’t fetch included/reachable tags automatically.
The default setting for this is to include tags, similar to git
.
The fetch_tags()
accessor allows to query this information, and the with_fetch_tags()
builder method allows to set the value comfortably right after creating the Remote
instance.
The tagOpt
key will also be written as part of the remote's git configuration.
Clone operations can set the Tags
setting when configuring the remote in a callback.
This also comes with a fix to assure that ref-updates aren't skipped just because there was no pack to receive. That way, locally missing refs or tags will automatically be put back.
network related Error type support is_spurious()
method. That way the caller can determine more easily if it makes sense to try again.
Make prodash::tree
available as progress::tree
.
read worktree specific configuration to override the one from the shared repository. This is intensively used when space checkouts are created, along with Cone mode. Thus it's the basis for properly interpreting sparse checkout options which are set on a per-worktree basis.
add permissions::Environment::http_transport
. That way it's possible to deny using environment variables that affect the HTTP transport, like setting the proxy.
open::Options::modify()
as general pattern to allow builder methods usage in &mut self
. That way it's easier to configure both the full
and the partial
trust instances of discovery options.
Add Repository::commit_as(committer, author, …)
convenience method. That way it's, very much beyond convenience, possible to set the time of a commit.
Many thanks to @epage for the suggestion.
upgrade to prodash 21.1
and add Ids
to all progress instances. That way callers can identify progress they are interested in, say, for selective visualizations.
provide a clearer error message when trying to open a git repository that isn't one.
http transports can now reuse a connection. This makes connections more efficient generally and cargo
relies on that behaviour in their tests as well.
allow to open a Repository
from if ‘config’ file is missing. In this case, treat it similar to having an empty repository configuration file and assume defaults everywhere.
improve error verbosity when fetching and cloning
tree::diff::Platform::for_each_to_obtain_tree()
now properly surfaces user provided errors. Previously it would squelch them unintentionally.
First discovered via https://github.com/Byron/crates-index-diff-rs/issues/35.
when fetching from file://, don't upset windows by trying d:/foo
, use d:\\foo
instead.
config::CommitAutoRollback
now implements DerefMut
.
default features are set to max-performance-safe
to assure compatibility. Previously the max-performance
setting might have caused issues during compilation or issues at runtime if libraries like git2
are used in the same binary, and the new default feature settings maximizes compatibility so this won't happen.
For best performance, however, one will have to activate the max-performance
feature on top of that.
environment variable permissions are per topic. Now Permissions
for environment variables are so that they are by topic instead of by prefix, by default. That way it's easier to allow or deny particular sets of related environment variables.
The catch-all permissions by prefix are still present for all other variables that aren't contained in one particular topic.
open::ReplacementObjects
is removed in favor of two custom git-configuration flags. Now it's possible to map the environment variables GIT_REPLACE_REF_BASE
and GIT_NO_REPLACE_OBJECTS
to custom git configuration keys which can also be set, namely gitoxide.odb.replaceObjectsRefBase
and gitoxide.odb.noReplaceObjects
.
Along with the possibility of disabling the usage of GIT_
prefixed environment variables one reaches the previous level of control without making object replacement a special case.
interrupts::init_handler()
can now be undone. This can be done by calling deregister()
or auto_deregister()
on the return value of interrupts::init_handler(…)
.
That way it's possible to temporarily do interrupt handling only while some methods that require it are running.
represent object cache configuration like GITOXIDE_PACK_CACHE_MEMORY
in git-configuration. That way there is a unified system for how to set values, which may be overridable by configuration variables or not.
With this changes, the explicit application of environment variables for setting the cache isn't required anymore as everything happens using git-configuration, and automatically, while providing full control like before.
remove SnapshotMut::apply_cli_overrides()
in favor of open::Options::cli_overrides()
.
more type-safety for remote names by making clear they can be named after URLs.
Remote::with_refspec()
to Remote::with_refspecs()
to allow adding more than one refspec as part of the builder. Make reqwest
TLS backend configuration easy. We provide the choice of native-tls
or rust-tls
. If none is provided, the user can configure on their on similar to how it's done in gix
.
Please note that a choice now has to be made or HTTPS will not be available, so use one of…
gix::Commit::describe()
chooses tag names (more) correctly. Previously, if there were multiple choices for tags on the same commit, git describe
would disagree with gitoxide
due to different prioritization of names.
This has now been fixed.
also sort entries lexicographically
rename blocking-http-transport
feature to blocking-http-transport-curl
; add blocking-http-transport-reqwest
. With the new and relatively immature second tier http backend we pave the way to support builds without the use of open-ssl and probably many other C libraries.
Note that it's early and not http
configuration option is implemented yet.
upgrade edition to 2021 in most crates. MSRV for this is 1.56, and we are now at 1.60 so should be compatible. This isn‘t more than a patch release as it should break nobody who is adhering to the MSRV, but let’s be careful and mark it breaking.
Note that gix-features
and gix-pack
are still on edition 2018 as they make use of a workaround to support (safe) mutable access to non-overlapping entries in a slice which doesn't work anymore in edition 2021.
Id
implements std::fmt::Display
Remote::repo()
to obtain the underlying repository. For convenience.gitoxide.userAgent
variable.env::agent()
for obtaining the default client agent string.maybe-async
crates needs a feature to be set. Doing so is hard(er) if it’s not already used in the main crate, which we do not and will do our best to avoid. add remote::Connection::with_transport_config()
, change the way *::transport_mut()
is used. Previously transport_mut()
was supposed to be used for calling configure()
, but that doesn't work anymore as configure()
can only effectively be called once the initialization of the Connection is complete, as it may depend on the Remote name AND the credential provider for proxy auth credential acquisition.
Thus we allow callers to set the transport options they need in advance for it to be used when needed.
object::tree::diff::change::DiffPlatform
to object::blob::diff::Platform
.DiffPlatform::counts()
, open DiffPlatform
for use of gix-diff::blob::*
. diff algorithm is controlled by git configuration diff.algorithm
Query of core.logAllRefUpdates
is now fallible. This is the same behaviour as shown by git
, which requires valid values or aborts.
automatically handle .keep
files after writing a pack bundle to disk. The logic implemented here tries to do the right thing, that is when we have reason to believe that the objects in the pack are linked up with a ref, we delete the keep file automatically.
However, if there was no local ref edit as the ref specs didn't contain local destinations, or if the pack was empty, then keep the .keep file and leave it to the caller to handle.
Use core.askpass
when building the credential helper. Previously it would only consider the environment variable, which can still override the provided git-configuration at core.askpass .
remote::fetch::Prepare::handshake_outcome()
to obtain server information right after listing refs.
open::Options::config_overrides()
for early configuration; support for init.defaultBranch
.
don't allow non-bare repositories to be initialized into non-empty directories.
init_bare()
now creates the destination directory if it doesn't exist.
build correct path for $HOME/.config/…
files. The special per-user ignore
and attributes
files can also be defaulted if some environment variables are set and may be accessed.
Previously the default for $HOME
was incorrect, as it was missing the intermediate .config/
directory. This is now present to build paths exactly like git.
ref-map filtering now uses correct prefixes. Previously specs could get filtered out server-side as a matching prefix was entirely missing.
Repository::branch_remote_name()
returns reference::remote::Name
. That way it‘s made clear the remote can also be a URL, while rejecting illformed UTF8. The latter isn’t valid for remote names anyway as these only support a very limited character set.
Note that this error currently is degenerated, making it appear if the remote name doesn't exists if illformed UTF-8 is found in what appears to be a symbolic ref.
be specific about the kind of diff::Error
, moving it to diff::for_each::Error
.
Tree::lookup_entry*()
returns attached Entry
type. That way chaining gets even easier.create::into(…)
takes create::Kind
to determine if it‘s bare or not. First of all, bare
is not an option anymore, but a parameter as it can’t be defaulted. Other public signatures change as well to accommodate for it.DiffPlatform::text()
to *::lines()
. This is more specific as one could also do character changes in a single line, and it adapts the signature to the new imra-diff
powered mechanism, for a 2x speed boost.Url::try_from(path: &std::path::Path)
for more convenient instantiation.config::SnapshotMut::commit()
to make clear it's transactional.config::SnapshotMut::forget()
to forget all changes before applying them. The documentation was update to make clear when the changes are applied.Repository::find_default_remote()
which works on detached heads as well.Remote::rem_map()
now specifies ref-prefixes to the remote. This can greatly reduce the amount of refs sent.lock_mode
from all methods dealing with reference edits. It is now read from core.filesRefLockTimeout
accordingly.fetch::Transport::configure
to generically configure any transport. Object::peel_to_tree()
as convenience method. It‘s very common to try to work with trees, so let’s make that easier.
interrupt::Iter
now allows accessing the inner iterator without consumption. This is useful if these provide additional out-of-band information.
Once a change is obtained, it's easy to obtain changes line by line.
obtain a refmap after listing refs via remote::Connection::list_refs_to_map()
. With it it‘s possible to establish a relationship between what’s about to be fetched to local tracking branches as established by refspecs for fetching.
Add permissions::Config::git_binary
field When true, default false, inject the git installation configuration file if present at the cost of one git config
invocation.
Note that we rely on the underlying gix-config
crate to not load duplicate files.
We also currently lie about the scope which is actually unclear - have seen ‘unknown’ or normal scopes like system
.
add prompt
to top level forwarding #450)
Repository::find_object()
, previously it was not locatable when used during rev-spec parsing.Reference::remote()
can produce remotes for URLsrev_parse_single()
bstr
to 1.0.1
remote_name()
result clearTree::lookup_path()
-> Tree::lookup_entry()
.Remove ‘unstable’ feature. It's not worth maintaining it especially since everything is in pre-release mode right now.
It might be something to re-introduce after go-live.
max-performance-safe
mode does not include zlib-ng adjustments anymore. git2 cannot handle this and fails to fetch packs after a couple of seconds.
It‘s unclear what is causing this except that git2 doesn’t like libz with zlibng support enabled, which happens if git2 in the same tree is with us.
Transitively through a kindly contributed fix in the gix-discover
crate, Repository
can now be opened on exFat
volumes.
Repository::(try_)find_object()
This matches the behaviour of git and libgit2. We consciously chose to only do this on the highest level, allowing lower levels to determine if the object exists or not.find::object::*::Error
publicly available.Reference::delete()
for simple reference deletionReference::set_target_id()
to easily set the target id of a referenceReference::head_ref()
to quickly access the reference the head points to.Commit::tree_id()
now returns a connected idgix-diff
is now included by default as part of core functionalityA maintenance release without user facing changes.
fast-sha1
in gix-features separately. That way one has an angle on compile failures in client libraries, see https://github.com/o2sh/onefetch/pull/752 for motivation.Repository::write_blob[_stream]()
to more easily write blobs. That way, one won't have to use the underlying objects
database but can remain in the land of Repository
enabled types for longer.SnapshotMut::apply_cli_overrides()
to make it easy to support things like -c
Repository::config_snapshot_mut()
to mutate configuration values in memory. It‘s a first step towards writing changes back to disk, which can work already, but probably wouldn’t as we currently don't localize changes to only one section type, i.e. Api, but instead may change values from other sections.A maintenance release that speeds up commit.describe()
performance if max_candidates()
is 0.
open::Options::strict_config()
, with lenient being the default. This means API users will get libgit2 behaviour but commands like gix
can change options to emulate git
behaviour.Kind
can now represent submodules. This should complete the list of git repository types and flavors.open()
and discover()
support opening submodules. This includes submodule checkouts as well as their original module git directories.open::Options::lenient_config(…)
to default otherwise invalid configuration values where possible Originally required by https://github.com/starship/starship/issues/4266 .object::tree::EntryRef
Head::prior_checked_out_branches()
Repository::index()
and Worktree::index()
. These methods provide a possibly updated shared index.Repository::object_cache_size_if_unset()
Commit::message_raw_sloppy()
to provide yet another way to obtain a commit message.rev_spec::parse::ObjectKindHint
to support core.disambiguate
. The latter is seemingly undocumented in the typical place, gix-config.Remote::with_refspec()
to add new unique refspecsRemote::push_url()
to set it after the factRepository::remote_at(…)
to create an unnamed remoteTryFrom
: String
and &str
Head::into_remote()
to try really hard to find the correct remoteRepository::remote_default_name()
to obtain the repo-wide remote for a a direction.Repository::branch_names()
to obtain branch names for which configuration exists.open::Options
.open::Options::with()
revision
module and move rev_walk
there. Let's embrace the idea of structured modules and platforms in the right spot in the module hierarchy instead of forcing known names on it that over-simplify. remove permissions::Config::strict()
as they were unused internally. Furthermore, they were allowing everything as before so better not to have it.
rename Repository::load_mailmap*
to Repository::open_mailmap*
. For consistency with other similar methods.
remove Repository::load_index()
in favor of repo.worktree().open_index()
.
gix_revision
is now available in revision::plumbing
. That way it won't clash with the higher-level constructs on top of it which use the same names.
Turn id::Ancestors
into general-purpose RevWalk
.
remove Permissions::git_dir
field entirely. It was meant to help dealing with bailing out if the git dir isn‘t fully trusted, but the way this was done was over-engineered especially since the read-only permission level wasn’t implemented at all.
That function is now performed by a new flag, the bail_on_untrusted
which is off by default.
rename Repository::remote_ref()
to ::branch_remote_ref()
Repository::rev_parse()
returns a RevSpec
. This lays the foundation for actually handling rev-specs faithfully. Previous users should use rev_parse().single()
to obtain a single object id which was the only supported usecase previously.@{1}
in new repos; rename Head::into_referent()
to ::try_into_referent()
The signature change will prevent such issues in the future as one cannot simply ignore new repositories.safe.directory
. In practice, this code will rarely be hit as it would require very strict settings that forbid any operation within a non-owned git directory.gix-config
is now accessible in git-repository::config
.gix config
lists all entries of all configuration files git considers. Filters allow to narrow down the output.config::Snapshot::trusted_path()
to obtain trustworthy paths. We also apply trust-based config query during initialization to assure we don‘t use paths which aren’t owned by the current user.Repository::config_snapshot()
to access configuration values.gix-config
to write config file on initialization, including logallrefupdates
and precomposeunicode
.core.logallrefupdates
configuration setting. Make SignatureRef<'_>
mandatory for editing reference changelogs. If defaults are desired, these can be set by the caller.
Repository::committer()
now returns an Option
, see ::committer_or_default()
for a method that doesn't.
remove local-time-support feature toggle. We treat local time as default feature without a lot of fuzz, and will eventually document that definitive support needs a compile time switch in the compiler (--cfg unsound_local_offset
or something).
One day it will perish. Failure is possible anyway and we will write code to deal with it while minimizing the amount of system time fetches when asking for the current local time.
Associate file::Metadata
with each File
. This is the first step towards knowing more about the source of each value to filter them based on some properties.
This breaks various methods handling the instantiation of configuration files as file::Metadata
typically has to be provided by the caller now or be associated with each path to read configuration from.
lossy
load mode. There is a lot of breaking changes as file::from_paths::Options
now became file::init::Options
, and the same goes for the error type.realpath()
easier to use by introducing realpath_opt()
. That way there is consistency about how many symlinks to follow.Debug
for Reference
.Repository::head_name()
. A convenient way to obtain the name of a head, if not detached.Commit::describe()
now returns annotated tags before lightweight ones and prefers more recent ones as welldescribe()
to work on shallow clones.allow reading information about remote branch
path::discover()
now returns the shortest path. If and only if it canonicalized the source path. That way, users will still get a familiar path. This is due to parent()
not operating in the file system, which otherwise would be equivalent to ..
, but that's not how we work.
Maybe we should overhaul the way this works to use ../
instead and just ‘absolutize’ the path later (std::path::absolute()) is on the way for that.
remove unused variant
integrate trust model into repository discovery That way it‘s possible to ignore repositories which effectively aren’t owned by the current user, or to not ignore them (default) but assign tighter permissions to the repository.
path::discover::existing()
-> path::discover()
remove values::*Error
in favor of value::parse::Error
. This makes it easier to work with errors in practice, we are either interested in the value that failed to parse to try something else or want a nice user message.
Having one decode error type facilitates that.
gix-credentials
in gix-protocol
auto-calculation of a good hex-len, like what git does If the core.abbrev
value isn't set or is set to auto
.
Commit::describe()
A way to fluidly configure a git describe
operation and run it.
Along that, a new Tag
top-level object was added as well to provide convenient access to otherwise lower-level objects. It‘s not strictly required for our implementation here but it’s needed for a symmetric API.
support for object replacement The Repository now respects replacement refs created by git replace
and picks up environment variables for its configuration as well.
Which environment variables are used is fully configurable.
support for trimming of whitespace around name and email It‘s separated from parsing to assure we can round-trip, but it’s made easy to obtain trimmed results using new methods.
This high-level git-repository will also trim by default now.
Repository::head_commit()
A shortcut to get to the commit much faster.
ein tool estimate-hours
now supports mailmaps
Repository::head_id()
A long-needed shortcut.
gix repository mailmap entries
unstable mailmap module
Commit::short_id()
in-manifest and in-lib documentation of feature toggles
easy::Commit::time()
to access the committers time conveniently.
easy::Head::name() to learn about the name of the HEAD ref It's mainly for completeness to provide people with with a FullNameRef
of HEAD.
easy::Head::peel_to_commit_in_place()
It allows to quickly get a commit from the head, something most people want when getting started with any kind of tool.
Repository::load_index()
This method makes the index of the default workspace available.
ein t find
They use git-files which point to the actual repository data.interrupt::Iter
, rename interrupt::Iter
-> interrupt::IterWithError
return
try_into::Error. That way, the typical usage of
try_into_commit()?will not result in a strange error about
Object` not being convertible into some error. We think having a real error there is the least surprising.do not install signal handlers by default The previous behaviour is meant to be convenient for the casual user even though it ends up being surprising when used in applications that install their own signal handlers and need more control over how the program shuts down.
This is now fixed by requiring an explicit setup()
call before the first tempfile is created, which makes it a breaking change.
Id::prefix
-> Id::shorten()
It's definitely more intuitive that way. Add easy::Tree::traverse()
platform
Add easy::Commit
object It allows to more conveniently access commit information.
easy::Oid::ancestors()
now supports sorting()
and iteration by first commit only Especially the sorting is useful to avoid having to sort commits by hand after collecting them.
Use GITOXIDE_OBJECT_CACHE_MEMORY to control how much object cache is used Note that this is mostly for debugging or quickly seeing if object caches help with certain operations.
Ideally the implementation knows themselves and sets up caches accordingly, probably after trying it with these environment variables.
rename easy::Object
methods returning Ref
objects to have ref
in their name That way, it's more clear that the Ref
versions are low-level ones whereas the into_
ones are higher-level ones that are part of the easy
suite.
Rename OwnedObject
to DetachedObject
The latter more clearly indicates what the difference is to Object
(which is attached and carries a lifetime)
Remove easy::borrow::Error entirely; support for multiple objects per handle This massive simplification finally allows any amounts of objects to be created while adding support for reusing their data buffers thanks to a simple free-list stored with the handle.
rename easy::Object
to OwnedObject
; remove Ref
suffix from ObjectRef
and TreeRef
use gix_odb::Find*
traits in prelude, instead of gix_pack::Find*
These are higher-level and generally more desirable. The Find traits in gix-pack
are more useful internally when packs have to be handled directly, for example when generating packs.
rename easy::State to easy::Handle As the first step to remove the ‘Easy’ abstraction.
fully rely on OdbHandle in repository State
Rename Repository::odb
to Repository::objects
This way it's more inline with Repository::refs
.
remove Repository::refresh_object_database() With the linked DB this is simply not possible anymore and we expect these updates to happen automatically in future for greater convenience.
For now, in order to refresh a repository, one has to reopen it.
Rename Handle
to Cache
Because this is exactly what it is effectively. Also add some basic instantiation for the new object store.
remove borrowing Repo as possible failure cause The easy::Handle
is now a full (but shared) clone of the original Repository with additional thread-local state, hence there is no more need for a way to access the original repository.
remove Easy… abstraction in favor of Handle This great reduction of complexity allows for being multi-threading capable by default with the option to turn that off at compile time.
All to|into_easy…()
methods are removed in favor of to_easy()
along with the removal of all Easy
types in favor of the single
remove pack-cache from Find::try_find(…)
With the new architecture this can be an implementation detail without forcing it to be Sync.
move gix_pack::data::Object to gix_object::Data, massively alter gix_odb::Find trait This will break a lot, but has to happen to prepare these traits for the next generation of object databases.
With changes to gix-ref
, what follows is all the adjustments made to simplify the gix
implementation.
file::Store::iter() is now a platform, with .all()
and .prefixed(…)
respectively This way, it's possible to keep shared ownership of the packed buffer while allowing the exact same iterator machinery to work as before.
file::Store::(try_)find(…, packed) was removed The packed buffer is now handled internally while loading it on demand. When compiled with gix-features/parallel
the file::Store
remains send and sync.
The packed refs buffer is shared across clones and it's recommended to clone one file::Store
instance per thread, each of which can use its own namespace.
move gix_ref::file::WriteRefLog
to gix_ref::store::WriteRefLog
ref namespaces are now thread-local Previously these were shared in the shared Repo instance, which makes threaded applications impossible to remain deterministic across multiple connections.
Now they are local to the thread, which allowed some methods to remove their Result<> as they cannot fail anymore, the reason for this being a breaking change.
file::Store::base
is now file::Store::base()
and read-only That way, file databases can‘t be repositioned anymore, it’s recommended to recreate it if that's desired.PartialNameRef
to be created from owned itemsA maintenance release to properly dealing with previously breaking changes in gix-hash
.
Make gix_url::Url
available under gix::Url
add easy::ext::ObjectAccessExt::tag(…) to create tag objects It's a quick sketch on how tag object creation could work.
Note the duplication the method name using traits, which seems like a good solution to the problem of differentiating tag objects and tag references while keeping the method name short.
Most will only ever need one, right?
Even in my example that's not the case, so maybe we have to rename it.
Make gix_url::Url
available under gix::Url
easy::Object
to specific object kind This also makes the API more consistent while being more idiomatic.easy::Object::to_(commit|tag)_iter()
… …to easy::Object::try_to_(commit|tag)_iter()
for consistency.*::State
into *::Platform
loose reference iteration with non-dir prefixes… Previously it was expected for the prefix Path
to always exist for the prefix to be valid. This, however, is not similar to packed prefixes, which allow non-dir prefixes as well.
Now we will check if the prefix is actually a directory, and if not split it into its parent directory and the filename portion. The latter is then used for prefix matching file names within that directory.
Add ‘references().all().peeled().’… …to not only make typical usage of iterated references more convenient but also work around a double-borrow error one would see otherwise.
filter refs correctly, but… …it needs a way to peel references right away without trying to double-borrow. This means the Iterator needs to implement this.
improved changelog… …akin to ‘Keep a changelog’.
apply_environment()
easy::Object::try_to_commit()
now returns Result<CommitRef>
… …without the nested Option
, folding the type mismatch into a specific conversion::Error
instead.ObjectAccessExt::tag(…)
to *::tag_reference(…)
, add easy::Object::try_to_tag()
This one also contains the first and probably only test for tag object creation.max-performance
feature from default set until the msvc
build issue is fixed. Otherwise it will surprisingly break windows builds. loose reference iteration with non-dir prefixes… Previously it was expected for the prefix Path
to always exist for the prefix to be valid. This, however, is not similar to packed prefixes, which allow non-dir prefixes as well.
Now we will check if the prefix is actually a directory, and if not split it into its parent directory and the filename portion. The latter is then used for prefix matching file names within that directory.
Add ‘references().all().peeled().’… …to not only make typical usage of iterated references more convenient but also work around a double-borrow error one would see otherwise.
filter refs correctly, but… …it needs a way to peel references right away without trying to double-borrow. This means the Iterator needs to implement this.
improved changelog… …akin to ‘Keep a changelog’.
prelude::ConfigAccessExt
to prelude::RepositoryAccessExt
prelude::ObjectAccessExt::commit()
signature changenetwork
was replaced by more finegrained options for blocking and async networking, as well as optional http transportinit()
init_bare()
Repository::init(Kind)
open()
Repository::open()
easy::Head
easy::ext::ReferenceAccessExt::head()
ext::ReferenceExt
traitpath::Path
to Path
init::repository(dir)
-> path::create::into(dir, **Kind**)
EasyArcExclusive
type, now available thanks to parking_lot
0.11.2object
to objs
to be equivalent to refs
and make space for the new object
module