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.
threading::make_mut()
to allow obtaining a mutable reference to shared data. This is particularly useful when handling an index file, which may be shared across clones of a repository. cargo-auditable build error Use prodash
instead of dep:prodash
in gix-features and tracing
instead of dep:tracing
in gitoxide-core.
The dep:mydep
syntax removes the implicit mydep
feature for optional dependencies, this triggers a bug in cargo that affects cargo-auditable
. See https://github.com/rust-lang/cargo/issues/12336
This affects some Linux distributions like NixOS which use cargo-auditable
by default. Related issues:
https://github.com/rust-secure-code/cargo-auditable/issues/124
FnOnce
. This way, all unnecessary cloning is avoided.8a60d5b
)54a8495
)threading::make_mut()
to allow obtaining a mutable reference to shared data. (5197196
)FnOnce
. (70c7c29
)14e0763
)7a8f793
)1f2ffb6
)progress
in PrepareFetch::fetch_only
(70989b3
)prodash
It makes proper usage of Progress
types easier and allows them to be used as dyn
traits as well.prodash::Count
to indicate that nothing more than counting is performed, in place of prodash::Progress
dyn
trait where possible. This reduces compile time due to avoiding duplication.8bd0456
)375db06
)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
)363ee77
)A maintenance release without user-facing changes.
30b2761
)f23ea88
)interrupt::Write
to auto-fail writes on interrupt.16295b5
)c4cc5f2
)5cb3589
)2fc66b5
)1dda48b
)interrupt::Write
to auto-fail writes on interrupt. (7179509
)9064ea3
)in_parallel_with_finalize
to support a usecase for gix-worktree
interrupt::Write
to auto-fail writes on interrupt.zlib::stream::inflate::ReadBoxed
. It was a special-case type that was only used in one spot, and thus not really that interesting to have in a shared place.68ae3ff
)c70e54f
)e4dded0
)8a46a7e
)zlib::stream::inflate::ReadBoxed
. (032cea3
)b19a56d
)in_parallel_with_finalize
to support a usecase for gix-worktree
(2a76929
)A maintenance release without user-facing changes.
clippy::redundant-closure-for-method-calls
lint add tracing
feature toggle to provide minimal tracing API This API is based on tracing-core
, not on tracing, and provides a limited API that is always available, while being a no-op if tracing
isn't enabled.
That way, plumbing crates can add instrumentation at will.
new_thread_state()
functions are now FnOnce
across the board. This properly communicates that they will only be called once per thread, while providing more options to the implementor.ea9f942
)18b0a37
)aa16c8c
)4f635fc
)tracing
feature toggle to provide minimal tracing API (093efaf
)new_thread_state()
functions are now FnOnce
across the board. (bc69804
)fe59956
)clippy::redundant-closure-for-method-calls
lint (bcad5c2
)zlib::Inflate::reset()
. That way, each instance can be reused.prodash::RawProgress
available. It's an object-safe version of the Progress
trait.make current thread-count accessible in slice-workers. Threads started for working on an entry in a slice can now see the amount of threads left for use (and manipulate that variable) which effectively allows them to implement their own parallelization on top of the current one.
This is useful if there is there is very imbalanced work within the slice itself.
While at it, we also make consumer functions mutable as they exsit per thread.
Clippy helped 1 time to make code idiomatic.
0fa04bc
)9a9fa96
)8f15cec
)ae845de
)9525ac8
)d9d9bc0
)zlib::Inflate::reset()
. (d81b7e3
)420553a
)2578e57
)dbf8aa1
)2087032
)3ef5c90
)3eff567
)3a45973
)9375cd7
)b057500
)f4a44f7
)facaaf6
)2f275d5
)prodash::RawProgress
available. (add5ea8
)gix-os
8dbd0a6
)7f06458
)9a6e0d7
)23ee47f
)3d47919
)gix-os
(b645d28
)c5f3fc8
)d7f250d
)b574a39
)A maintenance release without any user-facing changes.
std::thread::scope()
instead of crossbeam-utils::thread::scope()
. This cuts a direct dependency. We can't removed crossbeam-channel
yet due to the need for single-produce-multiple-consumer channels.0f411e9
)gix-pack
(6db30ef
)04ab852
)std::thread::scope()
instead of crossbeam-utils::thread::scope()
. (571ec0d
)quick-error
with thiserror
This increases the compile time of the crate alone if there is no proc-macro in the dependency tree, but will ever so slightly improve compile times for gix
as a whole. make bytesize
available in progress
. Note that it is stubbed out unless the progress-unit-bytes
feature is set.
add progress::count_with_decimals()
and progress-unit-*
feature toggles. The new feature toggles allow controlling the inclusion of the bytesize
and human_format
crates, which can be toggled with the progress-unit-bytes
and progress-unit-human-numbers
respectively.
Without these features, the respective functions exist but don't provide special formatting, making bytes and larger numbers harder to read.
num_cpus
in favor of std::thread::available_parallelism()
. num_cpus
was needed back in the days when std
didn't support such functionality yet.dep:
syntax to hide optional features from feature-set. That way, the set of features is clearly defined and controlled. This migth break applications who relied on direect access to features named after optional dependencies.e6cc618
)addd789
)94c99c7
)d686d94
)prodash
for performance improvements. (5d00324
)bytesize
available in progress
. (7a44231
)progress::count_with_decimals()
and progress-unit-*
feature toggles. (7f6a807
)dep:
syntax to hide optional features from feature-set. (0cc5480
)num_cpus
in favor of std::thread::available_parallelism()
. (264f78a
)quick-error
with thiserror
(cce96ee
)8ef1cb2
) note that crates have been renamed from git-*
to gix-*
. This also means that the git-*
prefixed crates of the gitoxide
project are effectively unmaintained. Use the crates with the gix-*
prefix instead.
If you were using git-repository
, then gix
is its substitute.
compatibility with 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.
9604783
)bstr
v1.3, use *.as_bytes()
instead of .as_ref()
. (135d317
)add support for explicit non-parallel iteration. That way we can allow the implementation to choose whether they need greatest speed at some cost or not.
This also allows us to create a new thread-pool on each iteration as those who expect high cost or many files will likely chose to do that instead of single-threaded iteration, which nicely contains the threads needed and avoids keeping them alive as part of some global pool.
make jwalk fully optional
mild refactor of paths module to waste less on unix Previously it might have performed find-and-replace on unix paths even though they wouldn't have changed afterwards, yet costing an allocation.
There is also the realization that it should go into its own crate to have neater import paths and more convenience.
interrupt::Iter
, rename interrupt::Iter
-> interrupt::IterWithError
remove fs-jwalk-single-threaded
in favor of fs-walkdir-parallel
. This way, jwalk
and the dependencies (and troubles) it brings have to be opted in, but also allow other users to actually opt out while allowing the parallel
feature to be in effect.
In other words, previously the parallel
feature conflated jwalk
dependencies into the tree, which isn't the case anymore.
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.
remove path
module in favor of git-path
crate
renamed progress::Read::reader
-> progress::Read::inner
parallel utilities now use Send + Clone
insted of Send + Sync
This helps to assure that thread-local computations always work with the kind of types we provide. The ones that are carrying out actions are notably not Sync
anymore.
We cater to that by defining our bounds accordingly, but for those who want to use other utilities that need Sync, using types like Repository
and thread_local!()
is the only way to make this work.
re-export prodash::progress::(Task|Value)
directly under progress
This is in addition to the progress
re-export which allows everything but yields less optimal import paths.
re-export prodash
in progress
module. That way one can access all types even if they are not re-exported.
export prodash::progress::Id
in the progress
module for convenience.
zlib::inflate::Error can now represent zlib status codes that represent failure.
name spawned threads That way it‘s a bit more obvious what’s happening when the CPU goes up in flames.
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.
fs::Snapshot
can Clone
if T
can Clone
.
perfect granularity for threads processing with in_parallel_with_slice()
add progress::Step|StepShared
as types of prodash
This may help to use the Progress::counter()
method as part of method signatures, being an Option<progress::StepShared>
.
add zlib-ng feature to allow linking against system libz-ng Allow to use zlib-ng (zlib-ng-sys) with native API (no compat mode) that can co-exist with system libz (loaded by e.g. libcurl). This is used in gitoxide package on Alpine Linux.
use docsrs feature in code to show what is feature-gated automatically on docs.rs
pass --cfg docsrs when compiling for https://docs.rs
add fs-jwalk-single-threaded
feature to specifically decouple jwalk
from rayon It has been an issue in https://github.com/starship/starship/issues/4251 apparently and rayon interactions can be difficult.
fs::Snapshot
to on-demand reload shared resources.
initialize Time
from now_utc
and now_local
Localtime support depends on some other factors now, but that will only get better over time.
We might have to document unsound_local_time
at some point.
Add git_config::values::Path
for a typesafe git path Add a Path
type to the git_config::values
which can be interpolated according to gits own path interpolation rules.
add new ‘path’ module for all path-related conversions It's meant to unify all path and byte related handling to help assuring encoding is handled correctly or at least similarly everywhere.
in-manifest and in-lib documentation of feature toggles
Add InOrderIter to ‘parallel’ module This iterator makes possible identifies results using a sequence id and returns only consecutive items.
Use it to collect unordered results produced by threads. It‘s advantage to collecting yourself and sorting is the potential for a smaller memory footprint of in-flight results, one doesn’t have to collect them all for ordering, necessarily.
Make a scope-like abstraction available This allows more delicate threading control like is required for the index.
decoding of variable int numbers. It's here only so that we can share the code across crates, for now without any feature toggles.
Add progress::Write
to automatically pass bytes written to a progress instance
add threading primitives with feature toggle If the threading
feature is set, the threading
module will contain thread-safe primitives for shared ownership and mutation, otherwise these will be their single threaded counterparts.
This way, single-threaded applications don't have to pay for threaded primitives.
0f5f47d
)e695eda
)0c81769
)a517e39
)4eebaac
)e0d437c
)47860b7
)f54bf4b
)3f89b63
)e3977fe
)7721b5f
)cb7e4e7
)ca095ed
)a22cb0f
)b8400ed
)84cb256
)path
module in favor of git-path
crate (90611ce
)d078d6e
)8345b7c
)0b4b90f
)7e76796
)f86eacc
)3b324b8
)e5f6943
)8cbe85d
)interrupt::Iter
, rename interrupt::Iter
-> interrupt::IterWithError
(8945d95
)interrupt::Iter
(0f0d390
)15ff212
)89a41bf
)Time
from now_utc
and now_local
(c76fde7
)780f14f
)1d07934
)493dbae
)git_config::values::Path
for a typesafe git path (e4d6685
)2e1437c
)6b283dc
)1cc95ce
)909aa14
)86f6e50
)9258b7b
)3c8581f
)4b320e7
)711fd5c
)561d2e7
)fs::Snapshot
to on-demand reload shared resources. (7f199f0
)git-ref
(8d0cce7
)78222c2
)ReloadIfChanged
in git-ref (e8de0ef
)e3aff0c
)44371a1
)3c99e7f
)6446b39
)rust-version
to 1.64 (55066ce
)6efd0d3
)6ccc88a
)c9275b9
)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-commitgraph
to gix-commitgraph
(f1dd0a3
)git-mailmap
to gix-mailmap
(2e28c56
)git-discover
to gix-discover
(53adfe1
)git-chunk
to gix-chunk
(59194e3
)git-bitmap
to gix-bitmap
(75f2a07
)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-command
to gix-command
(d26b8e0
)git-packetline
to gix-packetline
(5cbd22c
)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-quote
to gix-quote
(648025b
)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-features
to gix-features
(85f7e1a
)git-glob
to gix-glob
(35b2a3a
)git-sec
to gix-sec
(eabbb92
)git-path
to gix-path
(d3bbcfc
)git-config-value
to gix-config-value
(622b3e1
)109f434
)prodash::progress::(Task|Value)
directly under progress
(a3bd14a
)1ecfb7f
)prodash
in progress
module. (4260572
)c196d20
)7c846d2
)1e544e8
)39ed9ed
)e22080e
)7bba270
)prodash::progress::Id
in the progress
module for convenience. (c4a7634
)5b5b380
)93bef97
)b93f0c4
)9e04685
)5ac9fbe
)30d8ca1
)511ed00
)f8c562a
)5bf0034
)bb0a07b
)95cccdd
)25ad372
)e6b9906
)7114bbb
)c57bdde
)083909b
)f1160fb
)0f27c67
)70ccbb2
)77ab98d
)7717170
)6b9632e
)7893502
)726dd87
)6d530a1
)prodash 21.1
and add Ids
to all progress instances. (c8835c6
)bcd9654
)b2c301e
)e4648f8
)d071583
)423af90
)c4e6849
)def53b3
)ad96233
)104d922
)d232567
)fs-jwalk-single-threaded
in favor of fs-walkdir-parallel
. (38446dc
)3b29fc1
)702a161
)acb0738
)cca2ad5
)in_parallel_with_slice()
(dda661e
)56792fb
)in_parallel_with_slice
to be mutable. (e928bf7
)in_parallel_with_slice()
(a7c11d2
)progress::Step|StepShared
as types of prodash
(ff1db66
)82fd251
)25a7726
)29a043b
)c9eda72
)ff80042
)e5963fe
)windows
(2968181
)59767b1
)ab7ee5b
)cfe46b5
)9aa1d3d
)1d4600a
)1f6e5ab
)5869e9f
)da0716f
)bc64b96
)cef0b51
)c2660e2
)dbfa328
)7b48297
)sha1
asm
to supported archs (b383fab
)c954bbf
)cfa1440
)4974eca
)e2ee3de
)31c2351
)b1c40b0
)f7f136d
)5176771
)bd5f3e8
)232784a
)fs-jwalk-single-threaded
feature to specifically decouple jwalk
from rayon (f498d35
)2f506c7
)c072dbb
)ce885ad
)9b9ea02
)6da8250
)7b61506
)4e7b343
)e9fcb70
)4737b1e
)3c50625
)f144eaf
)085e76b
)41dd754
)89ea12b
)41ea8ba
)a417177
)bb424f5
)033f0d3
)a22b1d8
)598c853
)654cf39
)7cb1972
)98da8ba
)380174f
)a6460db
)f0cbb24
)4733e6c
)7cf3545
)471fa62
)234cd10
)90c6c5a
)07a4094
)572e57d
)e8383ca
)fefb01b
)c35e62e
)566ff8a
)a8e9497
)d78aab7
)373cbc8
)674ec73
)8900d69
)eba101a
)4624725
)968df47
)e7fbd9f
)7d2e20c
)7dd2313
)acd3737
)ec38950
)db1bb99
)5982406
)0e02953
)59ffbd9
)a474395
)01f7b72
)fd189c7
)49f5453
)6efd90d
)507d710
)3a7d379
)6d0bedd
)b58134b
)1388ebf
)8e98418
)1271c01
)8776c98
)e63b634
)d689599
)0958fc8
)d4605cd
)42861ca
)5e0edba
)e10e55c
)ae02dab
)1231dbd
)f109409
)a77a71c
)98dd557
)aec8439
)e23d19c
)6dc8779
)69d52b8
)2de9e78
)b804ef2
)c616627
)ba1fb7a
)7a1128f
)e138748
)6ca02ac
)3d2456e
)918af42
)2174513
)e68d460
)833ac04
)5930563
)8fb8d37
)8a741d0
)ea2bfac
)7f9be36
)5da57a3
)4588993
)04d919f
)e0b7f69
)61d3a15
)6e9400d
)592404c
)8a10af7
)07b3242
)c070d6f
)2e86723
)fce4d10
)866f86f
)efd20d4
)38c7961
)80e5640
)cd6ce67
)c6f342f
)057016e
)6d887d5
)ca54d97
)ae826e8
)040cab7
)4bdf783
)d69d9fb
)966058d
)1a3cc5b
)4f326bc
)crc
(11955f9
)458fa6e
)a760f8c
)1c99f51
)e9665c7
)3c617bc
)8945f95
)d457faa
)870af2a
)40802fd
)82c2f42
)7a6b514
)5ef1f22
)01db10a
)3e908bd
)409d763
)896ab94
)26beb2a
)6453633
)c320761
)c856613
)d7d5c68
)6fda1f2
)ac8e7fb
)410e7d6
)15e4748
)4526d82
)593d5df
)4a7ef7d
)017fdf4
)153c083
)779542e
)0bf8a9b
)a3083ad
)1c2adf4
)ac2eddb
)6c04fcd
)3b71e7e
)4ec09f4
)dee8c66
)1aa1f5e
)0dcdfd7
)b567d37
)deb6073
)e4dc964
)cba048f
)3934392
)50755bc
)7136854
)5b307e0
)a89fdb9
)fc7d600
)b79101d
)9604154
)0cd79d0
)b5eadca
)f8aafd6
)47c00c2
)934a26c
)b3a8bb5
)f9e8d29
)67a950a
)b899227
)fb077f9
)471a1bf
)b3b4aba
)a3fdecc
)1a8141c
)7fa7bae
)9cb09b2
)c000294
)c5f6b45
)98c1360
)ca5b801
)f444c85
)b59bd5e
)e4bcfe6
)9ef184e
)e2fb1d9
)82b7313
)c06d819
)afe2996
)6a95aaa
)69286ec
)bf1d40f
)5148c85
)9cfa9b7
)c4f570f
)1652a74
)490a9b9
)c555681
)35e8809
)9d6b879
)a81954a
)ea353eb
)ccd9c3e
)b4a6e16
)4351e28
)6725104
)9573836
)b226253
)ade06b4
)34b2373
)5ac9538
)e71da0f
)e9b5511
)d14f0f6
)66ebc5f
)c9fcb68
)4c8711e
)20fca45
)0a71b48
)66b1644
)763d7ca
)3a4faec
)6901a09
)ed5882d
)91ba045
)bca7ce2
)a025593
)413968d
)759091d
)b10e5c6
)3c6e78b
)b1daa46
)26b271d
)4cb570f
)0bb8314
)295aa2f
)a8422cf
)a647b2d
)acfccad
)973e6bb
)a1b5d56
)1cdde7d
)2e46c9b
)163f50f
)babfd84
)5688a34
)c750022
)f128117
)e98e7c2
)af02b46
)a4731a3
)10f9386
)88542e1
)fce7035
)1a550c6
)b17bd76
)b8b979b
)ab6f98b
)67c3a6a
)afda803
)6794300
)7add82c
)c416152
)caa883b
)cb29a45
)237bb5e
)in_parallel_if
… (6264f2f
)477dd90
)2815858
)b820717
)da3ae1c
)Progress
trait for prodash::tree::Item (0eeb6d7
)287eca9
)b22541f
)23c420c
)prodash
in progress
module. That way one can access all types even if they are not re-exported.prodash::progress::Id
in the progress
module for convenience.A maintenance release without user-facing changes.
add support for explicit non-parallel iteration. That way we can allow the implementation to choose whether they need greatest speed at some cost or not.
This also allows us to create a new thread-pool on each iteration as those who expect high cost or many files will likely chose to do that instead of single-threaded iteration, which nicely contains the threads needed and avoids keeping them alive as part of some global pool.
prodash 21.1
and add Ids
to all progress instances. That way callers can identify progress they are interested in, say, for selective visualizations.A maintenance release without user facing changes.
fs::Snapshot
can Clone
if T
can Clone
.in_parallel_with_slice()
progress::Step|StepShared
as types of prodash
This may help to use the Progress::counter()
method as part of method signatures, being an Option<progress::StepShared>
. remove fs-jwalk-single-threaded
in favor of fs-walkdir-parallel
. This way, jwalk
and the dependencies (and troubles) it brings have to be opted in, but also allow other users to actually opt out while allowing the parallel
feature to be in effect.
In other words, previously the parallel
feature conflated jwalk
dependencies into the tree, which isn't the case anymore.
Fix docs.rs rendering.
A maintenance release without breaking changes.
sha1
asm
to supported archs (b383fab
)fs-jwalk-single-threaded
feature to specifically decouple jwalk
from rayon It has been an issue in https://github.com/starship/starship/issues/4251 apparently and rayon interactions can be difficult.fs::Snapshot
to on-demand reload shared resources. initialize Time
from now_utc
and now_local
Localtime support depends on some other factors now, but that will only get better over time.
We might have to document unsound_local_time
at some point.
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.
A maintenance release without user-facing changes.
path
module in favor of gix-path
cratemild refactor of paths module to waste less on unix Previously it might have performed find-and-replace on unix paths even though they wouldn't have changed afterwards, yet costing an allocation.
There is also the realization that it should go into its own crate to have neater import paths and more convenience.
gix_config::values::Path
for a typesafe git path Add a Path
type to the gix_config::values
which can be interpolated according to gits own path interpolation rules.interrupt::Iter
, rename interrupt::Iter
-> interrupt::IterWithError
A maintenance release thanks to upgrade to prodash
18.
progress::Read::reader
-> progress::Read::inner
Add InOrderIter to ‘parallel’ module This iterator makes possible identifies results using a sequence id and returns only consecutive items.
Use it to collect unordered results produced by threads. It‘s advantage to collecting yourself and sorting is the potential for a smaller memory footprint of in-flight results, one doesn’t have to collect them all for ordering, necessarily.
Make a scope-like abstraction available This allows more delicate threading control like is required for the index.
decoding of variable int numbers. It's here only so that we can share the code across crates, for now without any feature toggles.
Add progress::Write
to automatically pass bytes written to a progress instance
Add InOrderIter to ‘parallel’ module This iterator makes possible identifies results using a sequence id and returns only consecutive items.
Use it to collect unordered results produced by threads. It‘s advantage to collecting yourself and sorting is the potential for a smaller memory footprint of in-flight results, one doesn’t have to collect them all for ordering, necessarily.
Make a scope-like abstraction available This allows more delicate threading control like is required for the index.
decoding of variable int numbers. It's here only so that we can share the code across crates, for now without any feature toggles.
Add progress::Write
to automatically pass bytes written to a progress instance
progress::Read::reader
-> progress::Read::inner
add threading primitives with feature toggle If the threading
feature is set, the threading
module will contain thread-safe primitives for shared ownership and mutation, otherwise these will be their single threaded counterparts.
This way, single-threaded applications don't have to pay for threaded primitives.
parallel utilities now use Send + Clone
instead of Send + Sync
This helps to assure that thread-local computations always work with the kind of types we provide. The ones that are carrying out actions are notably not Sync
anymore.
We cater to that by defining our bounds accordingly, but for those who want to use other utilities that need Sync, using types like Repository
and thread_local!()
is the only way to make this work.
A maintenance release due to properly dealing with previously breaking changes in gix-hash
.
This release contains no functional changes.