= 1..=3;
pub(crate) mod function {
use anyhow::bail;
- use git_repository as git;
- use git_repository::{prelude::ObjectIdExt, refspec::match_group::validate::Fix, remote::fetch::Status};
+
+ use gix::{prelude::ObjectIdExt, refspec::match_group::validate::Fix, remote::fetch::Status};
use super::Options;
use crate::OutputFormat;
pub fn fetch(
- repo: git::Repository,
+ repo: gix::Repository,
progress: P,
mut out: impl std::io::Write,
err: impl std::io::Write,
@@ -36,7 +35,7 @@ pub(crate) mod function {
}: Options,
) -> anyhow::Result<()>
where
- P: git::Progress,
+ P: gix::Progress,
P::SubProgress: 'static,
{
if format != OutputFormat::Human {
@@ -45,21 +44,21 @@ pub(crate) mod function {
let mut remote = crate::repository::remote::by_name_or_url(&repo, remote.as_deref())?;
if !ref_specs.is_empty() {
- remote.replace_refspecs(ref_specs.iter(), git::remote::Direction::Fetch)?;
- remote = remote.with_fetch_tags(git::remote::fetch::Tags::None);
+ remote.replace_refspecs(ref_specs.iter(), gix::remote::Direction::Fetch)?;
+ remote = remote.with_fetch_tags(gix::remote::fetch::Tags::None);
}
- let res: git::remote::fetch::Outcome = remote
- .connect(git::remote::Direction::Fetch, progress)?
+ let res: gix::remote::fetch::Outcome = remote
+ .connect(gix::remote::Direction::Fetch, progress)?
.prepare_fetch(Default::default())?
.with_dry_run(dry_run)
- .receive(&git::interrupt::IS_INTERRUPTED)?;
+ .receive(&gix::interrupt::IS_INTERRUPTED)?;
if handshake_info {
writeln!(out, "Handshake Information")?;
writeln!(out, "\t{:?}", res.ref_map.handshake)?;
}
- let ref_specs = remote.refspecs(git::remote::Direction::Fetch);
+ let ref_specs = remote.refspecs(gix::remote::Direction::Fetch);
match res.status {
Status::NoPackReceived { update_refs } => {
print_updates(&repo, update_refs, ref_specs, res.ref_map, &mut out, err)
@@ -86,14 +85,14 @@ pub(crate) mod function {
}
pub(crate) fn print_updates(
- repo: &git::Repository,
- update_refs: git::remote::fetch::refs::update::Outcome,
- refspecs: &[git::refspec::RefSpec],
- mut map: git::remote::fetch::RefMap,
+ repo: &gix::Repository,
+ update_refs: gix::remote::fetch::refs::update::Outcome,
+ refspecs: &[gix::refspec::RefSpec],
+ mut map: gix::remote::fetch::RefMap,
mut out: impl std::io::Write,
mut err: impl std::io::Write,
) -> anyhow::Result<()> {
- let mut last_spec_index = git::remote::fetch::SpecIndex::ExplicitInRemote(usize::MAX);
+ let mut last_spec_index = gix::remote::fetch::SpecIndex::ExplicitInRemote(usize::MAX);
let mut updates = update_refs
.iter_mapping_updates(&map.mappings, refspecs, &map.extra_refspecs)
.filter_map(|(update, mapping, spec, edit)| spec.map(|spec| (update, mapping, spec, edit)))
@@ -120,7 +119,7 @@ pub(crate) mod function {
if is_implicit {
write!(&mut out, " (implicit")?;
if spec.to_ref()
- == git::remote::fetch::Tags::Included
+ == gix::remote::fetch::Tags::Included
.to_refspec()
.expect("always yields refspec")
{
@@ -133,7 +132,7 @@ pub(crate) mod function {
}
if let Some(num_skipped) = skipped_due_to_implicit_tag.as_mut() {
- if matches!(update.mode, git::remote::fetch::refs::update::Mode::NoChangeNeeded) {
+ if matches!(update.mode, gix::remote::fetch::refs::update::Mode::NoChangeNeeded) {
*num_skipped += 1;
continue;
}
@@ -141,10 +140,10 @@ pub(crate) mod function {
write!(out, "\t")?;
match &mapping.remote {
- git::remote::fetch::Source::ObjectId(id) => {
+ gix::remote::fetch::Source::ObjectId(id) => {
write!(out, "{}", id.attach(repo).shorten_or_id())?;
}
- git::remote::fetch::Source::Ref(r) => {
+ gix::remote::fetch::Source::Ref(r) => {
crate::repository::remote::refs::print_ref(&mut out, r)?;
}
};
diff --git a/gitoxide-core/src/repository/index.rs b/gitoxide-core/src/repository/index.rs
index 52bbf69b2bb..d14fca2227e 100644
--- a/gitoxide-core/src/repository/index.rs
+++ b/gitoxide-core/src/repository/index.rs
@@ -1,19 +1,18 @@
use std::{ffi::OsString, path::PathBuf};
-use git::prelude::FindExt;
-use git_repository as git;
+use gix::prelude::FindExt;
pub fn from_tree(
mut spec: OsString,
index_path: Option,
force: bool,
- repo: git::Repository,
+ repo: gix::Repository,
) -> anyhow::Result<()> {
spec.push("^{tree}");
- let spec = git::path::os_str_into_bstr(&spec)?;
+ let spec = gix::path::os_str_into_bstr(&spec)?;
let tree = repo.rev_parse_single(spec)?;
- let index = git::index::State::from_tree(&tree, |oid, buf| repo.objects.find_tree_iter(oid, buf).ok())?;
- let options = git::index::write::Options::default();
+ let index = gix::index::State::from_tree(&tree, |oid, buf| repo.objects.find_tree_iter(oid, buf).ok())?;
+ let options = gix::index::write::Options::default();
match index_path {
Some(index_path) => {
@@ -23,11 +22,11 @@ pub fn from_tree(
index_path.display()
);
}
- let mut index = git::index::File::from_state(index, index_path);
+ let mut index = gix::index::File::from_state(index, index_path);
index.write(options)?;
}
None => {
- let index = git::index::File::from_state(index, std::path::PathBuf::new());
+ let index = gix::index::File::from_state(index, std::path::PathBuf::new());
let mut out = Vec::with_capacity(512 * 1024);
index.write_to(&mut out, options)?;
}
diff --git a/gitoxide-core/src/repository/mailmap.rs b/gitoxide-core/src/repository/mailmap.rs
index 020b7cb612f..14531df7a6c 100644
--- a/gitoxide-core/src/repository/mailmap.rs
+++ b/gitoxide-core/src/repository/mailmap.rs
@@ -1,8 +1,7 @@
use std::io;
-use git_repository as git;
#[cfg(feature = "serde1")]
-use git_repository::mailmap::Entry;
+use gix::mailmap::Entry;
use crate::OutputFormat;
@@ -18,7 +17,7 @@ struct JsonEntry {
#[cfg(feature = "serde1")]
impl<'a> From> for JsonEntry {
fn from(v: Entry<'a>) -> Self {
- use git_repository::bstr::ByteSlice;
+ use gix::bstr::ByteSlice;
JsonEntry {
new_name: v.new_name().map(|s| s.to_str_lossy().into_owned()),
new_email: v.new_email().map(|s| s.to_str_lossy().into_owned()),
@@ -29,7 +28,7 @@ impl<'a> From> for JsonEntry {
}
pub fn entries(
- repo: git::Repository,
+ repo: gix::Repository,
format: OutputFormat,
#[cfg_attr(not(feature = "serde1"), allow(unused_variables))] out: impl io::Write,
mut err: impl io::Write,
@@ -38,7 +37,7 @@ pub fn entries(
writeln!(err, "Defaulting to JSON as human format isn't implemented").ok();
}
- let mut mailmap = git::mailmap::Snapshot::default();
+ let mut mailmap = gix::mailmap::Snapshot::default();
if let Err(e) = repo.open_mailmap_into(&mut mailmap) {
writeln!(err, "Error while loading mailmap, the first error is: {}", e).ok();
}
diff --git a/gitoxide-core/src/repository/mod.rs b/gitoxide-core/src/repository/mod.rs
index 7ce6b6b25a3..48e3ad87d13 100644
--- a/gitoxide-core/src/repository/mod.rs
+++ b/gitoxide-core/src/repository/mod.rs
@@ -1,13 +1,12 @@
use std::path::PathBuf;
use anyhow::{Context as AnyhowContext, Result};
-use git_repository as git;
-pub fn init(directory: Option) -> Result {
- git::create::into(
+pub fn init(directory: Option) -> Result {
+ gix::create::into(
directory.unwrap_or_default(),
- git::create::Kind::WithWorktree,
- git::create::Options::default(),
+ gix::create::Kind::WithWorktree,
+ gix::create::Options::default(),
)
.with_context(|| "Repository initialization failed")
}
diff --git a/gitoxide-core/src/repository/odb.rs b/gitoxide-core/src/repository/odb.rs
index 6e23ab657c1..e41d95439b4 100644
--- a/gitoxide-core/src/repository/odb.rs
+++ b/gitoxide-core/src/repository/odb.rs
@@ -1,13 +1,12 @@
use std::io;
use anyhow::bail;
-use git_repository as git;
use crate::OutputFormat;
#[cfg_attr(not(feature = "serde1"), allow(unused_variables))]
pub fn info(
- repo: git::Repository,
+ repo: gix::Repository,
format: OutputFormat,
out: impl io::Write,
mut err: impl io::Write,
@@ -21,8 +20,8 @@ pub fn info(
pub path: std::path::PathBuf,
pub object_hash: String,
pub use_multi_pack_index: bool,
- pub structure: Vec,
- pub metrics: git::odb::store::Metrics,
+ pub structure: Vec,
+ pub metrics: gix::odb::store::Metrics,
}
let store = repo.objects.store_ref();
@@ -56,20 +55,20 @@ pub mod statistics {
#[cfg_attr(not(feature = "serde1"), allow(unused_variables))]
pub fn statistics(
- repo: git::Repository,
- mut progress: impl git::Progress,
+ repo: gix::Repository,
+ mut progress: impl gix::Progress,
out: impl io::Write,
mut err: impl io::Write,
statistics::Options { format, thread_limit }: statistics::Options,
) -> anyhow::Result<()> {
use bytesize::ByteSize;
- use git::odb::{find, HeaderExt};
+ use gix::odb::{find, HeaderExt};
if format == OutputFormat::Human {
writeln!(err, "Only JSON is implemented - using that instead")?;
}
- progress.init(None, git::progress::count("objects"));
+ progress.init(None, gix::progress::count("objects"));
progress.set_name("counting");
let counter = progress.counter();
let start = std::time::Instant::now();
@@ -93,8 +92,8 @@ pub fn statistics(
}
impl Statistics {
- fn count(&mut self, kind: git::object::Kind, size: u64) {
- use git::object::Kind::*;
+ fn count(&mut self, kind: gix::object::Kind, size: u64) {
+ use gix::object::Kind::*;
match kind {
Commit => {
self.commits += 1;
@@ -114,7 +113,7 @@ pub fn statistics(
}
}
}
- fn consume(&mut self, item: git::odb::find::Header) {
+ fn consume(&mut self, item: gix::odb::find::Header) {
match item {
find::Header::Loose { size, kind } => {
self.loose_objects += 1;
@@ -135,8 +134,8 @@ pub fn statistics(
stats: Statistics,
}
- impl git::parallel::Reduce for Reduce {
- type Input = Result, anyhow::Error>;
+ impl gix::parallel::Reduce for Reduce {
+ type Input = Result, anyhow::Error>;
type FeedProduce = ();
type Output = Statistics;
type Error = anyhow::Error;
@@ -157,10 +156,10 @@ pub fn statistics(
let cancelled = || anyhow::anyhow!("Cancelled by user");
let object_ids = repo.objects.store_ref().iter()?.filter_map(Result::ok);
let chunk_size = 1_000;
- let stats = if git::parallel::num_threads(thread_limit) > 1 {
- git::parallel::in_parallel(
- git::interrupt::Iter::new(
- git::features::iter::Chunks {
+ let stats = if gix::parallel::num_threads(thread_limit) > 1 {
+ gix::parallel::in_parallel(
+ gix::interrupt::Iter::new(
+ gix::features::iter::Chunks {
inner: object_ids,
size: chunk_size,
},
@@ -185,7 +184,7 @@ pub fn statistics(
let mut stats = Statistics::default();
for (count, id) in object_ids.enumerate() {
- if count % chunk_size == 0 && git::interrupt::is_triggered() {
+ if count % chunk_size == 0 && gix::interrupt::is_triggered() {
return Err(cancelled());
}
stats.consume(repo.objects.header(id)?);
@@ -204,7 +203,7 @@ pub fn statistics(
Ok(())
}
-pub fn entries(repo: git::Repository, format: OutputFormat, mut out: impl io::Write) -> anyhow::Result<()> {
+pub fn entries(repo: gix::Repository, format: OutputFormat, mut out: impl io::Write) -> anyhow::Result<()> {
if format != OutputFormat::Human {
bail!("Only human output format is supported at the moment");
}
diff --git a/gitoxide-core/src/repository/remote.rs b/gitoxide-core/src/repository/remote.rs
index f913ad1d62d..78c8acc0b86 100644
--- a/gitoxide-core/src/repository/remote.rs
+++ b/gitoxide-core/src/repository/remote.rs
@@ -1,8 +1,8 @@
#[cfg(any(feature = "blocking-client", feature = "async-client"))]
mod refs_impl {
use anyhow::bail;
- use git_repository as git;
- use git_repository::{
+
+ use gix::{
protocol::handshake,
refspec::{match_group::validate::Fix, RefSpec},
remote::fetch::Source,
@@ -12,7 +12,7 @@ mod refs_impl {
use crate::OutputFormat;
pub mod refs {
- use git_repository::bstr::BString;
+ use gix::bstr::BString;
use crate::OutputFormat;
@@ -35,11 +35,11 @@ mod refs_impl {
pub(crate) use super::{print, print_ref};
}
- #[git::protocol::maybe_async::maybe_async]
+ #[gix::protocol::maybe_async::maybe_async]
pub async fn refs_fn(
- repo: git::Repository,
+ repo: gix::Repository,
kind: refs::Kind,
- mut progress: impl git::Progress,
+ mut progress: impl gix::Progress,
mut out: impl std::io::Write,
err: impl std::io::Write,
refs::Options {
@@ -59,8 +59,8 @@ mod refs_impl {
bail!("JSON output isn't yet supported for listing ref-mappings.");
}
if !ref_specs.is_empty() {
- remote.replace_refspecs(ref_specs.iter(), git::remote::Direction::Fetch)?;
- remote = remote.with_fetch_tags(git::remote::fetch::Tags::None);
+ remote.replace_refspecs(ref_specs.iter(), gix::remote::Direction::Fetch)?;
+ remote = remote.with_fetch_tags(gix::remote::fetch::Tags::None);
}
*show_unmapped_remote_refs
} else {
@@ -69,14 +69,14 @@ mod refs_impl {
progress.info(format!(
"Connecting to {:?}",
remote
- .url(git::remote::Direction::Fetch)
+ .url(gix::remote::Direction::Fetch)
.context("Remote didn't have a URL to connect to")?
.to_bstring()
));
let map = remote
- .connect(git::remote::Direction::Fetch, progress)
+ .connect(gix::remote::Direction::Fetch, progress)
.await?
- .ref_map(git::remote::ref_map::Options {
+ .ref_map(gix::remote::ref_map::Options {
prefix_from_spec_as_filter_on_remote: !matches!(kind, refs::Kind::Remote),
..Default::default()
})
@@ -89,7 +89,7 @@ mod refs_impl {
match kind {
refs::Kind::Tracking { .. } => print_refmap(
&repo,
- remote.refspecs(git::remote::Direction::Fetch),
+ remote.refspecs(gix::remote::Direction::Fetch),
map,
show_unmapped,
out,
@@ -110,14 +110,14 @@ mod refs_impl {
}
pub(crate) fn print_refmap(
- repo: &git::Repository,
+ repo: &gix::Repository,
refspecs: &[RefSpec],
- mut map: git::remote::fetch::RefMap,
+ mut map: gix::remote::fetch::RefMap,
show_unmapped_remotes: bool,
mut out: impl std::io::Write,
mut err: impl std::io::Write,
) -> anyhow::Result<()> {
- let mut last_spec_index = git::remote::fetch::SpecIndex::ExplicitInRemote(usize::MAX);
+ let mut last_spec_index = gix::remote::fetch::SpecIndex::ExplicitInRemote(usize::MAX);
map.mappings.sort_by_key(|m| m.spec_index);
for mapping in &map.mappings {
if mapping.spec_index != last_spec_index {
@@ -131,7 +131,7 @@ mod refs_impl {
if is_implicit {
write!(&mut out, " (implicit")?;
if spec.to_ref()
- == git::remote::fetch::Tags::Included
+ == gix::remote::fetch::Tags::Included
.to_refspec()
.expect("always yields refspec")
{
@@ -144,11 +144,11 @@ mod refs_impl {
write!(out, "\t")?;
let target_id = match &mapping.remote {
- git::remote::fetch::Source::ObjectId(id) => {
+ gix::remote::fetch::Source::ObjectId(id) => {
write!(out, "{}", id)?;
id
}
- git::remote::fetch::Source::Ref(r) => print_ref(&mut out, r)?,
+ gix::remote::fetch::Source::Ref(r) => print_ref(&mut out, r)?,
};
match &mapping.local {
Some(local) => {
@@ -283,7 +283,7 @@ mod refs_impl {
}
}
- pub(crate) fn print_ref(mut out: impl std::io::Write, r: &handshake::Ref) -> std::io::Result<&git::hash::oid> {
+ pub(crate) fn print_ref(mut out: impl std::io::Write, r: &handshake::Ref) -> std::io::Result<&gix::hash::oid> {
match r {
handshake::Ref::Direct {
full_ref_name: path,
@@ -300,7 +300,7 @@ mod refs_impl {
object,
} => write!(&mut out, "{} {} symref-target:{}", object, path, target).map(|_| object.as_ref()),
handshake::Ref::Unborn { full_ref_name, target } => {
- static NULL: git::hash::ObjectId = git::hash::ObjectId::null(git::hash::Kind::Sha1);
+ static NULL: gix::hash::ObjectId = gix::hash::ObjectId::null(gix::hash::Kind::Sha1);
write!(&mut out, "unborn {} symref-target:{}", full_ref_name, target).map(|_| NULL.as_ref())
}
}
@@ -319,21 +319,21 @@ pub use refs_impl::{refs, refs_fn as refs, JsonRef};
#[cfg(any(feature = "blocking-client", feature = "async-client"))]
pub(crate) fn by_name_or_url<'repo>(
- repo: &'repo git_repository::Repository,
+ repo: &'repo gix::Repository,
name_or_url: Option<&str>,
-) -> anyhow::Result> {
+) -> anyhow::Result> {
use anyhow::Context;
Ok(match name_or_url {
Some(name) => {
if name.contains('/') || name.contains('.') {
- repo.remote_at(git_repository::url::parse(name.into())?)?
+ repo.remote_at(gix::url::parse(name.into())?)?
} else {
repo.find_remote(name)?
}
}
None => repo
.head()?
- .into_remote(git_repository::remote::Direction::Fetch)
+ .into_remote(gix::remote::Direction::Fetch)
.context("Cannot find a remote for unborn branch")??,
})
}
diff --git a/gitoxide-core/src/repository/revision/explain.rs b/gitoxide-core/src/repository/revision/explain.rs
index 6efc625930c..05c8b283352 100644
--- a/gitoxide-core/src/repository/revision/explain.rs
+++ b/gitoxide-core/src/repository/revision/explain.rs
@@ -1,5 +1,6 @@
use anyhow::bail;
-use git::{
+
+use gix::{
bstr::{BStr, BString},
revision::plumbing::{
spec,
@@ -10,12 +11,11 @@ use git::{
},
},
};
-use git_repository as git;
pub fn explain(spec: std::ffi::OsString, mut out: impl std::io::Write) -> anyhow::Result<()> {
let mut explain = Explain::new(&mut out);
- let spec = git::path::os_str_into_bstr(&spec)?;
- git::revision::plumbing::spec::parse(spec, &mut explain)?;
+ let spec = gix::path::os_str_into_bstr(&spec)?;
+ gix::revision::plumbing::spec::parse(spec, &mut explain)?;
if let Some(err) = explain.err {
bail!(err);
}
@@ -26,7 +26,7 @@ struct Explain<'a> {
out: &'a mut dyn std::io::Write,
call: usize,
ref_name: Option,
- oid_prefix: Option,
+ oid_prefix: Option,
has_implicit_anchor: bool,
err: Option,
}
@@ -63,7 +63,7 @@ impl<'a> delegate::Revision for Explain<'a> {
writeln!(self.out, "Lookup the '{}' reference", name).ok()
}
- fn disambiguate_prefix(&mut self, prefix: git::hash::Prefix, hint: Option>) -> Option<()> {
+ fn disambiguate_prefix(&mut self, prefix: gix::hash::Prefix, hint: Option>) -> Option<()> {
self.prefix()?;
self.oid_prefix = Some(prefix);
writeln!(
@@ -97,7 +97,7 @@ impl<'a> delegate::Revision for Explain<'a> {
ReflogLookup::Date(time) => writeln!(
self.out,
"Find entry closest to time {} in reflog of '{}' reference",
- time.format(git::date::time::format::ISO8601),
+ time.format(gix::date::time::format::ISO8601),
ref_name
)
.ok(),
diff --git a/gitoxide-core/src/repository/revision/list.rs b/gitoxide-core/src/repository/revision/list.rs
index 8189f405747..e87590f5d9d 100644
--- a/gitoxide-core/src/repository/revision/list.rs
+++ b/gitoxide-core/src/repository/revision/list.rs
@@ -1,13 +1,13 @@
use std::ffi::OsString;
use anyhow::{bail, Context};
-use git_repository as git;
-use git_repository::prelude::ObjectIdExt;
+
+use gix::prelude::ObjectIdExt;
use crate::OutputFormat;
pub fn list(
- mut repo: git::Repository,
+ mut repo: gix::Repository,
spec: OsString,
mut out: impl std::io::Write,
format: OutputFormat,
@@ -17,13 +17,13 @@ pub fn list(
}
repo.object_cache_size_if_unset(4 * 1024 * 1024);
- let spec = git::path::os_str_into_bstr(&spec)?;
+ let spec = gix::path::os_str_into_bstr(&spec)?;
let id = repo
.rev_parse_single(spec)
.context("Only single revisions are currently supported")?;
let commit_id = id
.object()?
- .peel_to_kind(git::object::Kind::Commit)
+ .peel_to_kind(gix::object::Kind::Commit)
.context("Need commitish as starting point")?
.id
.attach(&repo);
diff --git a/gitoxide-core/src/repository/revision/previous_branches.rs b/gitoxide-core/src/repository/revision/previous_branches.rs
index b22e6398eee..727b56cf4b7 100644
--- a/gitoxide-core/src/repository/revision/previous_branches.rs
+++ b/gitoxide-core/src/repository/revision/previous_branches.rs
@@ -1,10 +1,9 @@
use anyhow::Context;
-use git_repository as git;
use crate::OutputFormat;
pub fn previous_branches(
- repo: git::Repository,
+ repo: gix::Repository,
mut out: impl std::io::Write,
format: OutputFormat,
) -> anyhow::Result<()> {
diff --git a/gitoxide-core/src/repository/revision/resolve.rs b/gitoxide-core/src/repository/revision/resolve.rs
index 75e785934fc..a66d6b8a914 100644
--- a/gitoxide-core/src/repository/revision/resolve.rs
+++ b/gitoxide-core/src/repository/revision/resolve.rs
@@ -10,13 +10,12 @@ pub(crate) mod function {
use std::ffi::OsString;
use anyhow::Context;
- use git_repository as git;
use super::Options;
use crate::{repository::revision, OutputFormat};
pub fn resolve(
- mut repo: git::Repository,
+ mut repo: gix::Repository,
specs: Vec,
mut out: impl std::io::Write,
Options {
@@ -33,7 +32,7 @@ pub(crate) mod function {
if explain {
return revision::explain(spec, out);
}
- let spec = git::path::os_str_into_bstr(&spec)?;
+ let spec = gix::path::os_str_into_bstr(&spec)?;
let spec = repo.rev_parse(spec)?;
if cat_file {
return display_object(spec, out);
@@ -51,7 +50,7 @@ pub(crate) mod function {
&specs
.into_iter()
.map(|spec| {
- git::path::os_str_into_bstr(&spec)
+ gix::path::os_str_into_bstr(&spec)
.map_err(anyhow::Error::from)
.and_then(|spec| repo.rev_parse(spec).map_err(Into::into))
.map(|spec| spec.detach())
@@ -63,11 +62,11 @@ pub(crate) mod function {
Ok(())
}
- fn display_object(spec: git::revision::Spec<'_>, mut out: impl std::io::Write) -> anyhow::Result<()> {
+ fn display_object(spec: gix::revision::Spec<'_>, mut out: impl std::io::Write) -> anyhow::Result<()> {
let id = spec.single().context("rev-spec must resolve to a single object")?;
let object = id.object()?;
match object.kind {
- git::object::Kind::Tree => {
+ gix::object::Kind::Tree => {
for entry in object.into_tree().iter() {
writeln!(out, "{}", entry?)?;
}
diff --git a/gitoxide-core/src/repository/tree.rs b/gitoxide-core/src/repository/tree.rs
index 0436249a2b8..cbe9b913352 100644
--- a/gitoxide-core/src/repository/tree.rs
+++ b/gitoxide-core/src/repository/tree.rs
@@ -1,21 +1,20 @@
use std::{borrow::Cow, io};
use anyhow::bail;
-use git_repository as git;
-use git_repository::{prelude::ObjectIdExt, Tree};
+
+use gix::{prelude::ObjectIdExt, Tree};
use crate::OutputFormat;
mod entries {
use std::collections::VecDeque;
- use git::{
+ use gix::bstr::{ByteSlice, ByteVec};
+ use gix::{
bstr::{BStr, BString},
objs::tree::EntryRef,
traverse::tree::visit::Action,
};
- use git_repository as git;
- use git_repository::bstr::{ByteSlice, ByteVec};
use crate::repository::tree::format_entry;
@@ -35,14 +34,14 @@ mod entries {
pub struct Traverse<'repo, 'a> {
pub stats: Statistics,
- repo: Option<&'repo git::Repository>,
+ repo: Option<&'repo gix::Repository>,
out: Option<&'a mut dyn std::io::Write>,
path: BString,
path_deque: VecDeque,
}
impl<'repo, 'a> Traverse<'repo, 'a> {
- pub fn new(repo: Option<&'repo git::Repository>, out: Option<&'a mut dyn std::io::Write>) -> Self {
+ pub fn new(repo: Option<&'repo gix::Repository>, out: Option<&'a mut dyn std::io::Write>) -> Self {
Traverse {
stats: Default::default(),
repo,
@@ -68,7 +67,7 @@ mod entries {
}
}
- impl<'repo, 'a> git::traverse::tree::Visit for Traverse<'repo, 'a> {
+ impl<'repo, 'a> gix::traverse::tree::Visit for Traverse<'repo, 'a> {
fn pop_front_tracked_path_and_set_current(&mut self) {
self.path = self.path_deque.pop_front().expect("every parent is set only once");
}
@@ -92,7 +91,7 @@ mod entries {
}
fn visit_nontree(&mut self, entry: &EntryRef<'_>) -> Action {
- use git::objs::tree::EntryMode::*;
+ use gix::objs::tree::EntryMode::*;
let size = self
.repo
.and_then(|repo| repo.find_object(entry.oid).map(|o| o.data.len()).ok());
@@ -117,7 +116,7 @@ mod entries {
#[cfg_attr(not(feature = "serde1"), allow(unused_variables))]
pub fn info(
- repo: git::Repository,
+ repo: gix::Repository,
treeish: Option<&str>,
extended: bool,
format: OutputFormat,
@@ -143,7 +142,7 @@ pub fn info(
}
pub fn entries(
- repo: git::Repository,
+ repo: gix::Repository,
treeish: Option<&str>,
recursive: bool,
extended: bool,
@@ -176,9 +175,9 @@ pub fn entries(
Ok(())
}
-fn treeish_to_tree<'repo>(treeish: Option<&str>, repo: &'repo git::Repository) -> anyhow::Result> {
+fn treeish_to_tree<'repo>(treeish: Option<&str>, repo: &'repo gix::Repository) -> anyhow::Result> {
Ok(match treeish {
- Some(hex) => git::hash::ObjectId::from_hex(hex.as_bytes())
+ Some(hex) => gix::hash::ObjectId::from_hex(hex.as_bytes())
.map(|id| id.attach(repo))?
.object()?
.try_into_tree()?,
@@ -188,11 +187,11 @@ fn treeish_to_tree<'repo>(treeish: Option<&str>, repo: &'repo git::Repository) -
fn format_entry(
mut out: impl io::Write,
- entry: &git::objs::tree::EntryRef<'_>,
- filename: &git::bstr::BStr,
+ entry: &gix::objs::tree::EntryRef<'_>,
+ filename: &gix::bstr::BStr,
size: Option,
) -> std::io::Result<()> {
- use git::objs::tree::EntryMode::*;
+ use gix::objs::tree::EntryMode::*;
writeln!(
out,
"{} {}{} {}",
diff --git a/gitoxide-core/src/repository/verify.rs b/gitoxide-core/src/repository/verify.rs
index 3278ca40c58..3b8c2579250 100644
--- a/gitoxide-core/src/repository/verify.rs
+++ b/gitoxide-core/src/repository/verify.rs
@@ -1,7 +1,6 @@
use std::sync::atomic::AtomicBool;
-use git_repository as git;
-use git_repository::Progress;
+use gix::Progress;
use crate::{pack, OutputFormat};
@@ -20,7 +19,7 @@ pub struct Context {
pub const PROGRESS_RANGE: std::ops::RangeInclusive = 1..=3;
pub fn integrity(
- repo: git::Repository,
+ repo: gix::Repository,
mut out: impl std::io::Write,
progress: impl Progress,
should_interrupt: &AtomicBool,
@@ -35,19 +34,19 @@ pub fn integrity(
let mut outcome = repo.objects.store_ref().verify_integrity(
progress,
should_interrupt,
- git_repository::odb::pack::index::verify::integrity::Options {
+ gix::odb::pack::index::verify::integrity::Options {
verify_mode,
traversal: algorithm.into(),
thread_limit,
// TODO: a way to get the pack cache from a handle
- make_pack_lookup_cache: || git_repository::odb::pack::cache::Never,
+ make_pack_lookup_cache: || gix::odb::pack::cache::Never,
},
)?;
if let Some(index) = repo.worktree().map(|wt| wt.index()).transpose()? {
index.verify_integrity()?;
index.verify_entries()?;
index.verify_extensions(true, {
- use git::odb::FindExt;
+ use gix::odb::FindExt;
let objects = repo.objects;
move |oid, buf: &mut Vec| objects.find_tree_iter(oid, buf).ok()
})?;
diff --git a/gix/CHANGELOG.md b/gix/CHANGELOG.md
index 9986cd8e378..f8d1316f94e 100644
--- a/gix/CHANGELOG.md
+++ b/gix/CHANGELOG.md
@@ -5,15 +5,3994 @@ 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.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## v0.0.0 (2023-02-10)
+## 0.35.0 (2023-02-11)
-Initial release.
+This is the last release under this name and merely a notice to inform that `gix` from now on is `gix`.
+
+Furthermore, all `git-*` crates belonging to the `gitoxide` project will be renamed to `gix-*`.
+
+### Changed (BREAKING)
+
+ - a note of the pending rename of `gix` to `gix`
+
+### New Features
+
+ - tree diffs with simple rename and copy tracking in cases where there is no additional modification.
+ As the fastest way of rename tracking, we now offer support for tracking renames and copies,
+ that is a file was renamed or copied without modification.
+ - Add `diff.renames` and `diff.renameLimit` keys to config tree.
+ In preparation for the implementation.
+
+### Commit Statistics
+
+
+
+ - 4 commits contributed to the release.
+ - 1 day passed between releases.
+ - 3 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - a note of the pending rename of `gix` to `gix` ([`1408482`](https://github.com/Byron/gitoxide/commit/1408482fd21be7487b46753bb54a018c7a164f34))
+ - Merge branch 'rename-tracking' ([`9e7d792`](https://github.com/Byron/gitoxide/commit/9e7d79273487abfcb99ed2d439c475a659cd25e6))
+ - tree diffs with simple rename and copy tracking in cases where there is no additional modification. ([`069eb6c`](https://github.com/Byron/gitoxide/commit/069eb6c3f0844b43873ae1bd536e2bca53ff5c8a))
+ - Add `diff.renames` and `diff.renameLimit` keys to config tree. ([`f6ed34a`](https://github.com/Byron/gitoxide/commit/f6ed34aa254d34e596ad027c33f78404a630ff76))
+
+
+## 0.34.0 (2023-02-09)
+
+
+
+### Documentation
+
+ - fix typos
+
+### New Features
+
+ - 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.
+
+### Bug Fixes
+
+ - don't panic, but error when parsing the rev-specs `^`, `..`, `...`.
+
+### Chore (BREAKING)
+
+ - adjust to changes in `gitoxide` for clap upgrade to 4.1
+
+### New Features (BREAKING)
+
+ - transfer 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>` to be able to account for date parse errors.
+
+### Commit Statistics
+
+
+
+ - 23 commits contributed to the release over the course of 25 calendar days.
+ - 30 days passed between releases.
+ - 7 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 1 unique issue was worked on: [#706](https://github.com/Byron/gitoxide/issues/706)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#706](https://github.com/Byron/gitoxide/issues/706)**
+ - don't panic, but error when parsing the rev-specs `^`, `..`, `...`. ([`5d3a3a2`](https://github.com/Byron/gitoxide/commit/5d3a3a245968d5ad8c29ea11a99b4896d1b41191))
+ * **Uncategorized**
+ - Release git-repository v0.34.0 ([`d2f12bd`](https://github.com/Byron/gitoxide/commit/d2f12bdd712fd3b2fcf2d28447a175d299f96764))
+ - Release git-repository v0.34.0 ([`a42e930`](https://github.com/Byron/gitoxide/commit/a42e930d0022cc91730cce97a5145d3e65c67c01))
+ - Release git-refspec v0.7.2, git-repository v0.34.0 ([`1210c19`](https://github.com/Byron/gitoxide/commit/1210c1926851495df5d6fd3f6906602a7e423548))
+ - Release git-date v0.4.2, git-hash v0.10.2, git-features v0.26.2, git-actor v0.17.1, git-glob v0.5.3, git-path v0.7.1, git-quote v0.4.1, git-attributes v0.8.2, git-config-value v0.10.1, git-tempfile v3.0.2, git-lock v3.0.2, git-validate v0.7.2, git-object v0.26.1, git-ref v0.24.0, git-sec v0.6.2, git-config v0.16.0, git-command v0.2.3, git-prompt v0.3.2, git-url v0.13.2, git-credentials v0.9.1, git-diff v0.26.1, git-discover v0.13.0, git-hashtable v0.1.1, git-bitmap v0.2.1, git-traverse v0.22.1, git-index v0.12.3, git-mailmap v0.9.2, git-chunk v0.4.1, git-pack v0.30.2, git-odb v0.40.2, git-packetline v0.14.2, git-transport v0.25.4, git-protocol v0.26.3, git-revision v0.10.2, git-refspec v0.7.2, git-worktree v0.12.2, git-repository v0.34.0, safety bump 3 crates ([`c196d20`](https://github.com/Byron/gitoxide/commit/c196d206d57a310b1ce974a1cf0e7e6d6db5c4d6))
+ - prepare changelogs prior to release ([`7c846d2`](https://github.com/Byron/gitoxide/commit/7c846d2102dc767366771925212712ef8cc9bf07))
+ - Merge branch 'adjustments-for-cargo' ([`a3df7b5`](https://github.com/Byron/gitoxide/commit/a3df7b5e3cd1fdacc78fedb057010e40e92a8565))
+ - add `env::collate::fetch::Error` - a combined error type with its own API. ([`297d59e`](https://github.com/Byron/gitoxide/commit/297d59e8396fbe2e5a2224a8524fa0778e786773))
+ - Merge branch 'Lioness100/main' ([`1e544e8`](https://github.com/Byron/gitoxide/commit/1e544e82455bf9ecb5e3c2146280eaf7ecd81f16))
+ - fix typos ([`39ed9ed`](https://github.com/Byron/gitoxide/commit/39ed9eda62b7718d5109135e5ad406fb1fe2978c))
+ - upgrade serial-test to 1.0 ([`9ab3e25`](https://github.com/Byron/gitoxide/commit/9ab3e25e4c1ff6d504a79521cfa9453a7e7e7465))
+ - make it easier to use key-assignement validation with actual values. ([`7c99e6d`](https://github.com/Byron/gitoxide/commit/7c99e6d5a5aef3daeaa6c3804d33378725d8c7a8))
+ - fix release build ([`b52035b`](https://github.com/Byron/gitoxide/commit/b52035bf0cb1c3726bd43d7b00da6130c38ba361))
+ - thanks clippy ([`bac57dd`](https://github.com/Byron/gitoxide/commit/bac57dd05ea2d5a4ee45ef9350fa3f2e19474bc0))
+ - make fmt ([`e22080e`](https://github.com/Byron/gitoxide/commit/e22080e4a29d0bad15a99d565a5e3e304a8743ec))
+ - Merge branch 'adjustments-for-cargo' ([`7bba270`](https://github.com/Byron/gitoxide/commit/7bba2709488b7eb999b8136dbab03af977241678))
+ - transfer knowledge about configuration and its usage into the type system. ([`2faad43`](https://github.com/Byron/gitoxide/commit/2faad43d11283ff06381c51d2466307cfb8736ff))
+ - Merge branch 'main' into break_cycel2 ([`e67307a`](https://github.com/Byron/gitoxide/commit/e67307aa9b1b81957abe0d5bae4c0e1008b1c1d7))
+ - Merge branch 'fix-706' ([`ab0bc98`](https://github.com/Byron/gitoxide/commit/ab0bc987e3647de56db9f7b4fc7bda6e76fc5f75))
+ - Break cyclical dev dependencies ([`1fea18f`](https://github.com/Byron/gitoxide/commit/1fea18f5f8b4189a23dc4fa3f041a672f6fbcfb3))
+ - use enumerations to advertise progress ids publicly. ([`d792ea5`](https://github.com/Byron/gitoxide/commit/d792ea543246632bf1ca8d0e1d239bbe7f07e219))
+ - read shared indices by dissolving them into the current one. ([`5dc408f`](https://github.com/Byron/gitoxide/commit/5dc408f726d6f0f480438348eb5d713776329710))
+ - adjust to changes in `gitoxide` for clap upgrade to 4.1 ([`a01f5d7`](https://github.com/Byron/gitoxide/commit/a01f5d72346c36fdcb77af095273da6f4ab86e21))
+
+
+## 0.33.0 (2023-01-10)
+
+
+
+### Chore (BREAKING)
+
+ - upgrade MSRV to v1.64 (possible due to `windows` upgrade)
+
+### Commit Statistics
+
+
+
+ - 7 commits contributed to the release.
+ - 1 day passed between releases.
+ - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 2 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-date v0.4.1, git-features v0.26.1, git-glob v0.5.2, git-attributes v0.8.1, git-tempfile v3.0.1, git-ref v0.23.1, git-sec v0.6.1, git-config v0.15.1, git-prompt v0.3.1, git-url v0.13.1, git-discover v0.12.1, git-index v0.12.2, git-mailmap v0.9.1, git-pack v0.30.1, git-odb v0.40.1, git-transport v0.25.3, git-protocol v0.26.2, git-revision v0.10.1, git-refspec v0.7.1, git-worktree v0.12.1, git-repository v0.33.0 ([`5b5b380`](https://github.com/Byron/gitoxide/commit/5b5b3809faa71c658db38b40dfc410224d08a367))
+ - prepare changelogs prior to release ([`93bef97`](https://github.com/Byron/gitoxide/commit/93bef97b3c0c75d4bf7119fdd787516e1efc77bf))
+ - Merge branch 'patch-1' ([`b93f0c4`](https://github.com/Byron/gitoxide/commit/b93f0c49fc677b6c19aea332cbfc1445ce475375))
+ - thanks clippy ([`b34c9fe`](https://github.com/Byron/gitoxide/commit/b34c9fe58223862712eacc1cb7353e497a4b9778))
+ - thanks clippy ([`9e04685`](https://github.com/Byron/gitoxide/commit/9e04685dd3f109bfb27663f9dc7c04102e660bf2))
+ - upgrade MSRV to v1.64 (possible due to `windows` upgrade) ([`dd7f3bf`](https://github.com/Byron/gitoxide/commit/dd7f3bf19cce0d214924fa86aeb4c5823f5bcc02))
+ - uprgade serial_test to 0.10 ([`8623b5a`](https://github.com/Byron/gitoxide/commit/8623b5a36f3e82cd694f7772798e36656cbfcd0a))
+
+
+## 0.32.0 (2023-01-09)
+
+
+
+### Bug Fixes
+
+ - 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 git_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.
+
+### Other
+
+ - name and email from different config sections
+ The user.name, user.email, author.name, author.email, committer.name, and
+ committer.email configuration may come from different sections from
+ different config files. This new test exercises a couple of scenarios that
+ are currently broken.
+
+### Reverted (BREAKING)
+
+ - `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.
+
+### Commit Statistics
+
+
+
+ - 15 commits contributed to the release over the course of 9 calendar days.
+ - 9 days passed between releases.
+ - 4 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-ref v0.23.0, git-config v0.15.0, git-command v0.2.2, git-diff v0.26.0, git-discover v0.12.0, git-mailmap v0.9.0, git-pack v0.30.0, git-odb v0.40.0, git-transport v0.25.2, git-protocol v0.26.1, git-revision v0.10.0, git-refspec v0.7.0, git-worktree v0.12.0, git-repository v0.32.0 ([`ffb5b6a`](https://github.com/Byron/gitoxide/commit/ffb5b6a21cb415315db6fd5294940c7c6deb4538))
+ - Merge branch 'signature-resolution' ([`3036497`](https://github.com/Byron/gitoxide/commit/303649735f3f2094048527fff9b47e9012d75e02))
+ - fix tests ([`d6c62bd`](https://github.com/Byron/gitoxide/commit/d6c62bdef92b3f2918d330a30d2c0cc966021b9f))
+ - prepare changelogs prior to release ([`4381a03`](https://github.com/Byron/gitoxide/commit/4381a03a34c305f31713cce234c2afbf8ac60f01))
+ - Merge branch 'signature-resolution' ([`0f7edc1`](https://github.com/Byron/gitoxide/commit/0f7edc1ec87774917c8683dfea2c4989d0762648))
+ - `commiter_or_default()`, `author_or_default()` and `user_default()`. ([`87abb51`](https://github.com/Byron/gitoxide/commit/87abb51596bd0a5a6b552a5de98a920d6c797e3c))
+ - default author and committer time ([`a05b1c4`](https://github.com/Byron/gitoxide/commit/a05b1c4d82bc6c7758989a3bbe326ea610903820))
+ - add explainers for asserts in test cases ([`53dd252`](https://github.com/Byron/gitoxide/commit/53dd2522dc31d0318f0385776ca014a3be271b5e))
+ - Release git-index v0.12.1 ([`8aa5c1d`](https://github.com/Byron/gitoxide/commit/8aa5c1db9e342cc49dfa588d5b4b9f893067dbf7))
+ - Merge branch 'signature-resolution' ([`df3ebfc`](https://github.com/Byron/gitoxide/commit/df3ebfc72eb791c562db7b4df25a0b73c8046d54))
+ - refactor ([`59262dd`](https://github.com/Byron/gitoxide/commit/59262ddc0a9bf8765dfe24193199bf6ffee39389))
+ - Release git-date v0.4.0, git-actor v0.17.0, git-object v0.26.0, git-traverse v0.22.0, git-index v0.12.0, safety bump 15 crates ([`0e3d0a5`](https://github.com/Byron/gitoxide/commit/0e3d0a56d7e6a60c6578138f2690b4fa54a2072d))
+ - signature name and email resolution ([`ec7bf71`](https://github.com/Byron/gitoxide/commit/ec7bf71b60f8c1e7529d610557c0305d624c1253))
+ - name and email from different config sections ([`80dcb40`](https://github.com/Byron/gitoxide/commit/80dcb406c5f588122531da115398094de3c3af79))
+ - Release git-transport v0.25.1 ([`e0b12fe`](https://github.com/Byron/gitoxide/commit/e0b12fe64b50a1b614111924b55ce02f1c39ac00))
+
+
+## 0.31.0 (2022-12-30)
+
+
+
+
+### New Features
+
+ - fetching `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.
+ - collect ssh-specific options to control how the ssh program is invoked.
+ These are passed through when creating the ssh transport.
+
+### Other
+
+ - 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`)
+ to the first tree of the first commit.
+
+### Chore (BREAKING)
+
+ - upgrade to prodash v23
+
+### Commit Statistics
+
+
+
+ - 10 commits contributed to the release over the course of 1 calendar day.
+ - 4 days passed between releases.
+ - 4 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 1 unique issue was worked on: [#676](https://github.com/Byron/gitoxide/issues/676)
+
+### Commit Details
+
+
+
+view details
+
+ * **[#676](https://github.com/Byron/gitoxide/issues/676)**
+ - explain how it's possible to deal with the first commit when comparing trees ([`9fabfc5`](https://github.com/Byron/gitoxide/commit/9fabfc50007603f9c1f7e70b5bb79a39726b12af))
+ * **Uncategorized**
+ - Release git-features v0.26.0, git-actor v0.16.0, git-attributes v0.8.0, git-object v0.25.0, git-ref v0.22.0, git-config v0.14.0, git-command v0.2.1, git-url v0.13.0, git-credentials v0.9.0, git-diff v0.25.0, git-discover v0.11.0, git-traverse v0.21.0, git-index v0.11.0, git-mailmap v0.8.0, git-pack v0.29.0, git-odb v0.39.0, git-transport v0.25.0, git-protocol v0.26.0, git-revision v0.9.0, git-refspec v0.6.0, git-worktree v0.11.0, git-repository v0.31.0, safety bump 24 crates ([`5ac9fbe`](https://github.com/Byron/gitoxide/commit/5ac9fbe265a5b61c533a2a6b3abfed2bdf7f89ad))
+ - prepare changelogs prior to release ([`30d8ca1`](https://github.com/Byron/gitoxide/commit/30d8ca19284049dcfbb0de2698cafae1d1a16b0c))
+ - adapt to changes in `git-worktree` ([`5a97bb5`](https://github.com/Byron/gitoxide/commit/5a97bb5365573895500f0adeb73c482b797051c4))
+ - make fmt ([`511ed00`](https://github.com/Byron/gitoxide/commit/511ed0000397a5b268530c8f5362e7d25b7c1594))
+ - Merge branch 'adjustments-for-cargo' ([`f8c562a`](https://github.com/Byron/gitoxide/commit/f8c562a559e6dc3377583cc7200585dad7c3d481))
+ - fetching `ssh` urls can ask for a different username. ([`d48b9a7`](https://github.com/Byron/gitoxide/commit/d48b9a7ae2d51676c7549377bcb0b9d3baa83681))
+ - upgrade to prodash v23 ([`9172079`](https://github.com/Byron/gitoxide/commit/91720798889ee7eb26da03a9e732caedda83b3e3))
+ - adapt to changes in git-repository and git-transport ([`d336368`](https://github.com/Byron/gitoxide/commit/d336368ea2b6e5918b709220522cf1509ef30be2))
+ - collect ssh-specific options to control how the ssh program is invoked. ([`61d89f5`](https://github.com/Byron/gitoxide/commit/61d89f586a0ad913fc2f502520282520a5e1fd15))
+
+
+## 0.30.2 (2022-12-26)
+
+
+
+### New Features
+
+ - make more HTTP options available
+ - `http.schannelCheckRevoke`
+
+### Other
+
+ - provide a repository clone example
+
+### Commit Statistics
+
+
+
+ - 9 commits contributed to the release over the course of 2 calendar days.
+ - 4 days passed between releases.
+ - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-repository v0.30.2 ([`25e0189`](https://github.com/Byron/gitoxide/commit/25e018936efbf9ffabfb1d403e1c44e2b4e7b0cb))
+ - maybe fix clone example declaration to allow publish ([`05a4085`](https://github.com/Byron/gitoxide/commit/05a4085594cb291c2c3186d4bdf8528af80b515a))
+ - Release git-features v0.25.1, git-url v0.12.2, git-odb v0.38.1, git-transport v0.24.2, git-repository v0.30.2 ([`bb0a07b`](https://github.com/Byron/gitoxide/commit/bb0a07b5edd5f980989d1a92e74df7f183febe87))
+ - thanks clippy ([`1c891d1`](https://github.com/Byron/gitoxide/commit/1c891d1f638a046a16e7f91ba8f792d3a26869a0))
+ - Merge branch 'adjustments-for-cargo' ([`d821fc5`](https://github.com/Byron/gitoxide/commit/d821fc5b4ef4ba606f2b6bb68b66f7260a0205dc))
+ - make more HTTP options available ([`38ae61a`](https://github.com/Byron/gitoxide/commit/38ae61a805bd8cca5df8d1c1dcf3a8a0f9c85f5a))
+ - Merge branch 'fix/ssh-clone' ([`3678a6a`](https://github.com/Byron/gitoxide/commit/3678a6abab6f59ff7008ccfe02bb8d61da47e166))
+ - refactor ([`668118c`](https://github.com/Byron/gitoxide/commit/668118c1a5fd47cb1d55eac77306cce3482ee71e))
+ - provide a repository clone example ([`114f184`](https://github.com/Byron/gitoxide/commit/114f184855b6177aa1f0dbf6e6589f23deb5ffe6))
+
+
+## 0.30.1 (2022-12-22)
+
+### New Features
+
+ - `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.
+
+### Commit Statistics
+
+
+
+ - 7 commits contributed to the release over the course of 1 calendar day.
+ - 2 days passed between releases.
+ - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
+ - 1 unique issue was worked on: [#668](https://github.com/Byron/gitoxide/issues/668)
+
+### Commit Details
+
+
+
+view details
+
+ * **[#668](https://github.com/Byron/gitoxide/issues/668)**
+ - update docs ([`f620f87`](https://github.com/Byron/gitoxide/commit/f620f87f3722f75396b1ff990fd7fe754f4a1558))
+ * **Uncategorized**
+ - Release git-url v0.12.1, git-transport v0.24.1, git-protocol v0.25.1, git-repository v0.30.1, git-commitgraph v0.12.0, gitoxide-core v0.22.0, gitoxide v0.20.0 ([`08ec3a9`](https://github.com/Byron/gitoxide/commit/08ec3a93d77a1018439a5c41c23729ffed27c5a5))
+ - prepare changelogs prior to release ([`68ce15d`](https://github.com/Byron/gitoxide/commit/68ce15d07b50cfacdac0d1e42fe7f5e6330ba523))
+ - Merge branch 'adjustments-for-cargo' ([`5afa7f5`](https://github.com/Byron/gitoxide/commit/5afa7f51342deaf0938e7fb2ebe6a578e83ab645))
+ - `open::Options::open_path_as_is()` allows to avoid 'smart opening' to try the path verbatim. ([`ca84c87`](https://github.com/Byron/gitoxide/commit/ca84c87734804cbfc65e311b89ff6ccfc236149c))
+ - Merge branch 'fix/relative-scplike-urls' ([`2c2d373`](https://github.com/Byron/gitoxide/commit/2c2d373cfda26a2bb57dbc2b317ee2d8e1f96e84))
+ - adapt to changes in `git-url` ([`6caee9b`](https://github.com/Byron/gitoxide/commit/6caee9be6d335ee20342d4fc5fde1dfe608fe245))
+
+
+## 0.30.0 (2022-12-19)
+
+
+
+### Changed
+
+ - represent `GIT_(COMMITTER|AUTHOR)_(NAME|EMAIL|DATE)` with git configuration.
+ That way it becomes more obvious where values are coming from.
+
+### New Features
+
+ - expose `git-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.
+
+### Bug Fixes
+
+ - 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`.
+
+### Changed (BREAKING)
+
+ - 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.
+
+### New Features (BREAKING)
+
+ - `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.
+
+### Other (BREAKING)
+
+ - `Remote::with_refspec()` to `Remote::with_refspecs()` to allow adding more than one refspec as part of the builder.
+
+### Commit Statistics
+
+
+
+ - 78 commits contributed to the release over the course of 27 calendar days.
+ - 27 days passed between releases.
+ - 25 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 2 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-date v0.3.1, git-features v0.25.0, git-actor v0.15.0, git-glob v0.5.1, git-path v0.7.0, git-attributes v0.7.0, git-config-value v0.10.0, git-lock v3.0.1, git-validate v0.7.1, git-object v0.24.0, git-ref v0.21.0, git-sec v0.6.0, git-config v0.13.0, git-prompt v0.3.0, git-url v0.12.0, git-credentials v0.8.0, git-diff v0.24.0, git-discover v0.10.0, git-traverse v0.20.0, git-index v0.10.0, git-mailmap v0.7.0, git-pack v0.28.0, git-odb v0.38.0, git-packetline v0.14.1, git-transport v0.24.0, git-protocol v0.25.0, git-revision v0.8.0, git-refspec v0.5.0, git-worktree v0.10.0, git-repository v0.30.0, safety bump 26 crates ([`e6b9906`](https://github.com/Byron/gitoxide/commit/e6b9906c486b11057936da16ed6e0ec450a0fb83))
+ - prepare chnagelogs prior to git-repository release ([`7114bbb`](https://github.com/Byron/gitoxide/commit/7114bbb6732aa8571d4ab74f28ed3e26e9fbe4d0))
+ - Merge branch 'read-header' ([`3d01252`](https://github.com/Byron/gitoxide/commit/3d0125271ec7bd606734bd74757a7e31a18c7ce5))
+ - expose `git-features` crate at root under `features`. ([`1683a84`](https://github.com/Byron/gitoxide/commit/1683a848459cae2b9182b365e3e22b0e8ba73534))
+ - adjust to changes in `git-odb` ([`50ea7fb`](https://github.com/Byron/gitoxide/commit/50ea7fba30c752f86609fabf579a8a038b505c17))
+ - Merge branch 'patch-1' ([`fbce7bb`](https://github.com/Byron/gitoxide/commit/fbce7bb55c8c2474c0dfc5413649ecf744d00d92))
+ - Use specific Iter constructors in stats example ([`0a72c18`](https://github.com/Byron/gitoxide/commit/0a72c1876b8530f44d464b1597abd6428263d36e))
+ - adapt to changes in `git-transport` ([`3446a15`](https://github.com/Byron/gitoxide/commit/3446a15eb4380d110e70d7ac8e5339c949f9771d))
+ - Merge branch 'main' into read-split-index ([`c57bdde`](https://github.com/Byron/gitoxide/commit/c57bdde6de37eca9672ea715962bbd02aa3eb055))
+ - adapt to changes in `git-index` ([`2d90ad6`](https://github.com/Byron/gitoxide/commit/2d90ad6b1e0d2d8c4d30560407d69e18bc8d899f))
+ - Merge branch 'adjustments-for-cargo' ([`083909b`](https://github.com/Byron/gitoxide/commit/083909bc7eb902eeee2002034fdb6ed88280dc5c))
+ - thanks clippy ([`f1160fb`](https://github.com/Byron/gitoxide/commit/f1160fb42acf59b37cbeda546a7079af3c9bc050))
+ - adapt to changes in `git-features::fs`. ([`35f7d59`](https://github.com/Byron/gitoxide/commit/35f7d5960210738d88d35aef9c1ed3480681c481))
+ - `Remote` knows about its `tagOpt` configuration. ([`90ef6fc`](https://github.com/Byron/gitoxide/commit/90ef6fc36b440cc4baf3fde4a30060f1b4a0c8cf))
+ - adjust to changes in `git-testtools` ([`4eb842c`](https://github.com/Byron/gitoxide/commit/4eb842c7150b980e1c2637217e1f9657a671cea7))
+ - Merge branch 'adjustments-for-cargo' ([`94750e1`](https://github.com/Byron/gitoxide/commit/94750e15831969059551af35d31c21009462084d))
+ - improve docs related to authentication when fetching ([`5979503`](https://github.com/Byron/gitoxide/commit/5979503bd884f53ae02200c76e55b3709f85c1d6))
+ - provide a clearer error message when trying to open a git repository that isn't one. ([`d659bda`](https://github.com/Byron/gitoxide/commit/d659bda2e1b0fcab529df7af6467f063ae5d0dd7))
+ - http transports can now reuse a connection. ([`ff0332e`](https://github.com/Byron/gitoxide/commit/ff0332e815c228cc5cdfe58c3598ad261bb2879e))
+ - allow to open a `Repository` from if 'config' file is missing. ([`9079b9d`](https://github.com/Byron/gitoxide/commit/9079b9d2e5f7cc133c6f2b2c2e64245b150c7d74))
+ - Merge branch 'adjustments-for-cargo' ([`70ccbb2`](https://github.com/Byron/gitoxide/commit/70ccbb21b1113bdeb20b52d274141a9fdb75f579))
+ - upgrade clru, remove it from git-repository dependencies (unused) ([`7e7547d`](https://github.com/Byron/gitoxide/commit/7e7547d995afc16192a1ee08add5a87560197fc9))
+ - Merge branch 'main' into adjustments-for-cargo ([`bb60d3d`](https://github.com/Byron/gitoxide/commit/bb60d3d5cb9dbd7abe61accded6d21e320c624db))
+ - adapt to changes in git-repository ([`89230f4`](https://github.com/Byron/gitoxide/commit/89230f4e151056abaa2bce39d9d18f6dd1512d59))
+ - improve error verbosity when fetching and cloning ([`40f7379`](https://github.com/Byron/gitoxide/commit/40f7379b7a89f7fe6f916801384e9e65e5b85c57))
+ - network related Error type support `is_spurious()` method. ([`28e4808`](https://github.com/Byron/gitoxide/commit/28e48083052216ddf1fd1f187cc22d506d3d9f86))
+ - Merge branch 'paulyoung/scheme-ext' ([`3e27550`](https://github.com/Byron/gitoxide/commit/3e27550577ea942427a57c902570f0416f540753))
+ - realign test expectations ([`93e6d71`](https://github.com/Byron/gitoxide/commit/93e6d7199408e492574c43fcfb81faccea2b6fd4))
+ - `tree::diff::Platform::for_each_to_obtain_tree()` now properly surfaces user provided errors. ([`b77fc86`](https://github.com/Byron/gitoxide/commit/b77fc86ab580dd81b08022996f07cc7925104e77))
+ - when fetching from file://, don't upset windows by trying `d:/foo`, use `d:\\foo` instead. ([`5386eed`](https://github.com/Byron/gitoxide/commit/5386eed6a13a32a850c59706b15d8988c67733ce))
+ - `Remote::with_refspec()` to `Remote::with_refspecs()` to allow adding more than one refspec as part of the builder. ([`fceee74`](https://github.com/Byron/gitoxide/commit/fceee748c114b2d0760074e911e533cd020f6996))
+ - default features are set to `max-performance-safe` to assure compatibility. ([`3c84ceb`](https://github.com/Byron/gitoxide/commit/3c84cebc5997356ff5f531c6cc9567bdd9b83eb5))
+ - `interrupts::init_handler()` can now be undone. ([`f8a2bfb`](https://github.com/Byron/gitoxide/commit/f8a2bfb93dadbc64393135e0a447f3d76628509c))
+ - Make `prodash::tree` avaialble as `progress::tree`. ([`457c2e0`](https://github.com/Byron/gitoxide/commit/457c2e081b1aa5dfaab3f663b9aba66c16369939))
+ - read worktree specific configuration to override the one from the shared repository. ([`d1b7ec6`](https://github.com/Byron/gitoxide/commit/d1b7ec605f8016c52c088477b6b0c5adf7ea0ab2))
+ - refactor ([`2d83222`](https://github.com/Byron/gitoxide/commit/2d83222dbf607f78acad4874580d1f007d838c13))
+ - move tests::repository::config::worktree to `tests::repository::open::worktree` ([`62afb7b`](https://github.com/Byron/gitoxide/commit/62afb7ba87311c5b04c8cd8002308d1b44959131))
+ - improve documentation about the configuration we always load ([`75488a7`](https://github.com/Byron/gitoxide/commit/75488a7d91abb90337d42f04e86e3d1373b8c19e))
+ - Assure that worktree configuration is marked as such with `Source::Worktree`. ([`a191948`](https://github.com/Byron/gitoxide/commit/a191948b758ab4e06a19eef748f16a5f458fe477))
+ - test to check if worktree overrides shared configs ([`b69f219`](https://github.com/Byron/gitoxide/commit/b69f21997bac7751e879608fe5b0ba08814aab4d))
+ - remove `canonicalize` calls from test… ([`bea689a`](https://github.com/Byron/gitoxide/commit/bea689a97a8e42a92af7f77f7d8706cd96c6dc10))
+ - fix type - prevent creating a fixture archive ([`33992ab`](https://github.com/Byron/gitoxide/commit/33992ab6510c65dc97e5eb9565141b977f5b021f))
+ - exclude fixture archive from being uploaded… ([`5c2b44c`](https://github.com/Byron/gitoxide/commit/5c2b44c53feae9f23c715dbad962baaf64135963))
+ - refactor… ([`ae812bd`](https://github.com/Byron/gitoxide/commit/ae812bde55d55ce06f95ca73513d9749e876ea0e))
+ - refactor… ([`394aab9`](https://github.com/Byron/gitoxide/commit/394aab90bdcaa1683b0318e70c455d09b1a7d4cc))
+ - remove worktree permission configuration option… ([`7ebf229`](https://github.com/Byron/gitoxide/commit/7ebf229bec6075a149702273c86137f54ef721ed))
+ - load worktree config if necessary ([`760e736`](https://github.com/Byron/gitoxide/commit/760e736931c13d155dbbe46459fe11b602084549))
+ - add test for worktree configs ([`23d8474`](https://github.com/Byron/gitoxide/commit/23d847480eff1a0d26fd801dfa8ad6ed205c71d4))
+ - Release git-hash v0.10.1, git-hashtable v0.1.0 ([`7717170`](https://github.com/Byron/gitoxide/commit/771717095d9a67b0625021eb0928828ab686e772))
+ - Merge branch 'remove-lines-parsing' ([`9d8e32d`](https://github.com/Byron/gitoxide/commit/9d8e32d3c276fec34e3fce0feb29de0d24a8d1d2))
+ - environment variable permissions are per topic. ([`5fe6aa3`](https://github.com/Byron/gitoxide/commit/5fe6aa3f3f2f81d84f0d96e874e68a8bf4de1db1))
+ - make fmt ([`747008d`](https://github.com/Byron/gitoxide/commit/747008d9d370844574dda94e5bec1648c4deb57e))
+ - switch from `atty` to `is-terminal` ([`7304bc1`](https://github.com/Byron/gitoxide/commit/7304bc1c0efaad64a39520962072343ef02f6c25))
+ - Merge branch 'main' into http-config ([`6b9632e`](https://github.com/Byron/gitoxide/commit/6b9632e16c416841ffff1b767ee7a6c89b421220))
+ - represent object cache configuration like `GITOXIDE_PACK_CACHE_MEMORY` in git-configuration. ([`becbd8d`](https://github.com/Byron/gitoxide/commit/becbd8d896a1663f1607be4e86e632773e926f1f))
+ - represent `GIT_(COMMITTER|AUTHOR)_(NAME|EMAIL|DATE)` with git configuration. ([`a4ac9cf`](https://github.com/Byron/gitoxide/commit/a4ac9cf3e667a3059e33aac8188150529578622d))
+ - `open::ReplacementObjects` is removed in favor of two custom git-configuration flags. ([`49f39d6`](https://github.com/Byron/gitoxide/commit/49f39d6bb487c0254176a5082f2c7851b83952a1))
+ - apply related environment variables as config overrides ([`9441c26`](https://github.com/Byron/gitoxide/commit/9441c261bcae61d1d1e674b5e783f38b0471be29))
+ - add `permissions::Environment::http_transport`. ([`fc64693`](https://github.com/Byron/gitoxide/commit/fc64693d5af0fda402c560d10d15652c24d14219))
+ - refactor ([`603f341`](https://github.com/Byron/gitoxide/commit/603f341e71c021bcc0f154c2ce6c39f4e6546c12))
+ - `open::Options::modify()` as general pattern to allow builder methods usage in `&mut self`. ([`0ce29a9`](https://github.com/Byron/gitoxide/commit/0ce29a965cf16273cf74bd22e40f464e322e2f62))
+ - remove `SnapshotMut::apply_cli_overrides()` in favor of `open::Options::cli_overrides()`. ([`f16e361`](https://github.com/Byron/gitoxide/commit/f16e36168cc93768ba5d53c9848ff2e8432d06b1))
+ - Merge branch 'optimize_hashtables' ([`95ad56c`](https://github.com/Byron/gitoxide/commit/95ad56c11489bc46d6eb2b2f48cf0bf01e954c58))
+ - use newly added git-hashtable ([`50cb436`](https://github.com/Byron/gitoxide/commit/50cb4362010e1a5799fe782df36ac5fcdb48dd8a))
+ - Merge branch 'path-normalize' ([`805329a`](https://github.com/Byron/gitoxide/commit/805329a0a5f6543bbc1d5885977b47bf7baa7f08))
+ - switch to custom Hasher implementation ([`269d59e`](https://github.com/Byron/gitoxide/commit/269d59e0bee1f072096667b143800a0d85b18403))
+ - Release git-features v0.24.1, git-actor v0.14.1, git-index v0.9.1 ([`7893502`](https://github.com/Byron/gitoxide/commit/789350208efc9d5fc6f9bc4f113f77f9cb445156))
+ - more faithfully parse http.followRedirect ([`b84ae6a`](https://github.com/Byron/gitoxide/commit/b84ae6a94082876bfc23cda167aabea88fda67be))
+ - adjust for changes in `git-path` ([`cf25e35`](https://github.com/Byron/gitoxide/commit/cf25e3594b99909defb431f34fb3a4d8a25bd37c))
+ - thanks clippy ([`10f4f21`](https://github.com/Byron/gitoxide/commit/10f4f2149830734cc551ea96a3d087f07d43fe29))
+ - Allow remote overrides for http options ([`340dcad`](https://github.com/Byron/gitoxide/commit/340dcad91832668bc1b570f35714178aa2c53ece))
+ - more type-safety for remote names by making clear they can be named after URLs. ([`84d594c`](https://github.com/Byron/gitoxide/commit/84d594caf3f04f1ce337e455343278a6f4674957))
+ - Add `Repository::commit_as(committer, author, …)` convenience method. ([`8482f90`](https://github.com/Byron/gitoxide/commit/8482f90d0a2b61259cd51ca4f40ce322e388cb34))
+ - upgrade to `prodash 21.1` and add `Ids` to all progress instances. ([`c8835c6`](https://github.com/Byron/gitoxide/commit/c8835c6edae784c9ffcb69a674c0a6545dbb2af3))
+ - Merge branch 'http-config' ([`a4ff140`](https://github.com/Byron/gitoxide/commit/a4ff140a0d3607cf282c49228c1248bd36d464fd))
+ - `config::CommitAutoRollback` now implements `DerefMut`. ([`363ac7a`](https://github.com/Byron/gitoxide/commit/363ac7a74ec841505b5fc7cc1b8fae11c0a63ea9))
+ - Merge branch 'main' into http-config ([`bcd9654`](https://github.com/Byron/gitoxide/commit/bcd9654e56169799eb706646da6ee1f4ef2021a9))
+ - make fmt ([`0abab7d`](https://github.com/Byron/gitoxide/commit/0abab7da2ec1b8560e6c1eb009f534c9fc7814fe))
+
+
+## 0.29.0 (2022-11-21)
+
+
+
+### New Features
+
+
+
+ - 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…
+
+ * blocking-http-transport-reqwest-rust-tls
+* blocking-http-transport-reqwest-native-tls
+
+### Bug Fixes
+
+ - `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
+
+### Other
+
+ - Set GIT_EDITOR in make_rebase_i_repo.sh
+ If the user has core.editor set in their global git config, then that value
+ takes precedence over the EDITOR environment variable. The GIT_EDITOR
+ environment variable, however, has higher precedence than core.editor. For
+ this test, using GIT_EDITOR ensures that the desired sed command line is
+ used.
+
+### New Features (BREAKING)
+
+ - 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 `git-features` and `git-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.
+
+### Commit Statistics
+
+
+
+ - 29 commits contributed to the release over the course of 4 calendar days.
+ - 4 days passed between releases.
+ - 7 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 1 unique issue was worked on: [#606](https://github.com/Byron/gitoxide/issues/606)
+
+### Commit Details
+
+
+
+view details
+
+ * **[#606](https://github.com/Byron/gitoxide/issues/606)**
+ - `gix::Commit::describe()` chooses tag names (more) correctly. ([`c6a6902`](https://github.com/Byron/gitoxide/commit/c6a690219915b2b401d2d11f61db35b2931e5b3a))
+ * **Uncategorized**
+ - Release git-hash v0.10.0, git-features v0.24.0, git-date v0.3.0, git-actor v0.14.0, git-glob v0.5.0, git-path v0.6.0, git-quote v0.4.0, git-attributes v0.6.0, git-config-value v0.9.0, git-tempfile v3.0.0, git-lock v3.0.0, git-validate v0.7.0, git-object v0.23.0, git-ref v0.20.0, git-sec v0.5.0, git-config v0.12.0, git-command v0.2.0, git-prompt v0.2.0, git-url v0.11.0, git-credentials v0.7.0, git-diff v0.23.0, git-discover v0.9.0, git-bitmap v0.2.0, git-traverse v0.19.0, git-index v0.9.0, git-mailmap v0.6.0, git-chunk v0.4.0, git-pack v0.27.0, git-odb v0.37.0, git-packetline v0.14.0, git-transport v0.23.0, git-protocol v0.24.0, git-revision v0.7.0, git-refspec v0.4.0, git-worktree v0.9.0, git-repository v0.29.0, git-commitgraph v0.11.0, gitoxide-core v0.21.0, gitoxide v0.19.0, safety bump 28 crates ([`b2c301e`](https://github.com/Byron/gitoxide/commit/b2c301ef131ffe1871314e19f387cf10a8d2ac16))
+ - prepare changelogs prior to release ([`e4648f8`](https://github.com/Byron/gitoxide/commit/e4648f827c97e9d13636d1bbdc83dd63436e6e5c))
+ - Make `reqwest` TLS backend configuration easy. ([`3ddbd2d`](https://github.com/Byron/gitoxide/commit/3ddbd2de369b521fa3f21935f10fe9c248840893))
+ - Merge branch 'max-pure' ([`03ff188`](https://github.com/Byron/gitoxide/commit/03ff1882f2982fba38fbbf245eea13ef9df50f33))
+ - rename `blocking-http-transport` feature to `blocking-http-transport-curl`; add `blocking-http-transport-reqwest`. ([`bc2a399`](https://github.com/Byron/gitoxide/commit/bc2a399f2fbb69d23b0b05e8dfb95f3c64ff93b9))
+ - Merge branch 'jpgrayson/main' ([`72abac6`](https://github.com/Byron/gitoxide/commit/72abac68055947d3ff3fb4443f29da14a389e45d))
+ - Merge branch 'breadthfirst-improvements' ([`b755b5b`](https://github.com/Byron/gitoxide/commit/b755b5bd4cbf8839ba43a143183ae785584f1d59))
+ - improve docs for breadthfirst traversal - talking about sorting seems odd ([`6dc3ec1`](https://github.com/Byron/gitoxide/commit/6dc3ec1936b8c74e162e95a5aa1ff0a0d13e6fc8))
+ - Set GIT_EDITOR in make_rebase_i_repo.sh ([`f302fc1`](https://github.com/Byron/gitoxide/commit/f302fc1bcd06fadccd126f4f5f9c0165afabedda))
+ - add `Repository::empty_tree()` to obtain the empty tree object. ([`ff9e157`](https://github.com/Byron/gitoxide/commit/ff9e1571b558475e727dc6ba11dab24ef15fb6f4))
+ - Merge branch 'cwd-consistency' ([`ea7c6a3`](https://github.com/Byron/gitoxide/commit/ea7c6a3b069c9e13905b51b87538c57ba9182dca))
+ - Adapt to changes in `git-discover` and `git-path` and `git-odb` ([`98c2501`](https://github.com/Byron/gitoxide/commit/98c250175a39598b9d37613c43dda2299da8eff3))
+ - Merge branch 'pierrechevalier83/main' ([`a5b1d73`](https://github.com/Byron/gitoxide/commit/a5b1d738d23d0a343bee1b72bcb72250b5fdae11))
+ - restore original representation of `Tag` at the cost of some duplication ([`dd0a23d`](https://github.com/Byron/gitoxide/commit/dd0a23d710be0eb6c7ea7f883aeb1400bcbc0709))
+ - refactor ([`c02a6bd`](https://github.com/Byron/gitoxide/commit/c02a6bdcc3669a48cd4b5b640280701fd089575d))
+ - stabilize tests (unwrap() -> ?) and improve fixture ([`d4f58a9`](https://github.com/Byron/gitoxide/commit/d4f58a941e3936fb2f11ec66b75156e1b9120fa2))
+ - [refactor] Deduplicate Tag and TagRef ([`6003fa2`](https://github.com/Byron/gitoxide/commit/6003fa22085b5031565c51b2b5a0a9feb1579fb0))
+ - add additional tests ([`5b97d1b`](https://github.com/Byron/gitoxide/commit/5b97d1b8c787927fba246647427915fa2ca9dd4e))
+ - Sort like described in the comment ([`dfe125e`](https://github.com/Byron/gitoxide/commit/dfe125edb9ba15ec4b44155ac0028c44ba0bdb1f))
+ - rename tuple fields to what they actually are (without changing logic) ([`3177b2b`](https://github.com/Byron/gitoxide/commit/3177b2bf3f7ee9185d3afab05e50cd25e9561127))
+ - refactor ([`cf523cd`](https://github.com/Byron/gitoxide/commit/cf523cdaee36ea084826660ba0605dd5107cfe1f))
+ - Merge branch 'version2021' ([`0e4462d`](https://github.com/Byron/gitoxide/commit/0e4462df7a5166fe85c23a779462cdca8ee013e8))
+ - upgrade edition to 2021 in most crates. ([`3d8fa8f`](https://github.com/Byron/gitoxide/commit/3d8fa8fef9800b1576beab8a5bc39b821157a5ed))
+ - also sort entries lexicographically ([`84ed89c`](https://github.com/Byron/gitoxide/commit/84ed89c3bf6692f18c4bb97173527de1bcba7ac6))
+ - curl can authenticate the proxy now and store or reject credentials. ([`63b9050`](https://github.com/Byron/gitoxide/commit/63b9050240b80c5493dab3e8d0b1c675f83d78d6))
+ - Pass along the action to kick off the proxy-authentication as well ([`ae74985`](https://github.com/Byron/gitoxide/commit/ae74985b84134795cad0fa88e3fbe9ca776ffa9a))
+ - configure the http proxy configuration method if needed ([`6b2d18e`](https://github.com/Byron/gitoxide/commit/6b2d18eb8da09ee6d209c9dbccd02dc0df62a967))
+ - Support for reading `http.proxyAuthMethod` ([`92f88c9`](https://github.com/Byron/gitoxide/commit/92f88c94ff288b5675ca3296c27ffb66e1716c22))
+
+
+## 0.28.0 (2022-11-17)
+
+
+
+### New Features
+
+ - `Id` implements `std::fmt::Display`
+ - `Remote::repo()` to obtain the underlying repository.
+ For convenience.
+ - Support for user-customizable user agent strings.
+ Doable by setting the `gitoxide.userAgent` variable.
+ - add `env::agent()` for obtaining the default client agent string.
+
+### Other
+
+ - try to apply maybe-async in a place where it's probably not possible.
+ The goal is to re-use the existing tests, but right now they only
+ compile in async mode as the `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.
+
+### New Features (BREAKING)
+
+ - 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.
+
+### Commit Statistics
+
+
+
+ - 53 commits contributed to the release over the course of 8 calendar days.
+ - 8 days passed between releases.
+ - 6 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 2 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-glob v0.4.2, git-config-value v0.8.2, git-lock v2.2.0, git-ref v0.19.0, git-config v0.11.0, git-discover v0.8.0, git-index v0.8.0, git-transport v0.22.0, git-protocol v0.23.0, git-worktree v0.8.0, git-repository v0.28.0, gitoxide-core v0.20.0, gitoxide v0.18.0, safety bump 9 crates ([`0c253b1`](https://github.com/Byron/gitoxide/commit/0c253b15143dcedfe4c66d64ab1ea6e097030651))
+ - prepare changelogs prior to release ([`fe5721f`](https://github.com/Byron/gitoxide/commit/fe5721f888c64c79fe9a734a9e33b94a282f8d97))
+ - Merge branch 'http-config' ([`665b53e`](https://github.com/Byron/gitoxide/commit/665b53e1c2e1de65fafa28b669f58977868bbc81))
+ - fix docs ([`b5c316e`](https://github.com/Byron/gitoxide/commit/b5c316e285369a84e57ec6f7425b92fec2978a49))
+ - adapt to changes in `git-protocol` ([`bd70847`](https://github.com/Byron/gitoxide/commit/bd70847651577feb9b0bdf4e91afaffbcd212ff5))
+ - adapt to changes in `git-protocol` ([`c421187`](https://github.com/Byron/gitoxide/commit/c42118771b2fba2ad135b00c2bf1e338e81ac2e0))
+ - `Id` implements `std::fmt::Display` ([`58e1488`](https://github.com/Byron/gitoxide/commit/58e14884b1d025651f874d899cb2d627c4a2afbf))
+ - Assure clones write their refs into packed-refs right away. ([`25dcae7`](https://github.com/Byron/gitoxide/commit/25dcae7883691b014f9045cf9b8fc939281a127a))
+ - fix warnings ([`8eec815`](https://github.com/Byron/gitoxide/commit/8eec8159452f590850c6963170e12f1e80efc45e))
+ - use convenience traits everywhere when applying leniency ([`9ff64bb`](https://github.com/Byron/gitoxide/commit/9ff64bbb67dd55f2dfa8cf8a316444c9c826f2e0))
+ - refactor ([`db7ad53`](https://github.com/Byron/gitoxide/commit/db7ad53a2ac54dc68c0153a8a6aef0dfc87f2fa4))
+ - Make application of lenient configuration values way easier and nicer to read ([`a59c791`](https://github.com/Byron/gitoxide/commit/a59c791da30bf4ef7d5a9c1daf270132fea21636))
+ - refactor ([`b5ca8a6`](https://github.com/Byron/gitoxide/commit/b5ca8a6c4841da14c14a5b9b06dc6f796cacbd74))
+ - Also read the connectTimeout in simple HTTP options ([`e055617`](https://github.com/Byron/gitoxide/commit/e05561782c3ea85dfe4e7136efe2ff73336e9336))
+ - keep track of `no_proxy` environment variable support ([`f0625de`](https://github.com/Byron/gitoxide/commit/f0625de13073de4767881ed0398d0cd2791b0ad2))
+ - Add proxy-prefix and explicitly allow empty proxy values ([`70303c1`](https://github.com/Byron/gitoxide/commit/70303c139825143cf17004086a374c69c9d55949))
+ - Empty proxies can disable the proxy; cleanup test fixture, let it have its own ([`21f3283`](https://github.com/Byron/gitoxide/commit/21f328352b4a7b97a58233eba4dff824ac8ed29f))
+ - Merge branch 'main' into http-config ([`f4ff821`](https://github.com/Byron/gitoxide/commit/f4ff821fd4233dd1dc1a449af4d4600becf3b4ac))
+ - Merge branch 'async-fetch' ([`0c9c48b`](https://github.com/Byron/gitoxide/commit/0c9c48b3b91a1396eb1796f288a2cb10380d1f14))
+ - remove blocking-only tests in favor of tests that test blocking and async implementations ([`7c4dd21`](https://github.com/Byron/gitoxide/commit/7c4dd218c25f20c5bfd1b9c7ac66e6cee83e08a9))
+ - remove optional `blocking` dependency as it's not going to be used for now. ([`9b5f0eb`](https://github.com/Byron/gitoxide/commit/9b5f0eb06aa32ce3dd77781e85525a065525a7eb))
+ - Add last remaining test to validate entire packs can be fetched in async mode without issues. ([`5cc3087`](https://github.com/Byron/gitoxide/commit/5cc3087cea747369434eeadf95dccdf07ffadca2))
+ - Another test seems to be working ([`01e99b4`](https://github.com/Byron/gitoxide/commit/01e99b493c34163a80f52556f7b0993a14aa74db))
+ - the first working test ([`ce84fb3`](https://github.com/Byron/gitoxide/commit/ce84fb3c049760464bf0df4f5ed246b2ef7cc9a8))
+ - remove `futures-executor` in favor of `futures-lite::future::block_on` ([`2cd28ee`](https://github.com/Byron/gitoxide/commit/2cd28ee5f789fca1f7b443dd24035b52d91989f3))
+ - Prepare a first test for receiving an empty pack, but… ([`7471ab3`](https://github.com/Byron/gitoxide/commit/7471ab3cc4e6dd1fb8c9645cfd84dda5cd3618a5))
+ - thanks clippy ([`854ca68`](https://github.com/Byron/gitoxide/commit/854ca6853ed8dfcc0241c8bdbe9576e59cd70c68))
+ - Share all code when performing a ref-map test ([`886c017`](https://github.com/Byron/gitoxide/commit/886c0178c6f5b09be07af80d67284f177d65869c))
+ - actually get maybe-async to work! ([`f3a6424`](https://github.com/Byron/gitoxide/commit/f3a64240bfd675f241c3d40273a928ed6841f1a6))
+ - the first simple test to validate we can connect. ([`2bf860a`](https://github.com/Byron/gitoxide/commit/2bf860acb29694e2a00e9d4f0815de4ed1c35209))
+ - try to apply maybe-async in a place where it's probably not possible. ([`6beb6f2`](https://github.com/Byron/gitoxide/commit/6beb6f263fd40884b440092f39034dd43d3a95de))
+ - `Remote::repo()` to obtain the underlying repository. ([`25f7aab`](https://github.com/Byron/gitoxide/commit/25f7aabe38267b6b6c0547806028b2becb806416))
+ - fix build warnings ([`32b1ba9`](https://github.com/Byron/gitoxide/commit/32b1ba92a9f91229c1996ec0a86b2f923d804135))
+ - leniency for all UTF-8 conversion failures ([`1b53efb`](https://github.com/Byron/gitoxide/commit/1b53efb7ee80b9bf14843e5426c096e0921f7a53))
+ - support for handling of illformed UTF-8 ([`4a29331`](https://github.com/Byron/gitoxide/commit/4a293311d098ae3d951a882814ebc72cf2d1c0ad))
+ - lenient support for all values that could previously fail ([`d302c67`](https://github.com/Byron/gitoxide/commit/d302c67071713b9b855b2ba4718b3408ec618221))
+ - refactor ([`e93768b`](https://github.com/Byron/gitoxide/commit/e93768bfa8357fa01cfdfee86c8c911c9cc64bf6))
+ - Currently http transport is only available for blocking io ([`1236cf2`](https://github.com/Byron/gitoxide/commit/1236cf2fdd00cdd8b0c331cae22aa7e649a2a73c))
+ - thanks clippy ([`1553308`](https://github.com/Byron/gitoxide/commit/1553308bc112f8e5974123b41fcb04b586c9ea7f))
+ - add `remote::Connection::with_transport_config()`, change the way `*::transport_mut()` is used. ([`db9040f`](https://github.com/Byron/gitoxide/commit/db9040f0bb3a16879c8da0252a77df80bd417387))
+ - extra-headers respects empty entries to clear the list ([`9707f7f`](https://github.com/Byron/gitoxide/commit/9707f7f23ce683f8f04e2d18e15fecc9e8f69cf8))
+ - adjust for changes in `git-transport` ([`ef64395`](https://github.com/Byron/gitoxide/commit/ef64395d23f4a2816ae41ca123dd4cd880c78af1))
+ - First simple-http optiosn test passing ([`585047b`](https://github.com/Byron/gitoxide/commit/585047b3f353ca8781bc938803c5056686bb1305))
+ - refactor ([`0ced3a4`](https://github.com/Byron/gitoxide/commit/0ced3a4c8e6e01870d1b603738aa1af4b8947dc8))
+ - refactor ([`e3a24e6`](https://github.com/Byron/gitoxide/commit/e3a24e6f3b9e9a2e22c48fc3ebf8c6cc9ca36603))
+ - implement a couple of http values, needs some refactoring ([`a44c9ea`](https://github.com/Byron/gitoxide/commit/a44c9ea0a0fc0285607454951303792c83dff4b9))
+ - fix docs ([`d4089e7`](https://github.com/Byron/gitoxide/commit/d4089e786d67c10cdf94dddbf0dc2f1b2b0410dc))
+ - add missing assertions for simple options ([`9ff70e9`](https://github.com/Byron/gitoxide/commit/9ff70e9c7b1838738dbcd3e1a17e9088670aebb6))
+ - first step for basic test of simple http configuration ([`21bd85d`](https://github.com/Byron/gitoxide/commit/21bd85da23d3de1ac4dbc798ef6b3a8cf00a15a7))
+ - fix build ([`2ef0e09`](https://github.com/Byron/gitoxide/commit/2ef0e09f3889f5493794550482e07709455c7f21))
+ - Support for user-costomizable user agent strings. ([`709a732`](https://github.com/Byron/gitoxide/commit/709a73229b7cde56ddffa099158661632c606468))
+ - add `env::agent()` for obtaining the default client agent string. ([`e60d079`](https://github.com/Byron/gitoxide/commit/e60d07997989993216c2bd93efeb6f1b48da0a87))
+ - Merge branch 'main' into http-config ([`7c5b37d`](https://github.com/Byron/gitoxide/commit/7c5b37d28e98f59a6847368a0d0166d2dbb4acc1))
+
+
+## 0.27.0 (2022-11-08)
+
+### Changed (BREAKING)
+
+ - Move `object::tree::diff::change::DiffPlatform` to `object::blob::diff::Platform`.
+ - new `DiffPlatform::counts()`, open `DiffPlatform` for use of `git-diff::blob::*`.
+
+### Commit Statistics
+
+
+
+ - 10 commits contributed to the release.
+ - 1 day passed between releases.
+ - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-diff v0.22.0, git-index v0.7.1, git-pack v0.26.0, git-odb v0.36.0, git-transport v0.21.2, git-repository v0.27.0, safety bump 6 crates ([`f0cab31`](https://github.com/Byron/gitoxide/commit/f0cab317bb0c2799fa80d16f3ae1b89d6aee4284))
+ - prepare changelogs prior to release ([`f5f3a9e`](https://github.com/Byron/gitoxide/commit/f5f3a9edd038a89c8c6c4da02054e5439bcc0071))
+ - Merge branch 'fixes-for-crates-index-diff' ([`255be4d`](https://github.com/Byron/gitoxide/commit/255be4ddcd6cbca0a89f286eeecdd19ff70e000f))
+ - remove unused import; fix docs ([`efe0a51`](https://github.com/Byron/gitoxide/commit/efe0a51931fc7e42c82563575e3068dd6e401409))
+ - plan for more tests for line diffs ([`58934a4`](https://github.com/Byron/gitoxide/commit/58934a468040df45b9ca4062df2c7f245b0c791e))
+ - Fix borrowcheck issues by being less specific ([`aff6820`](https://github.com/Byron/gitoxide/commit/aff6820e3a4dbb1f189cb33adb577b7a2b90d109))
+ - a hunk based mechanism for line diffs is nearly there, just has lifetime issues ([`b1fc68f`](https://github.com/Byron/gitoxide/commit/b1fc68f27331f0648d117490ac404eeb47b5f15a))
+ - Move `object::tree::diff::change::DiffPlatform` to `object::blob::diff::Platform`. ([`c50868c`](https://github.com/Byron/gitoxide/commit/c50868c7ed7309515b4f0a188213d332d57dd146))
+ - new `DiffPlatform::counts()`, open `DiffPlatform` for use of `git-diff::blob::*`. ([`4ee3271`](https://github.com/Byron/gitoxide/commit/4ee32713093c2e41a12d148c6030add1df6aa966))
+ - keep track of http related configuration keys. ([`1afaebd`](https://github.com/Byron/gitoxide/commit/1afaebdcae977af8a9a0f0788ec754746d6d05bb))
+
+
+## 0.26.0 (2022-11-06)
+
+
+
+### New Features
+
+ - 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`.
+
+### Bug Fixes
+
+ - 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.
+
+### Changed (BREAKING)
+
+ - `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`.
+
+### New Features (BREAKING)
+
+ - `Tree::lookup_entry*()` returns attached `Entry` type.
+ That way chaining gets even easier.
+
+### Bug Fixes (BREAKING)
+
+ - `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.
+
+### Other (BREAKING)
+
+ - `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.
+
+### Commit Statistics
+
+
+
+ - 114 commits contributed to the release over the course of 27 calendar days.
+ - 27 days passed between releases.
+ - 15 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 1 unique issue was worked on: [#450](https://github.com/Byron/gitoxide/issues/450)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 12 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#450](https://github.com/Byron/gitoxide/issues/450)**
+ - make last test work to allow us to clone properly ([`3890f1a`](https://github.com/Byron/gitoxide/commit/3890f1a804a3f8b3f952a38fffc6e6bd6034164d))
+ - initail implementation of writing branch tracking information ([`e2a5714`](https://github.com/Byron/gitoxide/commit/e2a57146b4399c1447cf219e362deb5c3016a5bc))
+ - adapt to changes in `git-protocol` ([`d61eb2c`](https://github.com/Byron/gitoxide/commit/d61eb2c9f6f2f49ffb903179f793b126471347a5))
+ - Don't deviate by creating strange reflogs (with null-source & null-destination) ([`f1b5570`](https://github.com/Byron/gitoxide/commit/f1b5570629d8963aff961d252a9578277484adee))
+ - Support unborn remotes and pick up their default branch name. ([`619fd61`](https://github.com/Byron/gitoxide/commit/619fd6105b41d31ea5125151f98fae1299b179f5))
+ - adapt to changes in `git-protocol` ([`179ccd7`](https://github.com/Byron/gitoxide/commit/179ccd7d3e7777b7c72bd5e7ab7d045c9c4c1b98))
+ - prepare test for handling the 'unborn' lsrefs extension ([`547e450`](https://github.com/Byron/gitoxide/commit/547e450e6afc4528fc4ab1e422dbe33fdd14b885))
+ - fix: support for proper identification of '.' remote paths in `reference::remote::Name` ([`b219033`](https://github.com/Byron/gitoxide/commit/b219033960026615054f19eb0f643e4701fcc3d0))
+ - `Repository::branch_remote_name()` returns `reference::remote::Name`. ([`449ff06`](https://github.com/Byron/gitoxide/commit/449ff066d2b5dd423c639618193dd9e54d03c1f8))
+ - failing test for us setting up remote information after cloning ([`07efbce`](https://github.com/Byron/gitoxide/commit/07efbce5f2fff21d43c709ec91d445d60a17918c))
+ - update docs ([`c788b51`](https://github.com/Byron/gitoxide/commit/c788b51e73f41c95058c56add378e9b65f342322))
+ - refactor ([`7bd5263`](https://github.com/Byron/gitoxide/commit/7bd5263e3302c7989d599792c45ef2768366582b))
+ - definitely write all non-symbolic refs into packed-refs ([`b62d5b4`](https://github.com/Byron/gitoxide/commit/b62d5b4e6cf1ae6051203ba243e24c03edafcd6b))
+ - auto-pack references when creating them during clone ([`a9a621e`](https://github.com/Byron/gitoxide/commit/a9a621e117e5bbe38368bd6f0cc21db1365b7e18))
+ - refactor ([`728f688`](https://github.com/Byron/gitoxide/commit/728f688f95778f4d3d182f5e9db90ebe93b4f65b))
+ - use `tempfile` via `git-testools` ([`2c9edff`](https://github.com/Byron/gitoxide/commit/2c9edffad34245e6a0d2972cb66c849435caec92))
+ - failing test to show we don't pack refs yet ([`58cc01a`](https://github.com/Byron/gitoxide/commit/58cc01a9075f8f8038f0bc1c6876a85f25ff4712))
+ - sort out last test-case to assure setting symbolic refs is safe ([`d06900d`](https://github.com/Byron/gitoxide/commit/d06900dd2e5782ab1a72dee8f20df5c660ba0d6d))
+ - adjust to changes in `git-ref` ([`669249a`](https://github.com/Byron/gitoxide/commit/669249a88bf1e0074a0e9479688473b79e60db9c))
+ - assure that inital refs are placed into the correct spot ([`3e4c0cb`](https://github.com/Byron/gitoxide/commit/3e4c0cb1b88b7c3a26e24a1b6f68fa9ac5076bcb))
+ - and show that we don't manage to write the reflog for some reason ([`a70a6aa`](https://github.com/Byron/gitoxide/commit/a70a6aa698adedc86a63c28ccebb89c8c67cdfe0))
+ - the first successful test showing that we can write symbolic refs ([`2330305`](https://github.com/Byron/gitoxide/commit/2330305153b467b37956b2d9f1ca211506b96489))
+ - figure out more details on how to handle symbolic refs just enough ([`86a18bd`](https://github.com/Byron/gitoxide/commit/86a18bd3923d6f6e9a84c9b5f54e2456113c7b18))
+ - finally figure out how symbolic ref updates should work ([`376829a`](https://github.com/Byron/gitoxide/commit/376829a4c86ea2c84a35c20b62c78868feb18993))
+ - first step towards supporting writing of symbolic refs locally ([`61cd430`](https://github.com/Byron/gitoxide/commit/61cd4303a2a5818da969266b1490000db31d51e6))
+ - failing test to check for presence of remote HEAD ([`2f649e9`](https://github.com/Byron/gitoxide/commit/2f649e95c988947dca21c4cf0ccacc5d7d9a5406))
+ - thanks clippy ([`767fb7b`](https://github.com/Byron/gitoxide/commit/767fb7b20c922fd8e5477f28adf9de0419d3ac96))
+ - Use correct diff algorithm when diffing text ([`6fe93c2`](https://github.com/Byron/gitoxide/commit/6fe93c2473c6ecb673922344f55d13637092be22))
+ - refactor ([`71c6a20`](https://github.com/Byron/gitoxide/commit/71c6a203eeaf8ec58ab8385d1df73ca2daaea013))
+ - be specific about the kind of `diff::Error`, moving it to `diff::for_each::Error`. ([`71f15fc`](https://github.com/Byron/gitoxide/commit/71f15fc46fbaea455cf84a2b4cfe3e680047d790))
+ - initial support for obtaining the `diff.algorithm` lazily ([`f362ab2`](https://github.com/Byron/gitoxide/commit/f362ab221765c6fab20e9c88bbfda20d6da64216))
+ - refactor ([`af0c28d`](https://github.com/Byron/gitoxide/commit/af0c28d95b51acebd31cf707ee69ed727552d571))
+ - proper reflog entries for all other updated refs during cloning ([`ff4412e`](https://github.com/Byron/gitoxide/commit/ff4412e8580e2e47150dd2ba41a347964128486d))
+ - show that HEAD's referent also has the correct reflog ([`c25cb00`](https://github.com/Byron/gitoxide/commit/c25cb007ea5d8757a08e6579e17ae49f296f16b8))
+ - the first test to prove that HEAD reflogs are correct ([`1e7fd4e`](https://github.com/Byron/gitoxide/commit/1e7fd4e35a3f28bee6ca091f5a9d47fd081670cb))
+ - canonicalize URL right away for it to manifest in the changelog ([`3cfe13d`](https://github.com/Byron/gitoxide/commit/3cfe13d1edb01604772825ee8de6937b97165243))
+ - Query of `core.logAllRefUpdates` is now fallible. ([`072f5bc`](https://github.com/Byron/gitoxide/commit/072f5bc9c91c4c09bd6a73f9d7ac672805cae533))
+ - Fully reload in-memory configuration after configuration changes… ([`bc5b4e7`](https://github.com/Byron/gitoxide/commit/bc5b4e77bc66317b2f5fc49a60f4f9dcd3d46037))
+ - allow to re-read the logallrefupdates config after overrides ([`ff06de4`](https://github.com/Byron/gitoxide/commit/ff06de420661d30ff0a97b4be53dea92e746052e))
+ - re-apply overrides more correctly after clone, however… ([`372e9d4`](https://github.com/Byron/gitoxide/commit/372e9d41bb6a521690c66f8cb989172034500c70))
+ - validate that the remote HEAD branch overrides local init.defaultBranch settings ([`1c3dd3a`](https://github.com/Byron/gitoxide/commit/1c3dd3ae3d2ec599418e96362146064724808db9))
+ - assure stored file urls are absolute ([`5d7a055`](https://github.com/Byron/gitoxide/commit/5d7a05510922148bb7c9fe2fd172fd577684b2a4))
+ - make it possible to clone empty remote repositories ([`e97eeda`](https://github.com/Byron/gitoxide/commit/e97eeda45c9cc0736273c735a9959ac1ff29fc9d))
+ - refactor ([`d29bb62`](https://github.com/Byron/gitoxide/commit/d29bb6215b1a824a1811be8da84816954234f4e4))
+ - test for cloning empty repositories ([`0aa97fe`](https://github.com/Byron/gitoxide/commit/0aa97fea17c9cd08b21e65ff6447527357d10c0c))
+ - checkout returns index checkout result ([`2ef8d53`](https://github.com/Byron/gitoxide/commit/2ef8d53e57dfe0590899c4d3bf9bf777fccd8491))
+ - avoid showing thread progress during clone-pack-resolution ([`056f4dd`](https://github.com/Byron/gitoxide/commit/056f4ddb21f92a098499cadc8711438e9ecae031))
+ - `create::into(…)` takes `create::Kind` to determine if it's bare or not. ([`2bece79`](https://github.com/Byron/gitoxide/commit/2bece79285e244a7029f9393dafc990e39420e2d))
+ - less noisy way of writing trait bounds ([`b593806`](https://github.com/Byron/gitoxide/commit/b593806ca3571d680801130ad528f266d3eab83e))
+ - upgrade to `prodash` v21 ([`a0655dc`](https://github.com/Byron/gitoxide/commit/a0655dc7bc5dff388bc69a648e7f16b44fd1abd9))
+ - don't allow non-bare repositories to be initialized into non-empty directories. ([`f869b22`](https://github.com/Byron/gitoxide/commit/f869b224170b0c49a0e4d89e88bfbf5caedaa725))
+ - assure the reflog settings aren't permanently overidden during init/fetch ([`bc5e3e4`](https://github.com/Byron/gitoxide/commit/bc5e3e4c00daf37491d48ad2e575f58065b00966))
+ - Make it possible to ignore specs that don't match when iterating mappings. ([`bc991ff`](https://github.com/Byron/gitoxide/commit/bc991ff5b7a1c6c1b107da3b61b955e583923658))
+ - `init_bare()` now creates the destination directory if it doesn't exist. ([`91baefa`](https://github.com/Byron/gitoxide/commit/91baefad02a0d52c745106359da3693d06aace46))
+ - first rough sketch of `gix clone` ([`23a5e8b`](https://github.com/Byron/gitoxide/commit/23a5e8b658c5642c3f3060e013fd0eab06cbf027))
+ - the first working checkout as per simple simple test ([`9ce28ac`](https://github.com/Byron/gitoxide/commit/9ce28ac3342a65afb96c006d7d2fa70fae80c2dc))
+ - finally perform actual checkout, but test fails without clear reason ([`3821b4f`](https://github.com/Byron/gitoxide/commit/3821b4fb2d22e7b447ca3c11ae1ba9c6897916cd))
+ - prepare attribute-group setup as far as possible. ([`f5e2eeb`](https://github.com/Byron/gitoxide/commit/f5e2eebe9560f664f044b82ffa0cd19fd0df311f))
+ - build correct path for `$HOME/.config/…` files. ([`5c11b84`](https://github.com/Byron/gitoxide/commit/5c11b84f4e74e3eefdd0f5804976ebfc505e0f2f))
+ - sketch access to the attributes file, realize that there is an issue to be fixed first ([`0081e2f`](https://github.com/Byron/gitoxide/commit/0081e2f62185ee874b4e6927afbf33fe5ca37c46))
+ - refactor ([`28de9df`](https://github.com/Byron/gitoxide/commit/28de9dfd859376fd72bf3a0446bfa3457acf88f2))
+ - read core.checkstat to configure the checkout as well ([`05a666c`](https://github.com/Byron/gitoxide/commit/05a666c50e270c30d47fe5bfc3195a4fd1f1aea8))
+ - refactor ([`2f1c9dc`](https://github.com/Byron/gitoxide/commit/2f1c9dc3ea707e726d1820ec720b70e0d652b797))
+ - don't be lenient towards paths that can't be interpolated in case of excludes file ([`3df7788`](https://github.com/Byron/gitoxide/commit/3df7788632871072c4eaa944e93a83040c00f74f))
+ - collect all filesystem attributes affecting checkout ([`91b360f`](https://github.com/Byron/gitoxide/commit/91b360f08ee53497441b53491e8629f102c9a80c))
+ - prepare to move checkout_options into `config` ([`e731757`](https://github.com/Byron/gitoxide/commit/e731757f85f87f5468ccc6870f5f9af3b7771753))
+ - Use `core.askpass` when building the credential helper. ([`8b9fbd4`](https://github.com/Byron/gitoxide/commit/8b9fbd4e9ed7be37976c7203cd9a89c6116a6d3d))
+ - obtain worker count from configuration; prep for more options ([`d947d8b`](https://github.com/Byron/gitoxide/commit/d947d8be1f00f2b16d6648389a9ead85f4885d3e))
+ - write index from root tree and get ready for checkout ([`485a252`](https://github.com/Byron/gitoxide/commit/485a252b7398b2c77450ff05c91a5d4f8d3c538a))
+ - prepare checkout, but needs to be able to create an index from a tree ([`e462bd5`](https://github.com/Byron/gitoxide/commit/e462bd51c0af77cd06b56f189755cc4fa5154139))
+ - also update the HEAD reference after a fetch ([`e561021`](https://github.com/Byron/gitoxide/commit/e561021e3332edb12cabbc2b556adf32522e6808))
+ - ref-map filtering now uses correct prefixes. ([`275e80f`](https://github.com/Byron/gitoxide/commit/275e80f3d602b63ef91efe31a92b4aafb2eeca44))
+ - prepare for handling the server object-format correctly. ([`54c91eb`](https://github.com/Byron/gitoxide/commit/54c91eb66467c0925004ab87a815cbe504542c93))
+ - a sketch to check and update the object format upon cloning. ([`ebfd7d6`](https://github.com/Byron/gitoxide/commit/ebfd7d6941c864e880a73bf2dd6298365825d3e1))
+ - refactor ([`36c5ca9`](https://github.com/Byron/gitoxide/commit/36c5ca9e921571f47476a5c26986dcc297b589d0))
+ - `remote::fetch::Prepare::handshake_outcome()` to obtain server information right after listing refs. ([`a9d1449`](https://github.com/Byron/gitoxide/commit/a9d14492322785a14f4ecb5b0d3dbdc87e56f8c5))
+ - refactor ([`992522a`](https://github.com/Byron/gitoxide/commit/992522ad698781eae69b7442c39fa8190159d95a))
+ - `open::Options::config_overrides()` for early configuration; support for `init.defaultBranch`. ([`0b5c53e`](https://github.com/Byron/gitoxide/commit/0b5c53ec43bdb58b2b7cf46e453ddf858770a95a))
+ * **Uncategorized**
+ - Release git-features v0.23.1, git-glob v0.4.1, git-config-value v0.8.1, git-tempfile v2.0.6, git-object v0.22.1, git-ref v0.18.0, git-sec v0.4.2, git-config v0.10.0, git-prompt v0.1.1, git-url v0.10.1, git-credentials v0.6.1, git-diff v0.21.0, git-discover v0.7.0, git-index v0.7.0, git-pack v0.25.0, git-odb v0.35.0, git-transport v0.21.1, git-protocol v0.22.0, git-refspec v0.3.1, git-worktree v0.7.0, git-repository v0.26.0, git-commitgraph v0.10.0, gitoxide-core v0.19.0, gitoxide v0.17.0, safety bump 9 crates ([`d071583`](https://github.com/Byron/gitoxide/commit/d071583c5576fdf5f7717765ffed5681792aa81f))
+ - prepare changelogs prior to release ([`423af90`](https://github.com/Byron/gitoxide/commit/423af90c8202d62dc1ea4a76a0df6421d1f0aa06))
+ - Merge branch 'main' into write-sparse-index (upgrade to Rust 1.65) ([`5406630`](https://github.com/Byron/gitoxide/commit/5406630466145990b5adbdadb59151036993060d))
+ - fix tests on windows ([`f2a8a45`](https://github.com/Byron/gitoxide/commit/f2a8a45be80c4d12b1e0e8d8401bce7ff0be5959))
+ - thanks clippy ([`04cfa63`](https://github.com/Byron/gitoxide/commit/04cfa635a65ae34ad6d22391f2febd2ca7eabca9))
+ - Merge branch 'main' into write-sparse-index ([`c4e6849`](https://github.com/Byron/gitoxide/commit/c4e68496c368611ebe17c6693d06c8147c28c717))
+ - make fmt ([`ea2136b`](https://github.com/Byron/gitoxide/commit/ea2136b065979cecb3a1fdbf7b20ed7514128d9a))
+ - Merge branch 'gix-clone' ([`def53b3`](https://github.com/Byron/gitoxide/commit/def53b36c3dec26fa78939ab0584fe4ff930909c))
+ - thanks clippy ([`3495c56`](https://github.com/Byron/gitoxide/commit/3495c561841a76686e7a2b363feeab9f6e4bc301))
+ - fix build and docs ([`971fe0c`](https://github.com/Byron/gitoxide/commit/971fe0cb437cb1dcd470574d7b7338f0dabd09ac))
+ - diff algorithm is controlled by git configuration `diff.algorithm` ([`b1edb9e`](https://github.com/Byron/gitoxide/commit/b1edb9e3537df86669714f03666f4a88e0ac3709))
+ - Merge branch 'main' into gix-clone ([`fa27570`](https://github.com/Byron/gitoxide/commit/fa27570f491388cce6137af44330d76870d07202))
+ - Merge branch 'imra-diff' ([`f53f942`](https://github.com/Byron/gitoxide/commit/f53f9426f206686b30abd73a201a92b1405e782d))
+ - fix docs ([`7d5fb3c`](https://github.com/Byron/gitoxide/commit/7d5fb3c6a0aa6fd696f95912b28b4b007ad1b825))
+ - thanks clippy ([`24254a4`](https://github.com/Byron/gitoxide/commit/24254a46961c002a3e9792211541a08c41415ac2))
+ - `DiffPlatform::text()` to `*::lines()`. ([`c6f92c1`](https://github.com/Byron/gitoxide/commit/c6f92c15529ddff7539667b74bafa2348f3040e3))
+ - thanks clippy ([`d2f56df`](https://github.com/Byron/gitoxide/commit/d2f56df5405f6c27ebf7d51f33381f2c548433fb))
+ - Merge branch 'main' into gix-clone ([`3b48317`](https://github.com/Byron/gitoxide/commit/3b48317d6a9f41765d4f2a9f0a49c31afcdb68b6))
+ - thanks clippy ([`93e7691`](https://github.com/Byron/gitoxide/commit/93e7691be421e40cc72e3e2e0506584a2fbd4857))
+ - automatically handle `.keep` files after writing a pack bundle to disk. ([`2eaf69e`](https://github.com/Byron/gitoxide/commit/2eaf69e5f8f8da10e5af85cb9f0c39577ad1707f))
+ - thanks clippy ([`6f8356c`](https://github.com/Byron/gitoxide/commit/6f8356ca12676a9d7045ed28fb4a558f81281caa))
+ - thanks clippy ([`700cc2d`](https://github.com/Byron/gitoxide/commit/700cc2decb4388d165ac799c88c3a18b062ff58a))
+ - thanks clippy ([`73b6ec0`](https://github.com/Byron/gitoxide/commit/73b6ec0882b3ae9934f49c4c2bb645b54fa26607))
+ - thanks clippy ([`f22bdc0`](https://github.com/Byron/gitoxide/commit/f22bdc0360f61460f21eeb212f475ed8724018a8))
+ - Merge branch 'main' into gix-clone ([`de4fe06`](https://github.com/Byron/gitoxide/commit/de4fe06202906ea5c62e667826b42cf7b57b1ff0))
+ - thanks clippy ([`6ac6580`](https://github.com/Byron/gitoxide/commit/6ac65806202d8cf23c43da706482647fba0a1ce9))
+ - thanks clippy ([`c6e7663`](https://github.com/Byron/gitoxide/commit/c6e7663c1b53e0794a19d6e431e9db2ce5fa4cbc))
+ - Mark the upcoming usage of init.defaultBranch. ([`6225f35`](https://github.com/Byron/gitoxide/commit/6225f35398bc494ad74da342c4ebbe0487b106f8))
+ - realize that we don't know hot to set HEAD correctly just yet ([`11d636c`](https://github.com/Byron/gitoxide/commit/11d636cd3c5478b37a10619644e0cff8923949c4))
+ - Merge branch 'fix-gix-index-from-tree' ([`da5f63c`](https://github.com/Byron/gitoxide/commit/da5f63cbc7506990f46d310f8064678decb86928))
+ - adjust to changes in `git-index` ([`fa6bcde`](https://github.com/Byron/gitoxide/commit/fa6bcde735792fa10b66dfc7f81588bb68dcf46f))
+ - fix docs ([`34b3e03`](https://github.com/Byron/gitoxide/commit/34b3e03a197fd27c2d7b8e5d88c3b5dc627cbca4))
+ - sketch of method to checkout the main worktree ([`a88d5a3`](https://github.com/Byron/gitoxide/commit/a88d5a35d683e1da0bacaef54350d5e8047cb8f7))
+ - finish sketch of `fetch_and_checkout()` ([`e39a9d5`](https://github.com/Byron/gitoxide/commit/e39a9d59654633736d9933064da9d9e2833892eb))
+ - sketch checkout API and refactor ([`9145a32`](https://github.com/Byron/gitoxide/commit/9145a32c1f59d3cb1644b7028f1f7504761d7419))
+ - `Tree::lookup_entry*()` returns attached `Entry` type. ([`7413a28`](https://github.com/Byron/gitoxide/commit/7413a284eb7754e63ba45d0f526347b9f79b557d))
+
+
+## 0.25.0 (2022-10-10)
+
+
+
+### New Features
+
+ - `Url::try_from(path: &std::path::Path)` for more convenient instantiation.
+ - make some private methods public to give callers more flexibility.
+ This allows to implement the fetch-negotiation part oneself and break
+ free from constraints of the delegate.
+ - add `config::SnapshotMut::commit()` to make clear it's transactional.
+ - add `config::SnapshotMut::forget()` to forget all changes before applying them.
+ The documentation was update to make clear when the changes are applied.
+ - add `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.
+
+### Other
+
+ - try to make the transport configurable after being boxed, but…
+ …that would force it to be 'static, which is something we explicitly
+ cannot have. We need references to be contained within, if I remember
+ correctly.
+
+### Changed (BREAKING)
+
+ - All methods editing references don't take the author as parameter anymore.
+ Instead, these are taken from the git configuration and can be
+ configured on the fly with temporarily altered configuration.
+ - remote `lock_mode` from all methods dealing with reference edits.
+ It is now read from `core.filesRefLockTimeout` accordingly.
+
+### New Features (BREAKING)
+
+ - make jwalk fully optional
+ - add `fetch::Transport::configure` to generically configure any transport.
+
+### Commit Statistics
+
+
+
+ - 129 commits contributed to the release over the course of 20 calendar days.
+ - 20 days passed between releases.
+ - 11 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 1 unique issue was worked on: [#450](https://github.com/Byron/gitoxide/issues/450)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 8 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#450](https://github.com/Byron/gitoxide/issues/450)**
+ - fix test expectations to handle V1/V2 differences. ([`e616174`](https://github.com/Byron/gitoxide/commit/e616174e40b5dd11217d540ba7b17e3164f7ca30))
+ - no need to fetch the whole pack in dry-run mode, even in V1. ([`1777fa1`](https://github.com/Byron/gitoxide/commit/1777fa13e9e821c7a720227b6d7f1ad79f751840))
+ - fix hang in V1 mode ([`ce9b591`](https://github.com/Byron/gitoxide/commit/ce9b59115bc66f052324e169c574f2515565a496))
+ - Display for `remote::fetch::update::refs::Mode` ([`169a979`](https://github.com/Byron/gitoxide/commit/169a979228e4f82b7c465d88dce0a304d864aeab))
+ - better error messages if no ref-specs are provided where needed ([`981488b`](https://github.com/Byron/gitoxide/commit/981488b413ede3442f2213632ee52f4c207629bb))
+ - Improve error description with local context ([`8e9e0b2`](https://github.com/Byron/gitoxide/commit/8e9e0b20840e0a2479525e79d3e63071d20859c8))
+ - always perform fast-forward checks even if force is specified. ([`a34370c`](https://github.com/Byron/gitoxide/commit/a34370c1aea028cd9d6b839f136a16a11b32b804))
+ - refactor ([`c0d3ced`](https://github.com/Byron/gitoxide/commit/c0d3ced850a1a369e1c562e172266d78b0bc6698))
+ - refactor ([`8334148`](https://github.com/Byron/gitoxide/commit/8334148c63bfdb10c7388e4ce6480070e39cfa9f))
+ - add test to validate actual fast-forwards, without dry-run ([`e3b937e`](https://github.com/Byron/gitoxide/commit/e3b937ef35839402498988af322f943e4745178f))
+ - first non-fastforward tests in dry-run mode ([`2d0d782`](https://github.com/Byron/gitoxide/commit/2d0d782a59a90021e388b2c55354e9b3472d9cd3))
+ - dry-run mode for fetch ([`ef9fa98`](https://github.com/Byron/gitoxide/commit/ef9fa9835f9abaaa5034d62359e2899c0dd51408))
+ - test all reflog messages that are expected, sans fast-forward ([`2a76908`](https://github.com/Byron/gitoxide/commit/2a76908f3ebe846e96b783075bb5395d0bb9aaa0))
+ - support reflog message prefix ([`6ebbbc1`](https://github.com/Byron/gitoxide/commit/6ebbbc153dcf4eedb2afbd561c4d2ce342f6289b))
+ - refactor ([`9a072bd`](https://github.com/Byron/gitoxide/commit/9a072bd2e495b19c479e831f62172482da511d8c))
+ - facilities to test reflog messages ([`91859d5`](https://github.com/Byron/gitoxide/commit/91859d5140a45874d8d934773a47eee6b6a5a126))
+ - assure objects exist before setting them. ([`d79a7a6`](https://github.com/Byron/gitoxide/commit/d79a7a67ef77ab9d6dc871e16d535a509eb78e49))
+ - no-clobber special case for tags ([`ba41b6c`](https://github.com/Byron/gitoxide/commit/ba41b6c10c073926802e38a8fa035df8444affef))
+ - refactor ([`18581d0`](https://github.com/Byron/gitoxide/commit/18581d0dca277b8933885e30561d51640b88dfa4))
+ - reject updating checked-out branches ([`5a6c102`](https://github.com/Byron/gitoxide/commit/5a6c1025012d63e019e8b554078a33d23190bf18))
+ - add failing test to validate worktree-checkout check ([`870b680`](https://github.com/Byron/gitoxide/commit/870b6806f0199b13916f05f46a22fdd3e2a76513))
+ - fix docs ([`2a67531`](https://github.com/Byron/gitoxide/commit/2a675312b7a4d28cc84e09d54e1f929b0e56f75f))
+ - further harden tests to only allow environment variables for those who need it. ([`9704c2f`](https://github.com/Byron/gitoxide/commit/9704c2f075af05bf258854b378ed91b8a5d71e93))
+ - unset other variables that we know may affect some functions that need stability. ([`25d6106`](https://github.com/Byron/gitoxide/commit/25d61067640016b21cdf1eb90998be512b805e8b))
+ - more robust tests that depend on time. ([`6981b71`](https://github.com/Byron/gitoxide/commit/6981b71a23444827dff4dfe6cc5f1c04beceddc1))
+ - isolate test properly ([`005469c`](https://github.com/Byron/gitoxide/commit/005469cdaef4defb35ae65c23962c9f7da98c12f))
+ - more tests for SnapshotMut and now it's working properly ([`dde9e63`](https://github.com/Byron/gitoxide/commit/dde9e6345f53e36d6a9528d4132b16a6659999dd))
+ - more robust assignment of re-evaluated cached values ([`b514966`](https://github.com/Byron/gitoxide/commit/b5149661d9160540359b19c204388c87c778727f))
+ - Add test for commit-and-rollback method, and fix it ([`cc75647`](https://github.com/Byron/gitoxide/commit/cc7564745b45df1848dfb1d7c8f9e1178f0fb64d))
+ - adapt to changes in `git-ref` ([`d40beb3`](https://github.com/Byron/gitoxide/commit/d40beb3b5744139b56ed68de4caa62a242df2d3a))
+ - refactor ([`f47a31d`](https://github.com/Byron/gitoxide/commit/f47a31d7a533c7debc9a44020fa597ff2d48068c))
+ - read core.excludesFile lazily (and don't cache it yet) ([`830c450`](https://github.com/Byron/gitoxide/commit/830c45039e9377914bc715002c4e280187498c5c))
+ - auto-update previously cached values after changing the configuration ([`da147bf`](https://github.com/Byron/gitoxide/commit/da147bffd7538453221b08f9f68a1332cfa3ebe3))
+ - All methods editing references don't take the author as parameter anymore. ([`e88de0f`](https://github.com/Byron/gitoxide/commit/e88de0f948325773db1925b07aa878e1dbb76bad))
+ - remote `lock_mode` from all methods dealing with reference edits. ([`3a0fb1b`](https://github.com/Byron/gitoxide/commit/3a0fb1b45c757add49677450836c0aaf6179a2b5))
+ - prepare for worktree-aware checked-out branch handling… ([`1bb910e`](https://github.com/Byron/gitoxide/commit/1bb910ee2dbe0c5f19aefd9669cebc305870953e))
+ - actually apply ref updates ([`8fe4bf4`](https://github.com/Byron/gitoxide/commit/8fe4bf4bcc463154c54082df5f38f0cd801915fb))
+ - Add failing test to show we need to respect dry-run mode (or the lack thereof) ([`e25460b`](https://github.com/Byron/gitoxide/commit/e25460b3519609b2836e5bf57ad59e6cf06872e4))
+ - tests for all the cases excluding fast-forwards ([`7ced240`](https://github.com/Byron/gitoxide/commit/7ced2402eb28301adc5330f336ece5eaf3bd9222))
+ - the first successful test ([`e4edc18`](https://github.com/Byron/gitoxide/commit/e4edc1897cc8ffa0dfd0c34cfaf6eb2f9d5b86c6))
+ - Make `fetch::refs::update()` private again, move tests accordingly. ([`9f9b610`](https://github.com/Byron/gitoxide/commit/9f9b61070d0b6e10e795e1401401d55c554c59b9))
+ - Provide refspecs to refs::update() to obtain force information ([`a9f2c45`](https://github.com/Byron/gitoxide/commit/a9f2c458c1858e8d40ed0efdc762f78b9efb7783))
+ - a big step towards ref updates, now it needs specs ([`c101d50`](https://github.com/Byron/gitoxide/commit/c101d50c315d922885309e5939a10853c553eb68))
+ - more update tests ([`2828674`](https://github.com/Byron/gitoxide/commit/2828674509f847528bb225c1a35e51efd7457c50))
+ - the first somewhat synthetic test to check for no changes. ([`c355823`](https://github.com/Byron/gitoxide/commit/c355823d405dbf8eb1287021895d5fb35a39e5f5))
+ - fix build ([`8e1555d`](https://github.com/Byron/gitoxide/commit/8e1555d0ef0ea450979567c9aa9716c993e6320a))
+ - make `remote::fetch::refs::update()` public to facilitate testing ([`4a5d3b4`](https://github.com/Byron/gitoxide/commit/4a5d3b4bb4f39a1e227da4ea77e96820cbed2e0d))
+ - lay the ground-works for testing the update of refs ([`1f2d609`](https://github.com/Byron/gitoxide/commit/1f2d6095d946f6327e67a7388fd87ab9c74be31d))
+ - refactor ([`96f2fd8`](https://github.com/Byron/gitoxide/commit/96f2fd8d848dd170855721f85ec6386f9391f0a1))
+ - greatly improved performance for write-test. ([`2ec8175`](https://github.com/Byron/gitoxide/commit/2ec8175a55a9cd02408cab45d84da2823c44dec4))
+ - improve naieve algorithm to be a bit better in our test-case ([`0387794`](https://github.com/Byron/gitoxide/commit/038779420edddb651c3463e4679778ceabf902b8))
+ - try to make naive negotiation better, but… ([`d5c1f92`](https://github.com/Byron/gitoxide/commit/d5c1f9280e8a20f8ce8c087bde04f4098cafe993))
+ - speed up fetch tests by giving them their own repo-fixture ([`ce1a373`](https://github.com/Byron/gitoxide/commit/ce1a373c80e076c148112532990b781044b7aeb8))
+ - A first sketch of validating a fetch. ([`2962dc2`](https://github.com/Byron/gitoxide/commit/2962dc28c8e93ac81bde70dacfc3081aa697676f))
+ - Don't degenerate information in case there is no update needed. ([`5f73b25`](https://github.com/Byron/gitoxide/commit/5f73b257c551ef899c9e34dd5772654d51444d8b))
+ - A first test for validating nothing-new is a no-op ([`aad17ba`](https://github.com/Byron/gitoxide/commit/aad17ba50f8c77465004a00da2146a87fc770646))
+ - port part of the negotation logic over, but a lot is still missing ([`4997e56`](https://github.com/Byron/gitoxide/commit/4997e5616c39f3d3be74f289c25080d9898b28f5))
+ - make some private methods public to give callers more flexibility. ([`31a7089`](https://github.com/Byron/gitoxide/commit/31a7089f2583832727e2175ada6fb5c30c3beebe))
+ - refactor ([`5e93ef5`](https://github.com/Byron/gitoxide/commit/5e93ef53e43c7ce1e5f964d792ff97b426802b4a))
+ - complete pack generation options based on configuration ([`97a5e97`](https://github.com/Byron/gitoxide/commit/97a5e972f179c000cec888dcbe4cff13e02d77e5))
+ - also extract index threads ([`8d17dc6`](https://github.com/Byron/gitoxide/commit/8d17dc68cea8a6b6b417f12d45fcf4331cf562fd))
+ - obtain configuration for index version (with respect for lenient config) ([`5a3155a`](https://github.com/Byron/gitoxide/commit/5a3155a019ed5c9157cc699d4bbdf1b0b3623242))
+ - add `config::SnapshotMut::commit()` to make clear it's transactional. ([`4367994`](https://github.com/Byron/gitoxide/commit/4367994a8a7476eb44e1309e833e345fdb78f246))
+ - add `config::SnapshotMut::forget()` to forget all changes before applying them. ([`d2bea00`](https://github.com/Byron/gitoxide/commit/d2bea003230078ffb4e6cd80d1b01c3995435a34))
+ - sketch the receive() method to finally receive a pack. ([`67801a3`](https://github.com/Byron/gitoxide/commit/67801a344a4fc6d7c171d93277635bdf84e6c15a))
+ - allow stopping fetches after preparing it ([`249c54e`](https://github.com/Byron/gitoxide/commit/249c54ef237c8147dce4cd999ccd4ddba4775150))
+ - add `Repository::find_default_remote()` which works on detached heads as well. ([`4b1e3b3`](https://github.com/Byron/gitoxide/commit/4b1e3b3d91c51da3dbea9191e60f959a1266cf47))
+ - refactor ([`f8fb04a`](https://github.com/Byron/gitoxide/commit/f8fb04ad76d282ea3b31cba512f7421f31569e8b))
+ - fix build ([`7993f6a`](https://github.com/Byron/gitoxide/commit/7993f6a4b95a18809e98f34366dc1746b944f8d5))
+ - remove connect_http() method to encourage changing settings using `transport_mut().configure()`. ([`9b86a1f`](https://github.com/Byron/gitoxide/commit/9b86a1f38b3ea2bd0e639d392849c3660fc08cff))
+ - add `fetch::Transport::configure` to generically configure any transport. ([`78ad3df`](https://github.com/Byron/gitoxide/commit/78ad3df64f2c016ba17b158bd9ab1d2341aab399))
+ - sketch of 'Prepare' struct to configure fetch after ref-map was obtained. ([`f0f4db6`](https://github.com/Byron/gitoxide/commit/f0f4db6fcb61a5a93786c74c7997657b2fc4f233))
+ - don't fail if we can't indicate the end of interaction to the server ([`47d5cd6`](https://github.com/Byron/gitoxide/commit/47d5cd67b31d4b18c224859b7d9e145c993a4f2d))
+ - Make it easier to connect to http if well-known to allow additional configuration. ([`211e65d`](https://github.com/Byron/gitoxide/commit/211e65d185470ade84a3cc73e1898599b7f15f7c))
+ - Revert "FAIL: try to make the transport configurable after being boxed, but…" ([`fbb96e4`](https://github.com/Byron/gitoxide/commit/fbb96e4d55e322243bf5500605f72e93b103e308))
+ - try to make the transport configurable after being boxed, but… ([`5bef0a0`](https://github.com/Byron/gitoxide/commit/5bef0a00e8d01110c054a517f6d9696f981a7efc))
+ - first sktech of fetch module ([`0dc7206`](https://github.com/Byron/gitoxide/commit/0dc7206ee0dff760d632362de3b41d9e4dc22598))
+ - pass extra handshake parameters via options in `ref-map` ([`5475cc2`](https://github.com/Byron/gitoxide/commit/5475cc2e60dd1cde3ecb24ccf873bc06421f09c9))
+ - Allow to turn remote-filtering off. ([`38373bc`](https://github.com/Byron/gitoxide/commit/38373bc61c938d58a9d6ed1feae86ccf36fde67d))
+ - `Remote::rem_map()` now specifies ref-prefixes to the remote. ([`25f0640`](https://github.com/Byron/gitoxide/commit/25f06400c49ddd1688fd76f9285542b121b223b4))
+ * **Uncategorized**
+ - Release git-hash v0.9.11, git-features v0.23.0, git-actor v0.13.0, git-attributes v0.5.0, git-object v0.22.0, git-ref v0.17.0, git-sec v0.4.1, git-config v0.9.0, git-url v0.10.0, git-credentials v0.6.0, git-diff v0.20.0, git-discover v0.6.0, git-traverse v0.18.0, git-index v0.6.0, git-mailmap v0.5.0, git-pack v0.24.0, git-odb v0.34.0, git-packetline v0.13.1, git-transport v0.21.0, git-protocol v0.21.0, git-revision v0.6.0, git-refspec v0.3.0, git-worktree v0.6.0, git-repository v0.25.0, safety bump 24 crates ([`104d922`](https://github.com/Byron/gitoxide/commit/104d922add61ab21c534c24ce8ed37cddf3e275a))
+ - prepare changelogs for release ([`d232567`](https://github.com/Byron/gitoxide/commit/d23256701a95284857dc8d1cb37c7c94cada973c))
+ - Merge branch 'fix-smart-release' ([`aa80b60`](https://github.com/Byron/gitoxide/commit/aa80b606e5570f327660cca42ea81581a6e9d5e3))
+ - make fmt ([`7b9c065`](https://github.com/Byron/gitoxide/commit/7b9c06547b75929e3e5bf4240f43c7e9bc7d54e0))
+ - move `fetch::Error` one level up ([`f6b1368`](https://github.com/Byron/gitoxide/commit/f6b136890e3bcc59ac692ddc4e295f043adcfece))
+ - Merge branch 'clone' ([`507dc7e`](https://github.com/Byron/gitoxide/commit/507dc7e706cb3c9d89d048b3aff5df239a9b6788))
+ - fix docs ([`4474352`](https://github.com/Byron/gitoxide/commit/44743524fd35c7987fee2f46d134e4b0e328e133))
+ - validate default remote name as well and show minimal clone without worktree ([`dff66e8`](https://github.com/Byron/gitoxide/commit/dff66e898bb3cc033c85464ccd937b1a0e891750))
+ - validate the outcome of the fetch as well ([`3865aea`](https://github.com/Byron/gitoxide/commit/3865aea50b05b4a28caf0d364fea4876c393f976))
+ - adjust to changes in `git-refspec` ([`c62f37a`](https://github.com/Byron/gitoxide/commit/c62f37a4e3599049d10e3d7534a553e8efa2dcd7))
+ - thanks clippy ([`bc2710f`](https://github.com/Byron/gitoxide/commit/bc2710f1833d3f3423868bd4c7d8df991200b39d))
+ - the first successful test for cloning a bare repository ([`5ecc965`](https://github.com/Byron/gitoxide/commit/5ecc965b8804500c537acdac2f1d8751324f4736))
+ - Complete implementation of `fetch_only`, even though configuration isn't handled correctly yet ([`b0f5836`](https://github.com/Byron/gitoxide/commit/b0f5836c53fc95c408dac4b6e370532695373063))
+ - sketch and test for `clone::Prepare::fetch_only()` ([`f993cd4`](https://github.com/Byron/gitoxide/commit/f993cd4ca03a22d27c85ff229bab66adcb4e493a))
+ - thanks clippy ([`f65a1f4`](https://github.com/Byron/gitoxide/commit/f65a1f4b08bdacd92baf118722a45a02a71117f1))
+ - make it possible to renmae the remote ([`3f8b0e5`](https://github.com/Byron/gitoxide/commit/3f8b0e5c480efcdc73ce781bc3e9e9b156ec6551))
+ - properly validate remotes when instantiating them and when naming them ([`1fb97fb`](https://github.com/Byron/gitoxide/commit/1fb97fbfe893d6a8030e3ef0bae34f40a3e9b7e6))
+ - adjust to changes in `git-features` ([`3155197`](https://github.com/Byron/gitoxide/commit/31551976ca9327df34d961614311a10b71e50a93))
+ - make jwalk fully optional ([`3b29fc1`](https://github.com/Byron/gitoxide/commit/3b29fc18672c0176684c797a0f16f85d09369bf8))
+ - thanks clippy ([`8c8fba2`](https://github.com/Byron/gitoxide/commit/8c8fba2f5d6b464bb9fc275bbf2db89635e75d43))
+ - start adding support for naming the remote, but… ([`6cbea96`](https://github.com/Byron/gitoxide/commit/6cbea960b798181f46e736d509eed5a44b91e0c8))
+ - sketch a way to configure remotes ([`615a3a9`](https://github.com/Byron/gitoxide/commit/615a3a90ffb67c76e00bf3a024aaafa67ef148cb))
+ - refactor ([`d7f495d`](https://github.com/Byron/gitoxide/commit/d7f495d6d5c436decc6ea6236f2129a4758facc0))
+ - Api sketch to show how clones and bare clones can be done. ([`ef1e783`](https://github.com/Byron/gitoxide/commit/ef1e7834875fd2e1ab793a17a393ad3e5470059c))
+ - `Url::try_from(path: &std::path::Path)` for more convenient instantiation. ([`22d3b37`](https://github.com/Byron/gitoxide/commit/22d3b37ea6239170a478b859361a7d1d7ba01a9a))
+ - adjust to changes in `git-url` ([`a1068a3`](https://github.com/Byron/gitoxide/commit/a1068a3f24ce55b9eb92b97c84f650f901c7a5d3))
+ - add test to assert on lossless saving of existing named remotes ([`884b6e9`](https://github.com/Byron/gitoxide/commit/884b6e93962bf782bfca14873277a8c563b58d61))
+ - adapt to changes in `git-config` ([`058473d`](https://github.com/Byron/gitoxide/commit/058473d5eae4789ca7b3fcb203ae6349a3e6d25a))
+ - assure unrelated and unwritten keys are not touched ([`ca5bb5e`](https://github.com/Byron/gitoxide/commit/ca5bb5ec44f098f74a47835ee0dbc694cbb76e0c))
+ - thanks clippy ([`d82a08d`](https://github.com/Byron/gitoxide/commit/d82a08db71f6a486363a398eacdee6cdfbbeb04b))
+ - remove prior existing values for remotes before saving ([`4126d99`](https://github.com/Byron/gitoxide/commit/4126d996b5c110e2a73f4b94f7166d7e66e059b3))
+ - save all data we currently use on a Remote ([`79a4952`](https://github.com/Byron/gitoxide/commit/79a495249ded5dbab0084283606d8775911dbfca))
+ - test another prerequisite ([`1375368`](https://github.com/Byron/gitoxide/commit/1375368006942bdf246a85466a144b05df5a55ac))
+ - A basic save_to() implementation for url and push-url ([`e1f7c5f`](https://github.com/Byron/gitoxide/commit/e1f7c5f05095b6b3d2d26c34fda04b74a91c9fb0))
+ - Merge branch 'main' into new-http-impl ([`702a161`](https://github.com/Byron/gitoxide/commit/702a161ef11fc959611bf44b70e9ffe04561c7ad))
+ - thanks clippy ([`1cba50f`](https://github.com/Byron/gitoxide/commit/1cba50f908ea016c9117e2de2181f55326f14e7e))
+ - layout save API for remotes ([`50fbcca`](https://github.com/Byron/gitoxide/commit/50fbcca85fdf02261fba954363bcf257cdf445fe))
+ - Merge branch 'crates-index-diff-fixes' ([`b09bad7`](https://github.com/Byron/gitoxide/commit/b09bad7b5702838c1119d052b322d90c9b5968bb))
+ - Add test to validate empty fetches are OK ([`cb9973b`](https://github.com/Byron/gitoxide/commit/cb9973b95e71657f8b66f5938f1312f7e118d197))
+ - Make `fetch::prepare::Error` publicly accessible ([`9aa2ab2`](https://github.com/Byron/gitoxide/commit/9aa2ab2866640a5e4d21e681eda3c3ba24dc4cdd))
+ - make fmt ([`53acf25`](https://github.com/Byron/gitoxide/commit/53acf2565743eff7cead7a42011107b2fc8d7e0e))
+ - Merge branch 'fetch-pack' ([`f47c891`](https://github.com/Byron/gitoxide/commit/f47c89129732bcb06fe76a4696fe38ab1151fb0c))
+ - thanks clippy ([`83f2156`](https://github.com/Byron/gitoxide/commit/83f21565bbbc43442410be3b63030ea2537e6d2c))
+ - Merge branch 'fetch-pack' ([`3c49400`](https://github.com/Byron/gitoxide/commit/3c49400809c7c2120f4ce704c19a0421545b5acd))
+ - thanks clippy ([`b521748`](https://github.com/Byron/gitoxide/commit/b521748974c6cb021121cdcc3bbbca5b80987336))
+ - thanks clippy ([`8499c3e`](https://github.com/Byron/gitoxide/commit/8499c3e8afba0767fe9f0ca0e3016fe9f84951e5))
+ - Merge branch 'fix-git-features' ([`82fd251`](https://github.com/Byron/gitoxide/commit/82fd251ac80d07bc9da8a4d36e517aa35580d188))
+ - improve docs around `into_remote()` to explain why it returns an `Option` ([`71146ad`](https://github.com/Byron/gitoxide/commit/71146ad274410e16489ae6181fb289814028ded5))
+ - Merge branch 'diff' ([`25a7726`](https://github.com/Byron/gitoxide/commit/25a7726377fbe400ea3c4927d04e9dec99802b7b))
+
+
+## 0.24.0 (2022-09-20)
+
+
+
+
+### New Features
+
+ - `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 `git-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)
+
+### Bug Fixes
+
+ - rev-spec parsing can now handle the empty tree as full hex hash.
+ Even though the empty-tree object can be found when searched via
+ `Repository::find_object()`, previously it was not locatable when
+ used during rev-spec parsing.
+ - `Reference::remote()` can produce remotes for URLs
+
+### Refactor
+
+ - use specific error type for `rev_parse_single()`
+
+### Changed (BREAKING)
+
+ - upgrade `bstr` to `1.0.1`
+
+### New Features (BREAKING)
+
+ - Add reference remote name type to make usage of `remote_name()` result clear
+
+### Other (BREAKING)
+
+ - `Tree::lookup_path()` -> `Tree::lookup_entry()`.
+
+### Commit Statistics
+
+
+
+ - 102 commits contributed to the release over the course of 19 calendar days.
+ - 19 days passed between releases.
+ - 12 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 2 unique issues were worked on: [#450](https://github.com/Byron/gitoxide/issues/450), [#470](https://github.com/Byron/gitoxide/issues/470)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 6 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#450](https://github.com/Byron/gitoxide/issues/450)**
+ - adapt to changes in `git-refspec` ([`91d1a3a`](https://github.com/Byron/gitoxide/commit/91d1a3abf02841c9b43fd8a3102375315a6db160))
+ - show fixes as well ([`2237495`](https://github.com/Byron/gitoxide/commit/2237495d82624b39bf75c6430549424a5e36b8bb))
+ - Add method to allow replacing a Remote's refspecs entirely. ([`d8f1608`](https://github.com/Byron/gitoxide/commit/d8f160826cd6446e0422aef6020e1413895f340e))
+ - produce only a ref-map as it contains all data somebody would want. ([`c9ff885`](https://github.com/Byron/gitoxide/commit/c9ff885e73c97b8712cff89bce420f3060f8bd3c))
+ - adjust to changes in `git-config` ([`0f9833a`](https://github.com/Byron/gitoxide/commit/0f9833af529e35c4930f6231397368256231dcdb))
+ - also provide the spec-index with the returned refmap. ([`910cedc`](https://github.com/Byron/gitoxide/commit/910cedc09212e0d08c4a03db959974bc0810fa9d))
+ - Provide all information generated by the handshake into the refmap result ([`3958d71`](https://github.com/Byron/gitoxide/commit/3958d71177927305399369088d184891c182d9e2))
+ - adjust to changes in `git-refspec` ([`ffa24a1`](https://github.com/Byron/gitoxide/commit/ffa24a1365480523197b5247bded6a7a4772bdfc))
+ - obtain a refmap after listing refs via `remote::Connection::list_refs_to_map()`. ([`7e96d18`](https://github.com/Byron/gitoxide/commit/7e96d1841989b37133cddf334724a2d6df557e69))
+ - A step closer to actually obtaining a validated ref-mapping. ([`777ba7f`](https://github.com/Byron/gitoxide/commit/777ba7ffe4b20e2cdf4069eeb504df432db58d69))
+ - A more concrete sketch of how the API for obtaining mappings should look like ([`6d1c372`](https://github.com/Byron/gitoxide/commit/6d1c37219cde7ce5c969d1581da4bb4593cfb1fd))
+ - sketch API for obtaining a reflist filtered by refspecs ([`5d5e211`](https://github.com/Byron/gitoxide/commit/5d5e2113a8353bf849ed4bfe9c8a341b8e00cd0b))
+ - Extract URL from transport to support custom remotes better and avoid error case ([`fac87d0`](https://github.com/Byron/gitoxide/commit/fac87d0dc4d4524713dbd7ef1cfc6acae54f9748))
+ - use Rust credential implementation ([`fb39608`](https://github.com/Byron/gitoxide/commit/fb396089495518c45104cc8d62ee4d6221c6b76a))
+ - upgrade `bstr` to `1.0.1` ([`99905ba`](https://github.com/Byron/gitoxide/commit/99905bacace8aed42b16d43f0f04cae996cb971c))
+ - refactor ([`9e4e4c4`](https://github.com/Byron/gitoxide/commit/9e4e4c4fbe0189951eeac0ed8cbdcfcd409a9f6c))
+ - adjust to changes in `git-sec` ([`d6ef2ce`](https://github.com/Byron/gitoxide/commit/d6ef2ce9d0a7883d7d3b5ddb0010c8ab3d26bb78))
+ - adjust to changes in `git-ref` ([`296f23f`](https://github.com/Byron/gitoxide/commit/296f23fea43f543e10448fc0c948f629f241561e))
+ - adjust to changes in git-object ([`9aadac3`](https://github.com/Byron/gitoxide/commit/9aadac3341bb778e8f8b0800847b574338e16a05))
+ - Select `gix` commands will now load the git installation configuration ([`23d2dec`](https://github.com/Byron/gitoxide/commit/23d2dec375305c39d472c4f8ff764274dd033f6b))
+ - Add `permissions::Config::git_binary` field ([`d51e7c9`](https://github.com/Byron/gitoxide/commit/d51e7c901fe5ed60d5dd56006c5faedb71cad537))
+ - A way to parse the first git-config file path ([`ea52e4e`](https://github.com/Byron/gitoxide/commit/ea52e4ec917ee4caa55329ba1a1814d723e6c654))
+ - first step towards efficiently obtaining git config information ([`cc78473`](https://github.com/Byron/gitoxide/commit/cc784730f29eb239e18dad7c5013486e9b6355d1))
+ - fix exports to allow error type to be visible publicly ([`b978619`](https://github.com/Byron/gitoxide/commit/b978619eaada0ffdc88c24edbf3fc68d4cc32312))
+ - Also provide prompt configuration to allow Cascade::invoke() to be called with all arguments ([`5b4cb83`](https://github.com/Byron/gitoxide/commit/5b4cb8391c1bd4b2aab8dea249f161bafcab93c2))
+ - Add reference remote name type to make usage of `remote_name()` result clear ([`2992b1b`](https://github.com/Byron/gitoxide/commit/2992b1ba4e7bbeab26f41175cd31fd664abf2a11))
+ - refactor ([`93ac4c3`](https://github.com/Byron/gitoxide/commit/93ac4c38e5837250e158613820a6ac1bb7119ba0))
+ - remark about improvements to the type system around certain remote names. ([`a872bf7`](https://github.com/Byron/gitoxide/commit/a872bf7fbbda48df34ad92cdbc48f93d33ebd86e))
+ - `Reference::remote()` can produce remotes for URLs ([`74ede20`](https://github.com/Byron/gitoxide/commit/74ede2031d1beedf11f1cdf006fff71e597a2cb5))
+ - refactor ([`4fa8a84`](https://github.com/Byron/gitoxide/commit/4fa8a844826916007c583d684d250e6bfbc72e53))
+ - test our understanding of case-folding when matching urls ([`77c27eb`](https://github.com/Byron/gitoxide/commit/77c27ebf93dcaf81e38b2dc6271133c6bb9f3121))
+ - subdomain globbing works ([`5b19729`](https://github.com/Byron/gitoxide/commit/5b197292e6ed08633e4e20e411e973d269e30c4b))
+ - tests for domain globbing ([`60d8997`](https://github.com/Byron/gitoxide/commit/60d89970710faae804f712bb7832677278f90133))
+ - more default-port tests ([`eb34156`](https://github.com/Byron/gitoxide/commit/eb34156ea6b4ac8523d38d6181c9cc949853bb6e))
+ - username matching works ([`b99e9d8`](https://github.com/Byron/gitoxide/commit/b99e9d84721c0d8b58b5b56c8dde60952237b042))
+ - All but one test work after username handling refactor ([`64b6b30`](https://github.com/Byron/gitoxide/commit/64b6b30fb42d7ee3d65bc6238a4ad867a85c802d))
+ - better normalization and clear-list support ([`5aefe66`](https://github.com/Byron/gitoxide/commit/5aefe6684438750fe9aadb41675c816f9671d8a9))
+ - remove glob-matching as it's not correct ([`6f4e052`](https://github.com/Byron/gitoxide/commit/6f4e052560b397f2bc81a4a25f573bef517e5870))
+ - refactor ([`593e4a8`](https://github.com/Byron/gitoxide/commit/593e4a8a6befbaa14401d659ac3901c92376f94b))
+ - more tests for better host and protocol matching of http and https urls ([`2221778`](https://github.com/Byron/gitoxide/commit/22217780acf3c241125bb000f6a205ca0914a025))
+ - Support for host-based matching ([`2d81b9f`](https://github.com/Byron/gitoxide/commit/2d81b9f629a899a73fb68967ceeae18719fbd0e1))
+ - basic url matching with a simple glob ([`1b19611`](https://github.com/Byron/gitoxide/commit/1b196116fa01f1045a242d0ebe3d9627cb1fa8ec))
+ - Make tests more robust; fix windows tests ([`1983fbc`](https://github.com/Byron/gitoxide/commit/1983fbc39be3da5598cf3af6fb97f6ea0bc3ec6b))
+ - tests as far as possible without implementing url matching ([`8c686e0`](https://github.com/Byron/gitoxide/commit/8c686e072af544adea48f81ba2dc65dff528e5ab))
+ - mark a difference in the way credential helper urls are validated ([`dc57b67`](https://github.com/Byron/gitoxide/commit/dc57b676e2fcb869f8e73cc543a73c73b83bfe22))
+ - the first successful url matching test ([`beddce1`](https://github.com/Byron/gitoxide/commit/beddce1b1814b60da5881a3676b019d35c47a0a8))
+ * **[#470](https://github.com/Byron/gitoxide/issues/470)**
+ - update changelogs prior to release ([`caa7a1b`](https://github.com/Byron/gitoxide/commit/caa7a1bdef74d7d3166a7e38127a59f5ab3cfbdd))
+ - `Object::peel_to_tree()` as convenience method. ([`0871a96`](https://github.com/Byron/gitoxide/commit/0871a96b9cc84d7a496d39393e081999c0a3fe17))
+ - fix docs ([`593f57b`](https://github.com/Byron/gitoxide/commit/593f57b486d03b4d689cda6c0800e9f349cc4ad5))
+ - Add note on why we consume the tree for looking up an entry. ([`b285097`](https://github.com/Byron/gitoxide/commit/b28509724c8877d6488bf5dc72308e8b18928124))
+ - `Tree::lookup_path()` -> `Tree::lookup_entry()`. ([`79c2255`](https://github.com/Byron/gitoxide/commit/79c22557ce0aea1ee8f3a58192c2c76087ccd3d8))
+ - simplify looking up entries by path ([`15a18e4`](https://github.com/Byron/gitoxide/commit/15a18e47f4a767a2cc31a30296844c207c7a8732))
+ - a little more complexity for diff tests ([`5878ad1`](https://github.com/Byron/gitoxide/commit/5878ad17bc0c0d9d99b36f3ff9416cf9a47a4086))
+ - `interrupt::Iter` now allows accessing the inner iterator without consumption. ([`1027be9`](https://github.com/Byron/gitoxide/commit/1027be960852618915014f9ba6e6632bd4999b0e))
+ - Once a change is obtained, it's easy to obtain changes line by line. ([`8c2e5c6`](https://github.com/Byron/gitoxide/commit/8c2e5c60f9f5f8d0859ecd84c17af20e88812512))
+ - Slightly improved docs for traversal docs. ([`963055b`](https://github.com/Byron/gitoxide/commit/963055b45643fb48460671959b10dc12658bb5d4))
+ - performance note ([`0670468`](https://github.com/Byron/gitoxide/commit/06704683cdde64c0ed9b38df5e4e8ce29dbce524))
+ - Support for Path tracking ([`64bbb3d`](https://github.com/Byron/gitoxide/commit/64bbb3da42f740206514baf2fa504371fd6f06c4))
+ - rev-spec parsing can now handle the empty tree as full hex hash. ([`ae38660`](https://github.com/Byron/gitoxide/commit/ae3866065c9c3c6d01709f8dde1cea1ae1345779))
+ - refactor ([`9d01fb4`](https://github.com/Byron/gitoxide/commit/9d01fb41c8b367b8bd73061fc5f0f7dc4d33f7d1))
+ - refactor ([`90b9c90`](https://github.com/Byron/gitoxide/commit/90b9c906bc3779d62b0317ea318c07693fda0d3c))
+ - fix docs ([`9b7aaa0`](https://github.com/Byron/gitoxide/commit/9b7aaa00ed7750e0f6a5898212d78ffa98456749))
+ - improved usability of the `Action` enum ([`d04807b`](https://github.com/Byron/gitoxide/commit/d04807bc9a70ddb6139446356df5c1bdb902a497))
+ - Support for file-name tracking ([`88c4a57`](https://github.com/Byron/gitoxide/commit/88c4a57b8e84db74d9bc2a1d626bc5c51a069fad))
+ - Provisions for tracking the location of a change. ([`7fd9b0e`](https://github.com/Byron/gitoxide/commit/7fd9b0eed4a18c2a9e9ae44bc8a8f72769995889))
+ - first test for simple file modification detection ([`a9056fd`](https://github.com/Byron/gitoxide/commit/a9056fdd3f22347737b4d3c80a793d1d26f4218b))
+ - allow user callbacks to have any error ([`5be96b3`](https://github.com/Byron/gitoxide/commit/5be96b3c5c276bc0176820da4a5f554c1a1623f3))
+ - break through API surface and sketch delegate calling user-provided function ([`e51f3cd`](https://github.com/Byron/gitoxide/commit/e51f3cda68606dafd908ec268099fc455493ebaf))
+ - diff platform for basic diff configuration ([`c857b9b`](https://github.com/Byron/gitoxide/commit/c857b9b6a113bd60fa3c9aeaf3edb81164ae772a))
+ - refactor ([`a938fe4`](https://github.com/Byron/gitoxide/commit/a938fe491e98577230b2aefd536b600e74050225))
+ - refactor ([`6ac7dbe`](https://github.com/Byron/gitoxide/commit/6ac7dbe689b5599e72a05b4e23c1943cd2bba145))
+ * **Uncategorized**
+ - Release git-command v0.1.0, git-prompt v0.1.0, git-url v0.9.0, git-credentials v0.5.0, git-diff v0.19.0, git-mailmap v0.4.0, git-chunk v0.3.2, git-pack v0.23.0, git-odb v0.33.0, git-packetline v0.13.0, git-transport v0.20.0, git-protocol v0.20.0, git-revision v0.5.0, git-refspec v0.2.0, git-repository v0.24.0, git-commitgraph v0.9.0, gitoxide-core v0.18.0, gitoxide v0.16.0 ([`f5c36d8`](https://github.com/Byron/gitoxide/commit/f5c36d85755d1f0f503b77d9a565fad6aecf6728))
+ - Release git-hash v0.9.10, git-features v0.22.5, git-date v0.2.0, git-actor v0.12.0, git-glob v0.4.0, git-path v0.5.0, git-quote v0.3.0, git-attributes v0.4.0, git-config-value v0.8.0, git-tempfile v2.0.5, git-validate v0.6.0, git-object v0.21.0, git-ref v0.16.0, git-sec v0.4.0, git-config v0.8.0, git-discover v0.5.0, git-traverse v0.17.0, git-index v0.5.0, git-worktree v0.5.0, git-testtools v0.9.0, git-command v0.1.0, git-prompt v0.1.0, git-url v0.9.0, git-credentials v0.5.0, git-diff v0.19.0, git-mailmap v0.4.0, git-chunk v0.3.2, git-pack v0.23.0, git-odb v0.33.0, git-packetline v0.13.0, git-transport v0.20.0, git-protocol v0.20.0, git-revision v0.5.0, git-refspec v0.2.0, git-repository v0.24.0, git-commitgraph v0.9.0, gitoxide-core v0.18.0, gitoxide v0.16.0, safety bump 28 crates ([`29a043b`](https://github.com/Byron/gitoxide/commit/29a043be6808a3e9199a9b26bd076fe843afe4f4))
+ - thanks clippy ([`77ff8ae`](https://github.com/Byron/gitoxide/commit/77ff8ae5fa9bbdb7c5e1c577845334f966294426))
+ - make fmt ([`429cccc`](https://github.com/Byron/gitoxide/commit/429cccc5831c25a7205a12dc7a0443ac48616e2c))
+ - avoid risking comparing two different current-time timestamps ([`389cb2a`](https://github.com/Byron/gitoxide/commit/389cb2abb585f4640ddd128541b05ad338599b5e))
+ - Merge branch 'filter-refs' ([`3773b92`](https://github.com/Byron/gitoxide/commit/3773b92b8372c9a40a74d281149ca65b057a7da9))
+ - thanks clippy ([`52fa247`](https://github.com/Byron/gitoxide/commit/52fa247d3ba211ccacfc867d2f0a17022e2b9b62))
+ - Merge branch 'filter-refs' ([`fd14489`](https://github.com/Byron/gitoxide/commit/fd14489f729172d615d0fa1e8dbd605e9eacf69d))
+ - Release git-features v0.22.6 ([`c9eda72`](https://github.com/Byron/gitoxide/commit/c9eda729d8f8bc266c7516c613d38acfb83a4743))
+ - upgrade all dependencies, except for `windows` ([`2968181`](https://github.com/Byron/gitoxide/commit/29681819ffe53d3926d631dc482f71d6200cb549))
+ - Merge branch 'index-from-tree' ([`172f73c`](https://github.com/Byron/gitoxide/commit/172f73cf26878d153d51790fa01853fa4ba6beb7))
+ - use specific error type for `rev_parse_single()` ([`f5959ed`](https://github.com/Byron/gitoxide/commit/f5959edc1477573278afcfe23e9e52ddaacb37db))
+ - use rev_parse_single() instead of rev_parse().single() ([`09948a5`](https://github.com/Byron/gitoxide/commit/09948a56449c372444e1ee13138128482a97b0be))
+ - new error for `rev_parse_single` ([`9491528`](https://github.com/Byron/gitoxide/commit/9491528456310c458b35217dc6442d1c07a41c05))
+ - Merge branch 'filter-refs' ([`e10554d`](https://github.com/Byron/gitoxide/commit/e10554d2a3b9c027353a432b0c84f7d3797b7cae))
+ - rev_parse_single ([`d9097ab`](https://github.com/Byron/gitoxide/commit/d9097ab758611d94ad33e41e508c299796dbc77e))
+ - make fmt ([`535e967`](https://github.com/Byron/gitoxide/commit/535e967666c6da657ff1b7eff7c64ab27cafb182))
+ - Merge branch 'filter-refs-by-spec' ([`5c05198`](https://github.com/Byron/gitoxide/commit/5c051986bd89590a9287d85d84c713d83dfab83a))
+ - thanks clippy ([`ab81525`](https://github.com/Byron/gitoxide/commit/ab81525853db031e5f80d397c4074e2c85497e2e))
+ - add `prompt` to top level forwarding #450) ([`1c13f11`](https://github.com/Byron/gitoxide/commit/1c13f1125664fbcc276a1ca440d168d07d0bf493))
+ - Merge branch 'main' into filter-refs-by-spec ([`9aa1d3d`](https://github.com/Byron/gitoxide/commit/9aa1d3dc46d4b1c76af257f573aff3aeef2d3fa8))
+ - Release git-features v0.22.4, git-url v0.8.0, safety bump 4 crates ([`1d4600a`](https://github.com/Byron/gitoxide/commit/1d4600ae51475c2e225f96c16c41e2c4a2b3f2aa))
+ - thanks clippy ([`34bc1b3`](https://github.com/Byron/gitoxide/commit/34bc1b33068122aa123397a1f4e5a1d9df244fa5))
+ - Merge branch 'main' into filter-refs-by-spec ([`1f6e5ab`](https://github.com/Byron/gitoxide/commit/1f6e5ab15f5fd8d23719b13e6aea59cd231ac0fe))
+ - Merge branch 'git_date_parse' ([`75591fb`](https://github.com/Byron/gitoxide/commit/75591fb108ce440ba2f920bebf99158b407e3046))
+ - thanks clippy ([`82ee79e`](https://github.com/Byron/gitoxide/commit/82ee79e2bb7d87ed615a0cdda75d175a52978f7b))
+ - thanks clippy ([`97e23dd`](https://github.com/Byron/gitoxide/commit/97e23ddb2c0d206efab393b984ba36aed11da72f))
+ - Merge branch 'fix-522' ([`5869e9f`](https://github.com/Byron/gitoxide/commit/5869e9ff2508d5a93c07635277af8764fcb57713))
+ - Release git-hash v0.9.9 ([`da0716f`](https://github.com/Byron/gitoxide/commit/da0716f8c27b4f29cfff0e5ce7fcb3d7240f4aeb))
+ - Merge branch 'main' into index-from-tree ([`bc64b96`](https://github.com/Byron/gitoxide/commit/bc64b96a2ec781c72d1d4daad38aa7fb8b74f99b))
+ - Merge branch 'main' into filter-refs-by-spec ([`51dc828`](https://github.com/Byron/gitoxide/commit/51dc8282fb77b519ff7d2c94c6bd73af306cfe8b))
+
+
+## 0.23.1 (2022-09-01)
+
+### Changed (BREAKING)
+
+ - 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.
+
+### Bug Fixes
+
+ - `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 `git-discover` crate, `Repository` can now be opened on `exFat` volumes.
+
+### Commit Statistics
+
+
+
+ - 21 commits contributed to the release over the course of 3 calendar days.
+ - 3 days passed between releases.
+ - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 1 unique issue was worked on: [#450](https://github.com/Byron/gitoxide/issues/450)
+
+### Commit Details
+
+
+
+view details
+
+ * **[#450](https://github.com/Byron/gitoxide/issues/450)**
+ - adjust to changes in `git-credentials` ([`45ba6cb`](https://github.com/Byron/gitoxide/commit/45ba6cbe8b41944aef7e1a72d9fa2823bff46586))
+ - test is using baseline exclusively now; get section's username as well ([`64a9d09`](https://github.com/Byron/gitoxide/commit/64a9d090fc7a4b8d4c3db060b59462c8867b1849))
+ - get to the point where url matching plays a role. ([`94911f2`](https://github.com/Byron/gitoxide/commit/94911f26cd1cdf1229544b238e0bd11e34026317))
+ - Remove 'unstable' feature. ([`36d8c57`](https://github.com/Byron/gitoxide/commit/36d8c57824a2b921012439105e49261fac66c955))
+ - first baseline setup to trigger implementation to reproduce credential helper setup ([`22694df`](https://github.com/Byron/gitoxide/commit/22694df6bcca3bda8fc6dc10b18bbabd08523f18))
+ - sketch the API for obtaining credential information ([`d56b9d5`](https://github.com/Byron/gitoxide/commit/d56b9d5bbd2d0e204cb5d315ad19eb9df472343f))
+ - frame for baseline for credential helpers ([`55eb965`](https://github.com/Byron/gitoxide/commit/55eb9655ae66feea44aa742c7699d9b7f3e96582))
+ - refactor ([`4c7799c`](https://github.com/Byron/gitoxide/commit/4c7799cb6fbac97e9d15e4e26243f2325002e2f9))
+ - A sketch to allow obtaining a function for credentials by url on the remote ([`99fb1cf`](https://github.com/Byron/gitoxide/commit/99fb1cfa5093de2f4d0f1df7047e28082135e28c))
+ - frame for overridable credential helpers ([`2916b08`](https://github.com/Byron/gitoxide/commit/2916b08c4b6503eb9de2362a37bada4d774dad17))
+ - refactor ([`959fc09`](https://github.com/Byron/gitoxide/commit/959fc0921f3d01efe7932c02d426d20f30c8b9d3))
+ - always compile prompting support in ([`bd0ea68`](https://github.com/Byron/gitoxide/commit/bd0ea68225a73fb83c9fc1b8594fc6ad288a77a9))
+ - set version of git-prompt to 0.1 and turn prompting on ([`7657693`](https://github.com/Byron/gitoxide/commit/7657693b8e23dfb69d6da4376bcd1b8e4e264f7e))
+ * **Uncategorized**
+ - Release git-diff v0.18.1, git-discover v0.4.2, git-traverse v0.16.4, git-repository v0.23.1 ([`2571831`](https://github.com/Byron/gitoxide/commit/2571831e5939bf4ea6f19537b0c1ccd71dc99088))
+ - prepare changelog prior to release ([`fc6b958`](https://github.com/Byron/gitoxide/commit/fc6b9583d0534f70e0c8afdcad46e09a5001d62b))
+ - Merge branch 'fix-git2-interactions' ([`b85fd4e`](https://github.com/Byron/gitoxide/commit/b85fd4e3ff814e56a14150870b7aac50e5e66d19))
+ - `max-performance-safe` mode does not include zlib-ng adjustments anymore. ([`d18e76c`](https://github.com/Byron/gitoxide/commit/d18e76cfb512ef7fe5bfee6e87726372c6a4a8b6))
+ - `parse` is pure function. ([`9ad1a5f`](https://github.com/Byron/gitoxide/commit/9ad1a5fa2ce54e978396ff3eaa7061a8edd10d4a))
+ - `parse()` returns Result. ([`206f392`](https://github.com/Byron/gitoxide/commit/206f3923f5da2e9e26677e917550e6e5baa2913a))
+ - Release git-path v0.4.2, git-config-value v0.7.0 ([`c48fb31`](https://github.com/Byron/gitoxide/commit/c48fb3107d29f9a06868b0c6de40567063a656d1))
+ - Merge branch 'main' into filter-refs-by-spec ([`cef0b51`](https://github.com/Byron/gitoxide/commit/cef0b51ade2a3301fa09ede7a425aa1fe3527e78))
+
+
+## 0.23.0 (2022-08-28)
+
+### New Features
+
+ - The empty tree can always be returned by `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.
+ - Make `find::object::*::Error` publicly available.
+ - Add `Reference::delete()` for simple reference deletion
+ - `Reference::set_target_id()` to easily set the target id of a reference
+ - `Reference::head_ref()` to quickly access the reference the head points to.
+
+### Bug Fixes
+
+ - `Commit::tree_id()` now returns a connected id
+
+### New Features (BREAKING)
+
+ - `git-diff` is now included by default as part of core functionality
+
+### Commit Statistics
+
+
+
+ - 20 commits contributed to the release over the course of 4 calendar days.
+ - 4 days passed between releases.
+ - 7 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 2 unique issues were worked on: [#450](https://github.com/Byron/gitoxide/issues/450), [#XXX](https://github.com/Byron/gitoxide/issues/XXX)
+
+### Commit Details
+
+
+
+view details
+
+ * **[#450](https://github.com/Byron/gitoxide/issues/450)**
+ - adjust to changes in `git-credentials` ([`dc32898`](https://github.com/Byron/gitoxide/commit/dc32898e9dda9cb8eee2bcad31cbe1c13d31f214))
+ - adjust to changes in `git-credentials` ([`cabe40a`](https://github.com/Byron/gitoxide/commit/cabe40a15460cffd14618d4bb936e1f2805d687a))
+ - refactor ([`7487b5a`](https://github.com/Byron/gitoxide/commit/7487b5a4142679ef423c5bd996e40e473c5dfc27))
+ - refactor ([`335bb64`](https://github.com/Byron/gitoxide/commit/335bb64b19a79d8a1d3fe571145d5ed1c33c6417))
+ * **[#XXX](https://github.com/Byron/gitoxide/issues/XXX)**
+ - prepare changelogs prior to release ([`8c0bca3`](https://github.com/Byron/gitoxide/commit/8c0bca37ff9fbaadbe55561fb2b0d649980c95b1))
+ - The empty tree can always be returned by `Repository::(try_)find_object()` ([`70aa850`](https://github.com/Byron/gitoxide/commit/70aa850591de268488ae9bf2d3839a5c9c543c35))
+ - Make `find::object::*::Error` publicly available. ([`8d07866`](https://github.com/Byron/gitoxide/commit/8d0786646e17a82d20ca6b2799b54f6349d389f4))
+ - `git-diff` is now included by default as part of core functionality ([`e090f84`](https://github.com/Byron/gitoxide/commit/e090f843f5cffc8e8e47a8cac2e6fb98e4c47771))
+ - `Commit::tree_id()` now returns a connected id ([`2834311`](https://github.com/Byron/gitoxide/commit/2834311b4f262c57e76627addaa4932196fd26b3))
+ * **Uncategorized**
+ - Release git-object v0.20.3, git-ref v0.15.4, git-config v0.7.1, git-diff v0.18.0, git-traverse v0.16.3, git-pack v0.22.0, git-odb v0.32.0, git-url v0.7.3, git-transport v0.19.3, git-protocol v0.19.1, git-refspec v0.1.1, git-repository v0.23.0, safety bump 6 crates ([`85a3bed`](https://github.com/Byron/gitoxide/commit/85a3bedd68d2e5f36592a2f691c977dc55298279))
+ - adjust to changes in `git-diff` ([`54954ee`](https://github.com/Byron/gitoxide/commit/54954ee5022a900f9f97baec63e9a073eca514e9))
+ - fix docs ([`740c658`](https://github.com/Byron/gitoxide/commit/740c658e40eb8533bfb60d29c857f8693e355dba))
+ - refactor ([`5892192`](https://github.com/Byron/gitoxide/commit/5892192cb246185981a11dc7aac96a07a47ed25a))
+ - Add `Reference::delete()` for simple reference deletion ([`2d0b639`](https://github.com/Byron/gitoxide/commit/2d0b63997b276a53b3cf8f09fac51f8e3f044bcd))
+ - `Reference::set_target_id()` to easily set the target id of a reference ([`9170562`](https://github.com/Byron/gitoxide/commit/9170562059c3eaa529850025ef35ac5ffffc0fdf))
+ - `Reference::head_ref()` to quickly access the reference the head points to. ([`950da60`](https://github.com/Byron/gitoxide/commit/950da602925e6376b08640ed3ebfdf407394db34))
+ - Release git-attributes v0.3.3, git-ref v0.15.3, git-index v0.4.3, git-worktree v0.4.3, git-testtools v0.8.0 ([`baad4ce`](https://github.com/Byron/gitoxide/commit/baad4ce51fe0e8c0c1de1b08148d8303878ca37b))
+ - Release git-features v0.22.3, git-revision v0.4.4 ([`c2660e2`](https://github.com/Byron/gitoxide/commit/c2660e2503323531ba02519eaa51124ee22fec51))
+ - Merge branch 'main' into filter-refs-by-spec ([`cfa1440`](https://github.com/Byron/gitoxide/commit/cfa144031dbcac2707ab0cec012bc35e78f9c475))
+ - Merge branch 'fix-ci-installation' ([`9245083`](https://github.com/Byron/gitoxide/commit/92450839621a4d99cb22d08cbf9f9a89ff6b9e3f))
+
+
+## 0.22.1 (2022-08-24)
+
+A maintenance release without user facing changes.
+
+### Commit Statistics
+
+
+
+ - 3 commits contributed to the release.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-date v0.1.0, git-actor v0.11.4, git-revision v0.4.3, git-repository v0.22.1, cargo-smart-release v0.11.0, git-commitgraph v0.8.2, gitoxide-core v0.17.0, gitoxide v0.15.0 ([`1fb931a`](https://github.com/Byron/gitoxide/commit/1fb931a7ea59f1cf895a6c1392fd8615b723c743))
+ - update changelogs prior to release ([`23cb58f`](https://github.com/Byron/gitoxide/commit/23cb58f02043e0e5027136fd6e8e724c03a2efbe))
+ - adjust to new version of git-date ([`b3fe26b`](https://github.com/Byron/gitoxide/commit/b3fe26bf03db7e1babb5ffbc89d71bf9614e3df3))
+
+
+## 0.22.0 (2022-08-24)
+
+
+
+### Chore
+
+ - uniformize deny attributes
+
+### New Features
+
+ - support avoiding usage of `fast-sha1` in git-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.
+ - use docsrs feature in code to show what is feature-gated automatically on docs.rs
+ - pass --cfg docsrs when compiling for https://docs.rs
+
+### Bug Fixes
+
+ - Don't fail worktree tests if the system's git version is not supporting required features
+
+### Commit Statistics
+
+
+
+ - 54 commits contributed to the release over the course of 4 calendar days.
+ - 4 days passed between releases.
+ - 8 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 2 unique issues were worked on: [#450](https://github.com/Byron/gitoxide/issues/450), [#488](https://github.com/Byron/gitoxide/issues/488)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 5 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#450](https://github.com/Byron/gitoxide/issues/450)**
+ - Respect `permissions.allow` ([`f8a5188`](https://github.com/Byron/gitoxide/commit/f8a51888d6f55efeb96bba13fdfc23a53781b4ba))
+ - deal with changes in `git-url` ([`6f89659`](https://github.com/Byron/gitoxide/commit/6f89659bed6d44de2149c36ce188d816e11f5a64))
+ - The first succeeding test for allowing schemes (without 'user' setting) ([`3ec28f0`](https://github.com/Byron/gitoxide/commit/3ec28f04622f7a2a99a47cde1376ff3088595e4d))
+ - support for failing configuration, for now without 'lenient' config support ([`2bce6a3`](https://github.com/Byron/gitoxide/commit/2bce6a3f04be3ea9bcb731d05f7651357810c186))
+ - sketch for lazy initialization of information to deal with allowing schemes ([`3f708f3`](https://github.com/Byron/gitoxide/commit/3f708f346f021662fa15867b5dbc2d42ccfc6fc8))
+ - tests for `protocol.allow` ([`cd59965`](https://github.com/Byron/gitoxide/commit/cd59965f46398adc8f2ac29d2369b0f5f4e0c0a1))
+ - Support for -c CLI config overrides in `gix config`. ([`19c1746`](https://github.com/Byron/gitoxide/commit/19c1746cefca9bc76537637ec99634eb4cf66a92))
+ - remove TODO, doesn't apply anymore ([`dcd6619`](https://github.com/Byron/gitoxide/commit/dcd66197315a9826102b7439b1ab33e72593fccf))
+ - fix docs ([`7d30eb3`](https://github.com/Byron/gitoxide/commit/7d30eb36e6aa7f679c97c5056cd5453f8e89ab10))
+ - `SnapshotMut::apply_cli_overrides()` to make it easy to support things like `-c` ([`d35cd2a`](https://github.com/Byron/gitoxide/commit/d35cd2a12c6db3d655ce10cad5c027bde99e19b4))
+ - Adjust to changes in `git-config` ([`8f4ad3c`](https://github.com/Byron/gitoxide/commit/8f4ad3cbd4c9254b6b234d9944d6298b5ca2bb60))
+ - set remote protocol version using configuration instead of using a special mechanism. ([`1a74da5`](https://github.com/Byron/gitoxide/commit/1a74da5bb6969306f77663dfb8d63b04428d031f))
+ - `Repository::config_snapshot_mut()` to mutate configuration values in memory. ([`2a839f3`](https://github.com/Byron/gitoxide/commit/2a839f3209f3bd35e0c0f7edff664cc953059f65))
+ - fix build ([`5e924cb`](https://github.com/Byron/gitoxide/commit/5e924cb5d8e2a11cb4b44ec451c840136314da54))
+ - Support for overriding the protocol version to use when connecting. ([`e5c53a8`](https://github.com/Byron/gitoxide/commit/e5c53a8d44914fd3e57b3d2cc2755210ea18e28b))
+ - change connection API to be consuming, otherwise async mode doesn't work due to lack of async drop ([`129176f`](https://github.com/Byron/gitoxide/commit/129176f013052b6ef6eb37b4274fa68c1e0b11a3))
+ - add docs ([`332a978`](https://github.com/Byron/gitoxide/commit/332a9784e61c102b46faa710ad9f6e5a208caa04))
+ - refactor ([`eba5b13`](https://github.com/Byron/gitoxide/commit/eba5b13aa08229ff97f0a2be66ec80aadd4b9d1f))
+ - A first working test to show all refs of a remote. ([`86c80e6`](https://github.com/Byron/gitoxide/commit/86c80e6db53fdc548221ab2dab2f84d66fef691f))
+ - first vague implementation of ls-refs ([`563e56f`](https://github.com/Byron/gitoxide/commit/563e56f8f970f0bb0cf8a6404479422a398e712e))
+ - Make `Remote::connect()` both sync and async. ([`f30db4c`](https://github.com/Byron/gitoxide/commit/f30db4c683fbd0250dce8073b3b2f3bd13e67d83))
+ - prepare for refs implementation, it won't need a delegate anymore. ([`2a881ca`](https://github.com/Byron/gitoxide/commit/2a881ca1357897c049592d94c58ee1f005b47787))
+ * **[#488](https://github.com/Byron/gitoxide/issues/488)**
+ - Don't fail worktree tests if the system's git version is not supporting required features ([`ff71730`](https://github.com/Byron/gitoxide/commit/ff71730b4e3635533d9969d9dd44c0f3c75c6648))
+ * **Uncategorized**
+ - Release git-worktree v0.4.2, git-repository v0.22.0 ([`2f0f530`](https://github.com/Byron/gitoxide/commit/2f0f530fb1d644bc0694e04f3c9309149f526e42))
+ - Release git-date v0.0.5, git-hash v0.9.8, git-features v0.22.2, git-actor v0.11.3, git-glob v0.3.2, git-quote v0.2.1, git-attributes v0.3.2, git-tempfile v2.0.4, git-lock v2.1.1, git-validate v0.5.5, git-object v0.20.2, git-ref v0.15.2, git-sec v0.3.1, git-config v0.7.0, git-credentials v0.4.0, git-diff v0.17.2, git-discover v0.4.1, git-bitmap v0.1.2, git-index v0.4.2, git-mailmap v0.3.2, git-chunk v0.3.1, git-traverse v0.16.2, git-pack v0.21.2, git-odb v0.31.2, git-packetline v0.12.7, git-url v0.7.2, git-transport v0.19.2, git-protocol v0.19.0, git-revision v0.4.2, git-refspec v0.1.0, git-worktree v0.4.2, git-repository v0.22.0, safety bump 4 crates ([`4974eca`](https://github.com/Byron/gitoxide/commit/4974eca96d525d1ee4f8cad79bb713af7a18bf9d))
+ - support avoiding usage of `fast-sha1` in git-features separately. ([`c28bcec`](https://github.com/Byron/gitoxide/commit/c28bcec19b5526acf888f928e6ddc4671873368e))
+ - thanks clippy ([`dc74fbd`](https://github.com/Byron/gitoxide/commit/dc74fbd9a58e1d424713fc5f2442cedcc09c1200))
+ - thanks clippy ([`c5bd452`](https://github.com/Byron/gitoxide/commit/c5bd45251ae0f47975e9fe77f0b9a9051e319d5c))
+ - Release git-path v0.4.1 ([`5e82346`](https://github.com/Byron/gitoxide/commit/5e823462b3deb904f5d6154a7bf114cef1988224))
+ - Merge branch 'example-write-blob' ([`afedd7f`](https://github.com/Byron/gitoxide/commit/afedd7f86ec8ea18a8165f71698ecc886f5cf643))
+ - `Repository::write_blob[_stream]()` to more easily write blobs. ([`4f87a06`](https://github.com/Byron/gitoxide/commit/4f87a0672f7288486a9b6403c0bb07a6279d2cfe))
+ - refactor ([`2faa919`](https://github.com/Byron/gitoxide/commit/2faa9192f32c5a8e57f003ba7fdef78403ba8509))
+ - refactor ([`05ab87b`](https://github.com/Byron/gitoxide/commit/05ab87b6fc420656f314c24c616375f13e3b24ed))
+ - Merge branch 'remote-ls-refs' ([`39d585d`](https://github.com/Byron/gitoxide/commit/39d585d9f9ac6f3ecf51359c8e37f0a50e21ed45))
+ - Merge branch 'main' into remote-ls-refs ([`95f2f4f`](https://github.com/Byron/gitoxide/commit/95f2f4f17f7eae174a64c7d9f6a1513d73b21bbb))
+ - thanks clippy ([`856f803`](https://github.com/Byron/gitoxide/commit/856f8031c607c120d34a08c51b2750e3f6d4d127))
+ - write blob ([`a3bec66`](https://github.com/Byron/gitoxide/commit/a3bec66e87530ecbc8109f32a6252f3df2eebec9))
+ - thanks clippy ([`f90d772`](https://github.com/Byron/gitoxide/commit/f90d772cf625afea605e42c92db15ed870d7e120))
+ - Merge branch 'example-new-repo' ([`946dd3a`](https://github.com/Byron/gitoxide/commit/946dd3a80522ef437e09528a93aa1433f01b0ee8))
+ - rename example init-repo-and-commit.rs ([`3630684`](https://github.com/Byron/gitoxide/commit/3630684ea4dba898108a7f394f37fd01ee812561))
+ - add comments ([`04bf807`](https://github.com/Byron/gitoxide/commit/04bf807041fd00c18e3806ac3966f066e59b34db))
+ - Use anyhow for error handling in example; prefer user-defined directory. ([`3a5169d`](https://github.com/Byron/gitoxide/commit/3a5169d6b4962b92a77ffafe9ec3b5eb4d676fbe))
+ - Make clear what `tmp.into_path()` is for ([`e540a76`](https://github.com/Byron/gitoxide/commit/e540a763a3e08bba669652116cb696ab51ebc21f))
+ - A more explicit name for the example ([`15aa860`](https://github.com/Byron/gitoxide/commit/15aa860fb96f78497d774f2537a46edbfc3d75af))
+ - refactor ([`bfc3432`](https://github.com/Byron/gitoxide/commit/bfc34320e87f6ccee22674060da43457a4ced136))
+ - git-repository example for creating new repo ([`367b809`](https://github.com/Byron/gitoxide/commit/367b809155c5c11153ae10e78691ef10c7fc6e90))
+ - Merge branch 'main' into remote-ls-refs ([`e2ee3de`](https://github.com/Byron/gitoxide/commit/e2ee3ded97e5c449933712883535b30d151c7c78))
+ - fix typo in git-repository doc ([`05c6b42`](https://github.com/Byron/gitoxide/commit/05c6b421563c8fd464664bc007ca11041f8d7dd1))
+ - Merge branch 'docsrs-show-features' ([`31c2351`](https://github.com/Byron/gitoxide/commit/31c235140cad212d16a56195763fbddd971d87ce))
+ - use docsrs feature in code to show what is feature-gated automatically on docs.rs ([`b1c40b0`](https://github.com/Byron/gitoxide/commit/b1c40b0364ef092cd52d03b34f491b254816b18d))
+ - uniformize deny attributes ([`f7f136d`](https://github.com/Byron/gitoxide/commit/f7f136dbe4f86e7dee1d54835c420ec07c96cd78))
+ - pass --cfg docsrs when compiling for https://docs.rs ([`5176771`](https://github.com/Byron/gitoxide/commit/517677147f1c17304c62cf97a1dd09f232ebf5db))
+ - thanks clippy ([`581f8ae`](https://github.com/Byron/gitoxide/commit/581f8ae2313fa886d788feed74c10b4624e8de63))
+ - Merge branch 'main' into remote-ls-refs ([`c82bbfa`](https://github.com/Byron/gitoxide/commit/c82bbfaddc45bf9b5b55f056613046d977d9ef09))
+
+
+## 0.21.1 (2022-08-19)
+
+A maintenance release that speeds up `commit.describe()` performance if `max_candidates()` is 0.
+
+### Commit Statistics
+
+
+
+ - 4 commits contributed to the release.
+ - 1 day passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-date v0.0.4, git-actor v0.11.2, git-revision v0.4.1, git-repository v0.21.1 ([`2f9dc84`](https://github.com/Byron/gitoxide/commit/2f9dc847e0d54f4181ce35ddadd9286ba80ca01f))
+ - prepare for release of git-repository ([`8aa5389`](https://github.com/Byron/gitoxide/commit/8aa5389d5a1bdd3a07f1caa1c2f55c8af4f9844a))
+ - Merge branch 'main' into remote-ls-refs ([`bd5f3e8`](https://github.com/Byron/gitoxide/commit/bd5f3e8db7e0bb4abfb7b0f79f585ab82c3a14ab))
+ - greatly improve `gix commit describe` performance by adding an object cache ([`d07daaa`](https://github.com/Byron/gitoxide/commit/d07daaae8ed33161097f3007057c9993546ceb75))
+
+
+## 0.21.0 (2022-08-17)
+
+
+
+### Changed
+
+ - Invert behaviour to `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.
+
+### New Features
+
+ - `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 .
+ - support core.worktree option
+ - display for `object::tree::EntryRef`
+ - `Head::prior_checked_out_branches()`
+ - `Repository::index()` and `Worktree::index()`.
+ These methods provide a possibly updated shared index.
+ - add `Repository::object_cache_size_if_unset()`
+ - `Commit::message_raw_sloppy()` to provide yet another way to obtain a commit message.
+ - add `rev_spec::parse::ObjectKindHint` to support `core.disambiguate`.
+ The latter is seemingly undocumented in the typical place, git-config.
+ - `Remote::with_refspec()` to add new unique refspecs
+ - `Remote::push_url()` to set it after the fact
+ - `Repository::remote_at(…)` to create an unnamed remote
+ - more conversions for `TryFrom`: `String` and `&str`
+ - `Head::into_remote()` to try really hard to find the correct remote
+ - `Repository::remote_default_name()` to obtain the repo-wide remote for a a direction.
+ - `Repository::branch_names()` to obtain branch names for which configuration exists.
+
+### Bug Fixes
+
+ - assure permissions per trust level are properly inherited into `open::Options`.
+ - provide additional explanation about when to use `open::Options::with()`
+
+### Refactor
+
+ - embrace `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.
+
+### Changed (BREAKING)
+
+ - 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()`.
+ - `git_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()`
+
+### New Features (BREAKING)
+
+ - `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.
+
+### Bug Fixes (BREAKING)
+
+ - Don't panic for `@{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.
+
+### Commit Statistics
+
+
+
+ - 189 commits contributed to the release over the course of 26 calendar days.
+ - 26 days passed between releases.
+ - 30 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 3 unique issues were worked on: [#427](https://github.com/Byron/gitoxide/issues/427), [#450](https://github.com/Byron/gitoxide/issues/450), [#482](https://github.com/Byron/gitoxide/issues/482)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 11 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#427](https://github.com/Byron/gitoxide/issues/427)**
+ - display for `object::tree::EntryRef` ([`b47bbb7`](https://github.com/Byron/gitoxide/commit/b47bbb787ef2e31dd2612a56f9e7759ef8a188b8))
+ - make fmt ([`4b320e7`](https://github.com/Byron/gitoxide/commit/4b320e773368ac5e8c38dd8a779ef3d6d2d024ec))
+ - `Head::prior_checked_out_branches()` ([`727768a`](https://github.com/Byron/gitoxide/commit/727768a49c41165b03ddcdbc71ca88b66c330f32))
+ - improve docs ([`1e47bc1`](https://github.com/Byron/gitoxide/commit/1e47bc1741fe4d57213ed1dcec176faff712f508))
+ - refactor ([`e67deab`](https://github.com/Byron/gitoxide/commit/e67deab56af20811f60757e27f1e21c81415f9cc))
+ - implement @^{} syntax ([`fbd5aab`](https://github.com/Byron/gitoxide/commit/fbd5aab63cce905ca0fb482bfbb990624d7df376))
+ - access to reflog entries ([`5cd06cf`](https://github.com/Byron/gitoxide/commit/5cd06cf668bcefe81c6feba8e9475d97d6debf43))
+ - declare reflog access by date to be planned. ([`95bcf3b`](https://github.com/Byron/gitoxide/commit/95bcf3b9cc1963ab785d8b9f488779228205b01e))
+ - officially make sibling branches 'planned' ([`145631b`](https://github.com/Byron/gitoxide/commit/145631bde653828cc35cad16ec2ec308cf204b23))
+ - implement nth prior checkout ([`ff37fae`](https://github.com/Byron/gitoxide/commit/ff37fae10caf5c6546aa935d6f974f11926e1254))
+ - test for nth prior checkout ([`4fd2314`](https://github.com/Byron/gitoxide/commit/4fd2314e30f7fc75b583b2cea87a932a9e91fff3))
+ - refactor, add complex test for traversal ([`4f83470`](https://github.com/Byron/gitoxide/commit/4f83470e533d1214e3e0132c3adaf9dc30cb44ef))
+ - support for ancestor traversal ([`ac2105f`](https://github.com/Byron/gitoxide/commit/ac2105f2e3dfdf2b1775e6479594daf0503b27cc))
+ - refactor ([`6ffbf4c`](https://github.com/Byron/gitoxide/commit/6ffbf4c8f37fe379db2d4c9daa4a1432cf62e918))
+ - support for parent traversal ([`aa80030`](https://github.com/Byron/gitoxide/commit/aa80030f3a57ae0edcffb4388156971bb8421f0a))
+ - Index lookup works and provides hints en-par with git in terms of information at least. ([`a049bd3`](https://github.com/Byron/gitoxide/commit/a049bd3de924113a011057aa4e76a8df3b28d437))
+ - failing tests for index rev-parsing ([`502d8c9`](https://github.com/Byron/gitoxide/commit/502d8c90464af35789e7725da831c81d41278bd1))
+ - Make `git-index` non-optional and part of the standard setup. ([`c2e84a4`](https://github.com/Byron/gitoxide/commit/c2e84a40bd61583a46faaf9ecdbaf2a651a71c4e))
+ - `Repository::index()` and `Worktree::index()`. ([`ffe7291`](https://github.com/Byron/gitoxide/commit/ffe72918baf5c4c9f0f3709f75f068a663778588))
+ - rename `Repository::load_mailmap*` to `Repository::open_mailmap*`. ([`1c12d49`](https://github.com/Byron/gitoxide/commit/1c12d49eefa6d79ef50b2960f41b29de680ac8eb))
+ - remove `Repository::load_index()` in favor of `repo.worktree().open_index()`. ([`ea35183`](https://github.com/Byron/gitoxide/commit/ea35183b53f2ff71bdf2270ac4f7470a85d7756f))
+ - tests for reference name retrieval. ([`7a8c8f3`](https://github.com/Byron/gitoxide/commit/7a8c8f3f23be3738401699af10719ba1bbe94eff))
+ - add `Repository::object_cache_size_if_unset()` ([`47619f7`](https://github.com/Byron/gitoxide/commit/47619f7c06a49dcf60a30e1a43a5352914183092))
+ - Use `Display` for revision printing instead of `Debug` ([`d194f15`](https://github.com/Byron/gitoxide/commit/d194f155212d71d7d258b5a3e63ce12e8327f158))
+ - adapt to changes in `git-revision` ([`65b337d`](https://github.com/Byron/gitoxide/commit/65b337d8ae4b64374ba1a010c3ca9e945e53d44e))
+ - Assure only commits serve as starting point ([`5ad0f96`](https://github.com/Byron/gitoxide/commit/5ad0f960a0349f538b954dcf5b28d48d8b396ac7))
+ - test regex negation, which brought up a traversal ordering bug ([`7b1733e`](https://github.com/Byron/gitoxide/commit/7b1733ecb8d28065b29faaa78198c575ff711ab4))
+ - multi-tip regex work ([`4ca4919`](https://github.com/Byron/gitoxide/commit/4ca49194b6e60c0a7a3a7c184496384a3aec3360))
+ - A way to obtain a rev-walk platform directly from the top-level repo. ([`835dcf4`](https://github.com/Byron/gitoxide/commit/835dcf46323905387e1e09b15d74d97be2478d30))
+ - Only run regex based searches if a substring search won't do ([`295bf9f`](https://github.com/Byron/gitoxide/commit/295bf9f623eb9dcda581d5ce384f4fcfd72015a2))
+ - fix docs ([`25fd8fe`](https://github.com/Byron/gitoxide/commit/25fd8fe62b5c313ec18233b8480014ef3d3b7434))
+ - a first failing test for regex-search. ([`13e0938`](https://github.com/Byron/gitoxide/commit/13e09380253695505688097a093a87346d4362d5))
+ - make clear in error text if regex aren't actually used. ([`cfb8c40`](https://github.com/Byron/gitoxide/commit/cfb8c40a8a38731a5b4687d3fa2e90186d7decf6))
+ - Move `RevSpec` to `revision::Spec`. ([`1b8df18`](https://github.com/Byron/gitoxide/commit/1b8df1821d7f18c3a2bcb28a5586389ce37ab24e))
+ - refactor ([`e05aa3b`](https://github.com/Byron/gitoxide/commit/e05aa3b05118c9946524b8ff1324970489b64976))
+ - align tests to upcoming structure of RevSpec ([`41d6dd2`](https://github.com/Byron/gitoxide/commit/41d6dd201bf4e6ec78c4374258eebe05ed0362b8))
+ - `git_revision` is now available in `revision::plumbing`. ([`4fd0968`](https://github.com/Byron/gitoxide/commit/4fd096840ba27da6ce86678a85ede33e3be974ff))
+ - embrace `revision` module and move `rev_walk` there. ([`b38a212`](https://github.com/Byron/gitoxide/commit/b38a212459e2646ab97ad7b5c24e54d962aae960))
+ - Turn `id::Ancestors` into general-purpose `RevWalk`. ([`2424957`](https://github.com/Byron/gitoxide/commit/2424957cff75daacf6f6f14f74b9639f6875c4fb))
+ - git sorts commit traversals and so do we ([`538ecd4`](https://github.com/Byron/gitoxide/commit/538ecd4c9896896c4b3068464f20b840ca16bf44))
+ - Use prefix consisently when reporting object ids ([`bf9e27b`](https://github.com/Byron/gitoxide/commit/bf9e27bd5df5de756bd1885b0ec07263d517f0ca))
+ - `Commit::message_raw_sloppy()` to provide yet another way to obtain a commit message. ([`d2611ce`](https://github.com/Byron/gitoxide/commit/d2611cee61841bc7bd978bef5af7dc66154248a2))
+ - support for regex-based matching for single-tips ([`6369153`](https://github.com/Byron/gitoxide/commit/63691530c2c8193809500b1f7debe8993e021c6a))
+ - assure regex search failure is registered as such ([`b58d7cb`](https://github.com/Byron/gitoxide/commit/b58d7cbf424530d9ebc875d3b54a0f53e64d3086))
+ - non-regex implementation of single-tip search for commit messages ([`7ad4e54`](https://github.com/Byron/gitoxide/commit/7ad4e54126614f253c17ff44aa3df7bff24a56a2))
+ - Provide an error if regex is not compiled in but is used ([`838a6ba`](https://github.com/Byron/gitoxide/commit/838a6ba94c34449996cc2507bb935e9870181214))
+ - frame for optional regex support in git-repository ([`7f43d95`](https://github.com/Byron/gitoxide/commit/7f43d955ecc6639b77e255eaaae5d2eae2583c7c))
+ - Add complex repositry example similar to the one by Jon Loeliger ([`1e0b431`](https://github.com/Byron/gitoxide/commit/1e0b4310d7a15b74b781b16993d27f5288fa4912))
+ - assure all forms of ranges/merge-bases disambiguate equally ([`4fdc120`](https://github.com/Byron/gitoxide/commit/4fdc1202f040bd0321ef3fcb34c66d56ff7c6b03))
+ - fix tests that was flaky due to time-dependent comparison. ([`9fa9850`](https://github.com/Byron/gitoxide/commit/9fa98501b7f63c68f5685d6da5f79680035baa92))
+ - follow refs as well when resolving names to ids. ([`34c8140`](https://github.com/Byron/gitoxide/commit/34c8140a564d8b12f904f595ca98b6b1b72ddbbc))
+ - Correctly disambiguate objects in ranges without falling back to repo-disambiguation configuration ([`17a1edf`](https://github.com/Byron/gitoxide/commit/17a1edf6e77b7ece1f79e59d6230375ad9c9653c))
+ - Disambiguation of ranges by committish works ([`8b0ceb5`](https://github.com/Byron/gitoxide/commit/8b0ceb5f71938cd18968ca1b90f019f6b3ad6c14))
+ - first failing test to check for range disambiguation ([`a5eb4fb`](https://github.com/Byron/gitoxide/commit/a5eb4fbdb6c3bf6acffbc0cb21fe3cd738f732f0))
+ - better error messages in case all ambiguous objects fail a transformation ([`97922f8`](https://github.com/Byron/gitoxide/commit/97922f8c8337145f6a8432d2c35e3bb054bfdad7))
+ - Make use of `git-revision::Spec` in `RevSpec` data structure. ([`004915e`](https://github.com/Byron/gitoxide/commit/004915ea118e3ea6b710aa405eedc6a7a5a1a1f3))
+ - sketch the new version of the RevSpec data structure ([`98d32c6`](https://github.com/Byron/gitoxide/commit/98d32c67b462bcb9498ce581e0e92a13a12d5d3b))
+ - sketch data structure for actually using baseline range results ([`f6da78f`](https://github.com/Byron/gitoxide/commit/f6da78f9905f66c4fecdc7c1b14b47132687c260))
+ - basic parsing of range baseline ([`b6013b6`](https://github.com/Byron/gitoxide/commit/b6013b631b310cd221a07bf29f57111a2e186203))
+ - adjust to change in git-revision ([`51762bb`](https://github.com/Byron/gitoxide/commit/51762bb627a9e001a5a3eebc4ec4a7cfc30dbb9e))
+ - adjust to changes in git-revision ([`df7da1f`](https://github.com/Byron/gitoxide/commit/df7da1f575111cd8de0155271b6d220b92174eb7))
+ - fix docs ([`5425de9`](https://github.com/Byron/gitoxide/commit/5425de974373a504daeeea7adeadc9beeb3023d0))
+ - Adjust RevSpec::range() to match changes in `git-revision` ([`05ea453`](https://github.com/Byron/gitoxide/commit/05ea45337e85583db5e57f14e995be49ba888ee1))
+ - adjust to changes in `git-revision` ([`a70f262`](https://github.com/Byron/gitoxide/commit/a70f26274bb2d67428f4917882a94a8fc8b648c8))
+ - All disambiguation tests work as good as git or better. ([`c397761`](https://github.com/Byron/gitoxide/commit/c397761387f94e06ed3bdcb0236294465cfe8b6d))
+ - re-enable more tests ([`04e1558`](https://github.com/Byron/gitoxide/commit/04e1558012bf2a33ba154967fbe4770440dc5d22))
+ - more tests, still in progress ([`8d92eb6`](https://github.com/Byron/gitoxide/commit/8d92eb6cb0d2a7740e02ee95b3a3c56581c582b2))
+ - improve error messages related to peeling ([`b61a343`](https://github.com/Byron/gitoxide/commit/b61a3439afe739ffe68e0eb3cc05d90e03cae3a5))
+ - `gix rev parse` now uses `Repository::rev_parse()` ([`e191681`](https://github.com/Byron/gitoxide/commit/e191681a9e700d8a49e2ab6ffb19cfc5f43312a5))
+ - also maintain git-style sort order of objects ([`c14754a`](https://github.com/Byron/gitoxide/commit/c14754a0cce159a6e4306c43a44790a8474a80a9))
+ - git-style disambiguation errors ([`5717194`](https://github.com/Byron/gitoxide/commit/57171946081c03da98f3d33f5b963c3bc4b2d6d9))
+ - refactor ([`6f7823f`](https://github.com/Byron/gitoxide/commit/6f7823f5e6b8d95ccfa2770031ab36724e11beb0))
+ - refactor; prepare for detailed ambiguous object information ([`0a08583`](https://github.com/Byron/gitoxide/commit/0a085831c2d74d30aea7119be16bd2f4aa969e7e))
+ - refactor ([`017727a`](https://github.com/Byron/gitoxide/commit/017727ab2e830b2593a6381e72654ab5cbeacb38))
+ - refactor ([`87e7d97`](https://github.com/Byron/gitoxide/commit/87e7d974faac58bf90c6e291514482c5c54219c9))
+ - refactor ([`1d2ef52`](https://github.com/Byron/gitoxide/commit/1d2ef52e9760b9c637f84cc9c22f8e3f0be5bd08))
+ - a way to not degenerate information when chaining errors ([`8d723ad`](https://github.com/Byron/gitoxide/commit/8d723ad81a81c42c30af708a3afdb4afe64c53c8))
+ - compare all configurable disambiguation types against baseline ([`c98195b`](https://github.com/Byron/gitoxide/commit/c98195bd1dbee48004a3e69f89b77da27c035a2b))
+ - refactor ([`929308d`](https://github.com/Byron/gitoxide/commit/929308d3e83c97b9f23a3ba08d96118c4aad5312))
+ - more impelmentation of object disambiguation ([`9127d15`](https://github.com/Byron/gitoxide/commit/9127d15dabe0682a0dfe265da6ee5e5f75f9eff3))
+ - first repository-local disambiguation works ([`31db570`](https://github.com/Byron/gitoxide/commit/31db5703f5cd677ab5bdca91af1abf803de8ed4f))
+ - a general setup to peel objects while managing candidates. ([`c418527`](https://github.com/Byron/gitoxide/commit/c4185275ac32b6416df5f00522b982b029076190))
+ - set foundation for core.disambiguate implementation ([`96cb5ee`](https://github.com/Byron/gitoxide/commit/96cb5eed35165addffc22900a436771063ffb316))
+ - parse `core.disambiguate` from configuration and cache it. ([`335c459`](https://github.com/Byron/gitoxide/commit/335c4590c8f11f43b3aa9c9602ec8fad0d22c0ec))
+ - add `rev_spec::parse::ObjectKindHint` to support `core.disambiguate`. ([`906c958`](https://github.com/Byron/gitoxide/commit/906c95845fa4aa2d4390c522bb566a188b8c0e78))
+ - `Repository::rev_parse()` returns a `RevSpec`. ([`e2aff28`](https://github.com/Byron/gitoxide/commit/e2aff28e818951785d933f4b55b2f1b882729cb6))
+ - improve error message for Fail mode with ref matching as well as object(s) ([`1ef7281`](https://github.com/Byron/gitoxide/commit/1ef728112e71cef737699a7745acb9ae97e58fce))
+ - add support for keeping multiple candidates in case of ambiguous objects. ([`8b4e5e0`](https://github.com/Byron/gitoxide/commit/8b4e5e0e59a3c363c2b0a40dd5ca526409bcaafc))
+ - refactor ([`2b2cb6d`](https://github.com/Byron/gitoxide/commit/2b2cb6d68aaecfbe81385c5fff5d8cc88527fdc0))
+ * **[#450](https://github.com/Byron/gitoxide/issues/450)**
+ - sketch of simple delegate to collect listed refs ([`1c5f561`](https://github.com/Byron/gitoxide/commit/1c5f5617940efe818a5e2aca5afe2cbd7f4ad940))
+ - fix docs ([`c2dfe33`](https://github.com/Byron/gitoxide/commit/c2dfe338a91a1899ecf4e1eecbab708a2f6bac38))
+ - Rough sketch of the `Connection` API to list references ([`73cb41c`](https://github.com/Byron/gitoxide/commit/73cb41cf0cc0785c87319b25c72b8b5552f81666))
+ - A first sketch on how connections could be working ([`e55b43e`](https://github.com/Byron/gitoxide/commit/e55b43ef72bb3f23655c7e0884b8efcf2496f944))
+ - refactor ([`ad101ef`](https://github.com/Byron/gitoxide/commit/ad101ef973afe559e71de78152a6a25b310d28dd))
+ - adapt to changes in `git-transport` and `git-url ([`4ae2390`](https://github.com/Byron/gitoxide/commit/4ae2390578e086705c640fa74d273e1f82c9ab62))
+ - refactor ([`b3362ae`](https://github.com/Byron/gitoxide/commit/b3362ae76b1c0ba0291412c2f96941a522860cf2))
+ - a sketch for the remote connection API, for async and blocking ([`f933ae3`](https://github.com/Byron/gitoxide/commit/f933ae3dea69bd7d432aaf47de62f2ecbb31605c))
+ - `Remote::with_refspec()` to add new unique refspecs ([`ef187f0`](https://github.com/Byron/gitoxide/commit/ef187f0180d89544d9015cbc2bc03d8cb51f4615))
+ - refactor ([`bf47405`](https://github.com/Byron/gitoxide/commit/bf47405234ba9915d77b64d4a5c1a372be102001))
+ - refactor ([`7581177`](https://github.com/Byron/gitoxide/commit/75811778d067ec68442bc0700514935977ac4447))
+ - Make explicit url rewrites more forgiving similar to how git does it ([`e7b451d`](https://github.com/Byron/gitoxide/commit/e7b451d15751923c002c0e67ed9b8defd27127e0))
+ - a test for handling bad rewrite urls and its implications ([`c2afd87`](https://github.com/Byron/gitoxide/commit/c2afd874aa64e56223af0671964acf995706484d))
+ - fix docs ([`dbc6f5d`](https://github.com/Byron/gitoxide/commit/dbc6f5da51417842a722b8b3576b6ea21f4dd885))
+ - adapt to changes in `git-url` ([`f0f5ee6`](https://github.com/Byron/gitoxide/commit/f0f5ee602fb46741114affed076716ac12b95138))
+ - Add escape-hatch to eliminate rewrite rule failures on instantiation ([`897c8c1`](https://github.com/Byron/gitoxide/commit/897c8c19ca8566834fcb9c9bf5c372451c473760))
+ - `Remote::push_url()` to set it after the fact ([`d51ba42`](https://github.com/Byron/gitoxide/commit/d51ba42c643d8ee03a3c6b648f8524ff04827170))
+ - `Repository::remote_at(…)` to create an unnamed remote ([`9b07b91`](https://github.com/Byron/gitoxide/commit/9b07b91ad065836e7473df6635025659af2865ee))
+ - more conversions for `TryFrom`: `String` and `&str` ([`a67fc26`](https://github.com/Byron/gitoxide/commit/a67fc26b80e5d1183ddc5c6598396214f3e19945))
+ - `Head::into_remote()` to try really hard to find the correct remote ([`7a512ec`](https://github.com/Byron/gitoxide/commit/7a512ecdf236afc0b3d562d60fa81ab62c00cd9d))
+ - refactor ([`ba1c162`](https://github.com/Byron/gitoxide/commit/ba1c1622d848769784f5f2eaf7945f29cc8a864e))
+ - remote-name by reference, which can be useful to find remotes with multiple fallbacks ([`92c0aa3`](https://github.com/Byron/gitoxide/commit/92c0aa343e5cba86dc4b2d4006927542610bc802))
+ - refactor ([`f41e588`](https://github.com/Byron/gitoxide/commit/f41e588595ff179abc39817dd1fa9f39fb14e6c0))
+ - refactor ([`2905e1b`](https://github.com/Byron/gitoxide/commit/2905e1b0c5d75214fc8dc279f149e1b3bc8caaf3))
+ - refactor ([`6c15bf4`](https://github.com/Byron/gitoxide/commit/6c15bf450066525df439df1f719a0bd4720730cc))
+ - support for instant url rewriting (trusted values), with option to use the originals. ([`76f76f5`](https://github.com/Byron/gitoxide/commit/76f76f533c5cc8e44fc20a05ee31c0c1a0122cc3))
+ - failing test for url rewrites ([`58aee33`](https://github.com/Byron/gitoxide/commit/58aee3395c0a70d1659df99d2fe4953676dbe346))
+ - Fix windwos errors, hopefully ([`0fbbe34`](https://github.com/Byron/gitoxide/commit/0fbbe346571bdade15346fdf6978c3a360845d06))
+ - Allow to use `git-path` at all times ([`b4f6bbd`](https://github.com/Byron/gitoxide/commit/b4f6bbd10f4aa6a8d7cd1e57a462514cbc0ebb94))
+ - fix tests on windows ([`dc0186e`](https://github.com/Byron/gitoxide/commit/dc0186ef72812b6362b17e7a21ecf5014cd202c5))
+ - deduplicate refs when reading them ([`60780cc`](https://github.com/Byron/gitoxide/commit/60780cc3a341e3de744f949c428f05e31dc8ffab))
+ - better error reporting for ref-spec parsing ([`fcea9d1`](https://github.com/Byron/gitoxide/commit/fcea9d1c48d84d30893d3e15272abd85a26bb4e2))
+ - valid push-url and push-specs as well ([`214dd16`](https://github.com/Byron/gitoxide/commit/214dd1694c7f29b250e515ab4128a303d6ffac97))
+ - tests to validate typical remotes can be instantiated ([`72545dd`](https://github.com/Byron/gitoxide/commit/72545ddce8cb9e1399336526a3ffc8311fb1195a))
+ - first sketch of finding remotes ([`0e57aa2`](https://github.com/Byron/gitoxide/commit/0e57aa24a96dfb94da02c78bbc03a0d3010c80c1))
+ - make git-url public for good ([`2f7960f`](https://github.com/Byron/gitoxide/commit/2f7960f55ead318cedded2b8041df31233f8a11b))
+ - sketch Remote type for implementing find_remote() ([`9495947`](https://github.com/Byron/gitoxide/commit/94959472e1a40e79d7894ff732512ef03066d22b))
+ - `Repository::remote_default_name()` to obtain the repo-wide remote for a a direction. ([`f392f26`](https://github.com/Byron/gitoxide/commit/f392f26bec6069ac43ecd461b4f50e0def8b8972))
+ - `Repository::branch_names()` to obtain branch names for which configuration exists. ([`f47464f`](https://github.com/Byron/gitoxide/commit/f47464f64f7c21500a24f563b25a8fc070c41778))
+ - Assure remote-names are unique and we don't double-count sections. ([`7ef35b2`](https://github.com/Byron/gitoxide/commit/7ef35b2d67b74be8420b821d5a477bad56d2026b))
+ - rename `Repository::remote_ref()` to `::branch_remote_ref()` ([`5ab81ec`](https://github.com/Byron/gitoxide/commit/5ab81ece15ec802ad4328ce31304233bd25b2929))
+ - Add test to list remote names ([`2b21ac5`](https://github.com/Byron/gitoxide/commit/2b21ac5948623beadf8e89c3d0030886f3fdaeee))
+ - first sketch of method to access remote names ([`bca9fe9`](https://github.com/Byron/gitoxide/commit/bca9fe91c015633ed83e9e8ba248a16a0fdbddd6))
+ - refactor ([`0f97c44`](https://github.com/Byron/gitoxide/commit/0f97c44cf5f52fbd4431cddcbff188c791fe667e))
+ * **[#482](https://github.com/Byron/gitoxide/issues/482)**
+ - Bring back conversion from discovery kind to `git-repository::Kind` ([`ebb5bee`](https://github.com/Byron/gitoxide/commit/ebb5bee7b71272013f43f18a5a7ce48eccb587a0))
+ - `Kind` can now represent submodules. ([`a01525d`](https://github.com/Byron/gitoxide/commit/a01525d159a33d6ad60a5324f2e9abbbe17fcfad))
+ - `open()` and `discover()` support opening submodules. ([`5dac021`](https://github.com/Byron/gitoxide/commit/5dac021bbbc5621167e7f49d62b11f68f76e42b6))
+ - Add archive for submodule test ([`7ab3279`](https://github.com/Byron/gitoxide/commit/7ab32793b7eb70a5d5c47da456dc37d788a0e58b))
+ - test showing that submodules dirs can't be opened right now ([`5a9c537`](https://github.com/Byron/gitoxide/commit/5a9c537ab00c9acfde201a3296a64c96c8c18424))
+ * **Uncategorized**
+ - Release git-worktree v0.4.1, git-repository v0.21.0 ([`ee383f3`](https://github.com/Byron/gitoxide/commit/ee383f347371007f1c4d3a2a98c5511d7e0793a8))
+ - Release git-date v0.0.3, git-actor v0.11.1, git-attributes v0.3.1, git-tempfile v2.0.3, git-object v0.20.1, git-ref v0.15.1, git-config v0.6.1, git-diff v0.17.1, git-discover v0.4.0, git-bitmap v0.1.1, git-index v0.4.1, git-mailmap v0.3.1, git-traverse v0.16.1, git-pack v0.21.1, git-odb v0.31.1, git-packetline v0.12.6, git-url v0.7.1, git-transport v0.19.1, git-protocol v0.18.1, git-revision v0.4.0, git-worktree v0.4.1, git-repository v0.21.0, safety bump 5 crates ([`c96473d`](https://github.com/Byron/gitoxide/commit/c96473dce21c3464aacbc0a62d520c1a33172611))
+ - prepare changelogs prior to reelase ([`c06ae1c`](https://github.com/Byron/gitoxide/commit/c06ae1c606b6af9c2a12021103d99c2810750d60))
+ - Merge branch 'submodule-open' ([`8f5f3ab`](https://github.com/Byron/gitoxide/commit/8f5f3ab588cf0165d50a82365119ad5804745017))
+ - Merge branch 'core-abbrev-handling' ([`dbaff13`](https://github.com/Byron/gitoxide/commit/dbaff13eaf7ba5f9c0ee2c90ac9f17e6078cad9e))
+ - Invert behaviour to `open::Options::strict_config()`, with lenient being the default. ([`0235111`](https://github.com/Byron/gitoxide/commit/0235111a4fcc40c7b57d973bfce27a66eddea901))
+ - `open::Options::lenient_config(…)` to default otherwise invalid configuration values where possible ([`067c334`](https://github.com/Byron/gitoxide/commit/067c3342f3564dd7f152a720e93e3aa590ae6524))
+ - thanks clippy ([`8f730ae`](https://github.com/Byron/gitoxide/commit/8f730ae47b0d9765b51b8b04500ca9e70a1ca743))
+ - Release git-hash v0.9.7, git-features v0.22.1 ([`232784a`](https://github.com/Byron/gitoxide/commit/232784a59ded3e8016e4257c7e146ad385cdd64a))
+ - Merge branch 'main' into remote-ls-refs ([`c4bf958`](https://github.com/Byron/gitoxide/commit/c4bf9585d815bc342e5fb383336cc654280dd34f))
+ - Merge branch 'index-write-refactor' ([`805f432`](https://github.com/Byron/gitoxide/commit/805f432bf8e9d2dd9ede56caf959de386d5d80c7))
+ - first PoC for writing long paths, even though it doens't produce the entire file yet ([`581cbd7`](https://github.com/Byron/gitoxide/commit/581cbd7afeac0f7654611c83deacae802ef5da6f))
+ - adjust `git_date::parsea(str)` to use a str ([`0f8680a`](https://github.com/Byron/gitoxide/commit/0f8680a60913556b7fbd7543fda6a409ac05b121))
+ - Merge branch 'format_git_date_time' ([`99e12be`](https://github.com/Byron/gitoxide/commit/99e12bee16ab3f344c71818bfd1c95cf50e1721b))
+ - refactor ([`bd64387`](https://github.com/Byron/gitoxide/commit/bd64387d8ad3377571755dff14577cc3c53ee9cc))
+ - Merge branch 'main' into write-index-v2 ([`a938986`](https://github.com/Byron/gitoxide/commit/a938986877302c197d1aed087594c5605416fe5f))
+ - Merge branch 'main' into remote-ls-refs ([`de61c4d`](https://github.com/Byron/gitoxide/commit/de61c4db7855d6925d66961f62ae3d12cc4acf78))
+ - thanks clippy ([`4bd747c`](https://github.com/Byron/gitoxide/commit/4bd747cb3e126fe5b1d540270cfbd731cffd42ef))
+ - thanks clippy ([`80e4ab7`](https://github.com/Byron/gitoxide/commit/80e4ab782ebb23bb553b6e47209753a2bd8d05a1))
+ - Merge branch 'main' into remote-ls-refs ([`e8fc89d`](https://github.com/Byron/gitoxide/commit/e8fc89d36ab17a66e799bdec3ed71388b9730266))
+ - Don't panic for `@{1}` in new repos; rename `Head::into_referent()` to `::try_into_referent()` ([`c68b125`](https://github.com/Byron/gitoxide/commit/c68b125a46f666700cdbda6f8cd39a044f4feb1b))
+ - Merge branch 'feat-core-worktree' ([`df42d22`](https://github.com/Byron/gitoxide/commit/df42d22b39f0dba113a10d66dcd1a151d1eb1a76))
+ - remove `permissions::Config::strict()` as they were unused internally. ([`0deda0d`](https://github.com/Byron/gitoxide/commit/0deda0df55c11647f51374ed5a8bf11c932e2bae))
+ - test absolute worktree dirs as well when overridden in core.worktree ([`4e17864`](https://github.com/Byron/gitoxide/commit/4e178640d64cc88e42b1410f46592d0d6dd7e1b9))
+ - validate core.worktree handling in bare repositories ([`cba6983`](https://github.com/Byron/gitoxide/commit/cba69837773c9fad48c01ff175f5bae29b8a7923))
+ - Add more tests around invalid `core.worktree` values ([`1591a50`](https://github.com/Byron/gitoxide/commit/1591a50d1a2cba027b9ee88a64fa90b282c849fb))
+ - move tests into `worktree` module and prepare for more of them ([`a05b15b`](https://github.com/Byron/gitoxide/commit/a05b15b1b73d5589881df95f4cf50361434e0660))
+ - Use time format strings. ([`f84e8f5`](https://github.com/Byron/gitoxide/commit/f84e8f5f16ec2197d1967fb1cc06e9609ea52c16))
+ - thanks clippy ([`f84360c`](https://github.com/Byron/gitoxide/commit/f84360ca56be1ec9d95ad03566932622d9b0d2a6))
+ - support core.worktree option ([`0bf8371`](https://github.com/Byron/gitoxide/commit/0bf8371706d319681c3f794af5cd13f2f50a27d0))
+ - thanks clippy ([`4347a96`](https://github.com/Byron/gitoxide/commit/4347a96df7742dd1b2b1e0d56543ba16612b7924))
+ - thanks clippy ([`c57cb6f`](https://github.com/Byron/gitoxide/commit/c57cb6f14c8add07398107e25545a7bc699afe1a))
+ - refactor ([`556dd8c`](https://github.com/Byron/gitoxide/commit/556dd8cb78ea9321031984e2c6b4f9bc415f1be5))
+ - Format `git-date::Time` with `time::format_description`. ([`d4243bc`](https://github.com/Byron/gitoxide/commit/d4243bc4feb994bde99156ba77fff63bc9c875e9))
+ - support for `@:` == `@^{tree}` in rev-parsing ([`6c06406`](https://github.com/Byron/gitoxide/commit/6c064067d2d2cde1c987928c0a44526841f1749f))
+ - Merge branch 'rev-parse-delegate' ([`2f506c7`](https://github.com/Byron/gitoxide/commit/2f506c7c2988477b0f97d272a9ac9ed47b236457))
+ - thanks clippy ([`90dccc3`](https://github.com/Byron/gitoxide/commit/90dccc3d31340f91f7847c7b1ed8c32c96696021))
+ - thanks clippy ([`df83e23`](https://github.com/Byron/gitoxide/commit/df83e23cc0b0ea486bf139c6ccb3a25c2604a323))
+ - thanks clippy ([`6163caa`](https://github.com/Byron/gitoxide/commit/6163caa19ad23f7bc24e7a7c35026b03c61642be))
+ - thanks clippy ([`d8511bb`](https://github.com/Byron/gitoxide/commit/d8511bb3025fa447b7a325ac41de41f25edead3b))
+ - thanks clippy ([`a479bd3`](https://github.com/Byron/gitoxide/commit/a479bd3079c54693f82277dfde6068e7b401fb12))
+ - Merge pull request #2 from SidneyDouw/main ([`ce885ad`](https://github.com/Byron/gitoxide/commit/ce885ad4c3324c09c83751c32e014f246c748766))
+ - Merge branch 'Byron:main' into main ([`9b9ea02`](https://github.com/Byron/gitoxide/commit/9b9ea0275f8ff5862f24cf5a4ca53bb1cd610709))
+ - Merge branch 'main' into rev-parse-delegate ([`6da8250`](https://github.com/Byron/gitoxide/commit/6da82507588d3bc849217c11d9a1d398b67f2ed6))
+ - remove `Permissions::git_dir` field entirely. ([`1df379a`](https://github.com/Byron/gitoxide/commit/1df379ab0046887a330c0a670ad0414e79cfae7b))
+ - assure permissions per trust level are properly inherited into `open::Options`. ([`be6114e`](https://github.com/Byron/gitoxide/commit/be6114e7c4ac48467db6acb2180b443dc9f59f32))
+ - Merge branch 'main' into pathspec ([`7b61506`](https://github.com/Byron/gitoxide/commit/7b615060712565f515515e35a3e8346278ad770c))
+ - provide additional explanation about when to use `open::Options::with()` ([`270242c`](https://github.com/Byron/gitoxide/commit/270242c707bd086b7746ee45b55791587f1484b1))
+ - make fmt ([`47724c0`](https://github.com/Byron/gitoxide/commit/47724c0edb382c036a3fc99884becfd2b0740d4b))
+ - Merge branch 'kianmeng-fix-typos' ([`4e7b343`](https://github.com/Byron/gitoxide/commit/4e7b34349c0a01ad8686bbb4eb987e9338259d9c))
+ - Fix typos ([`e9fcb70`](https://github.com/Byron/gitoxide/commit/e9fcb70e429edb2974afa3f58d181f3ef14c3da3))
+
+
+## 0.20.0 (2022-07-22)
+
+### New Features
+
+ - respect `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.
+ - permissions for configuration.
+ It provides fine-grained control over what sources to load.
+ - `git-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.
+ - repository now initializes global configuration files and resolves includes
+ - resolve includes in local repository configuration
+ - `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.
+ - Use `git-config` to write config file on initialization, including `logallrefupdates` and `precomposeunicode`.
+ - respect `core.logallrefupdates` configuration setting.
+
+### Changed (BREAKING)
+
+ - 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.
+
+### New Features (BREAKING)
+
+ - Support for `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.
+ - change mostly internal uses of [u8] to BString/BStr
+
+### Commit Statistics
+
+
+
+ - 109 commits contributed to the release over the course of 38 calendar days.
+ - 39 days passed between releases.
+ - 16 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 2 unique issues were worked on: [#331](https://github.com/Byron/gitoxide/issues/331), [#427](https://github.com/Byron/gitoxide/issues/427)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 7 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#331](https://github.com/Byron/gitoxide/issues/331)**
+ - Make lossy-configuration configurable ([`b0e4da6`](https://github.com/Byron/gitoxide/commit/b0e4da621114d188a73b9f40757f59564da3c079))
+ - tests for author/committer/user ([`6d2e53c`](https://github.com/Byron/gitoxide/commit/6d2e53c32145770e8314f0879d6d769090667f90))
+ - refactor ([`4dc6594`](https://github.com/Byron/gitoxide/commit/4dc6594686478d9d6cd09e2ba02048624c3577e7))
+ - default user signature now with 'now' time, like advertised. ([`ad40202`](https://github.com/Byron/gitoxide/commit/ad4020224114127612eaf5d1e732baf81818812d))
+ - Make `SignatureRef<'_>` mandatory for editing reference changelogs. ([`68f4bc2`](https://github.com/Byron/gitoxide/commit/68f4bc2570d455c762da7e3d675b9b507cec69bb))
+ - `Repository::committer()` now returns an `Option`, see `::committer_or_default()` for a method that doesn't. ([`f932cea`](https://github.com/Byron/gitoxide/commit/f932cea68ece997f711add3368db53aeb8cdf064))
+ - first sketch of using configuration and environment variables for author/committer ([`330d0a1`](https://github.com/Byron/gitoxide/commit/330d0a19d54aabac868b76ef6281fffdbdcde53c))
+ - remove local-time-support feature toggle. ([`89a41bf`](https://github.com/Byron/gitoxide/commit/89a41bf2b37db29b9983b4e5492cfd67ed490b23))
+ - a first sketch on how identity management could look like. ([`780f14f`](https://github.com/Byron/gitoxide/commit/780f14f5c270802e51cf039639c2fbdb5ac5a85e))
+ - refactor ([`4f61312`](https://github.com/Byron/gitoxide/commit/4f613120f9f761b86fc7eb16227d08fc5b9828d8))
+ - respect `safe.directory`. ([`1b765ec`](https://github.com/Byron/gitoxide/commit/1b765ec6ae70d1f4cc5a885b3c68d6f3335ba827))
+ - permissions for configuration. ([`840d9a3`](https://github.com/Byron/gitoxide/commit/840d9a3018d11146bb8e80fc92693c65eb534d91))
+ - `git-config` is now accessible in `git-repository::config`. ([`6570808`](https://github.com/Byron/gitoxide/commit/657080829867d9dcb0c9b9cb6c1c8126c4df3783))
+ - `gix config` lists all entries of all configuration files git considers. ([`d99453e`](https://github.com/Byron/gitoxide/commit/d99453ebeb970ed493be236def299d1e82b01f83))
+ - adapt to changes in `git-config` ([`b52b540`](https://github.com/Byron/gitoxide/commit/b52b5407638adef2216aeb4215a7c0437d6ee2d5))
+ - adapt to changes in `git-config` ([`3c57344`](https://github.com/Byron/gitoxide/commit/3c57344325ad20ae891824cd8791d2d17f4148e5))
+ - adjust to changes in `git-config` for greater efficiency ([`e9afede`](https://github.com/Byron/gitoxide/commit/e9afedeebafb70d81a8fa2e6dc320b387e6ee926))
+ - adapt to changes in git-config ([`14ba883`](https://github.com/Byron/gitoxide/commit/14ba8834b8738817d2bfb0ca66d1fb86fc8f3075))
+ - refactor ([`95ed219`](https://github.com/Byron/gitoxide/commit/95ed219c5f414b6fa96d80eacf297f24d823a4fe))
+ - repository now initializes global configuration files and resolves includes ([`ebedd03`](https://github.com/Byron/gitoxide/commit/ebedd03e119aa5d46da07e577bfccad621eaecb5))
+ - adapt to changes in git-config ([`627a0e1`](https://github.com/Byron/gitoxide/commit/627a0e1e12e15a060a70d880ffdfb05f1f7db36c))
+ - only a select few early config attributes must be repo-local ([`be0971c`](https://github.com/Byron/gitoxide/commit/be0971c5191f7866063ebcc0407331e683cf7d68))
+ - resolve includes in local repository configuration ([`de8572f`](https://github.com/Byron/gitoxide/commit/de8572ff2ced9422832e1ba433955c33f0994675))
+ - Adjust to changes in `git-config` ([`30cbe29`](https://github.com/Byron/gitoxide/commit/30cbe299860d84b5aeffced54839529dc068a8c7))
+ - solve cycle between config and ref-store ([`1679d56`](https://github.com/Byron/gitoxide/commit/1679d5684cec852b39a0d51d5001fbcecafc6748))
+ - adapt to changes in `git-config` ([`7f41f1e`](https://github.com/Byron/gitoxide/commit/7f41f1e267c9cbf87061821dd2f0edb6b0984226))
+ - prepare for resolving a complete config… ([`9be1dd6`](https://github.com/Byron/gitoxide/commit/9be1dd6f7cdb9aea7c85df896e370b3c40f5e4ec))
+ - Allow to configure a different filter for configuration section. ([`e512ab0`](https://github.com/Byron/gitoxide/commit/e512ab09477629957e469719f05e7de65955f3db))
+ - adjust to changes in `git-config` ([`ca89d0d`](https://github.com/Byron/gitoxide/commit/ca89d0d4785ec4d66a0a4316fbc74be63dcc0f48))
+ - refactor ([`5723730`](https://github.com/Byron/gitoxide/commit/57237303d9ae8a746c64d05ecedf3d43a0d041f6))
+ - load configuration with trust information, needs cleanup ([`d8e41e2`](https://github.com/Byron/gitoxide/commit/d8e41e20de741c3d4701d862033cf50582a0d015))
+ - Add remaining config access, and an escape hatch. ([`81715ff`](https://github.com/Byron/gitoxide/commit/81715ffca33e40cb6e37fff25baa68fca70c4844))
+ - `config::Snapshot::trusted_path()` to obtain trustworthy paths. ([`d5a48b8`](https://github.com/Byron/gitoxide/commit/d5a48b82230b047434610550aacd2dc741b4b5f0))
+ - `Debug` for `config::Snapshot`. ([`2c21956`](https://github.com/Byron/gitoxide/commit/2c2195640818319795a93e73bed79174fa358f55))
+ - `Repository::config_snapshot()` to access configuration values. ([`5f9bfa8`](https://github.com/Byron/gitoxide/commit/5f9bfa89ceb61f484be80575b0379bbf9d7a36b3))
+ - adapt to changes in `git-config` ([`c9423db`](https://github.com/Byron/gitoxide/commit/c9423db5381064296d22f48b532f29d3e8162ce9))
+ - Support for `lossy` load mode. ([`d003c0f`](https://github.com/Byron/gitoxide/commit/d003c0f139d61e3bd998a0283a9c7af25a60db02))
+ - Associate `file::Metadata` with each `File`. ([`6f4eea9`](https://github.com/Byron/gitoxide/commit/6f4eea936d64fb9827277c160f989168e7b1dba2))
+ - adjust to changes in `git-config` ([`81e63cc`](https://github.com/Byron/gitoxide/commit/81e63cc3590301ca32c1172b358ffb45a13b6a8f))
+ - Use `git-config` to write config file on initialization, including `logallrefupdates` and `precomposeunicode`. ([`7f67b23`](https://github.com/Byron/gitoxide/commit/7f67b23b9462b805591b1fe5a8406f8d7404f372))
+ - respect `core.logallrefupdates` configuration setting. ([`e263e13`](https://github.com/Byron/gitoxide/commit/e263e13d312e41aa1481d104fa79ede509fbe1c5))
+ - adapt to breaking changes in `git-config` ([`a02d575`](https://github.com/Byron/gitoxide/commit/a02d5759c14eb1d42fe24e61afc32a4cd463d1b7))
+ - adapt to changes in `git-config` ([`858dc8b`](https://github.com/Byron/gitoxide/commit/858dc8b1b721ce5a45a76d9a97935cb0daf61e1a))
+ - adjustments due to breaking changes in `git-config` ([`924f148`](https://github.com/Byron/gitoxide/commit/924f14879bd14ca1ff13fdd6ccafe43d6de01b68))
+ - adjustments for breaking changes in `git-config` ([`d3841ee`](https://github.com/Byron/gitoxide/commit/d3841ee752e426bf58130cde1e4e40215ccb8f33))
+ - adjust to changes in `git-config` ([`c52cb95`](https://github.com/Byron/gitoxide/commit/c52cb958f85b533e791ec6b38166a9d819f12dd4))
+ - adjustments due to breaking changes in `git-config` ([`07bf647`](https://github.com/Byron/gitoxide/commit/07bf647c788afbe5a595ed3091744459e3623f13))
+ - adapt to changes in `git-config` ([`363a826`](https://github.com/Byron/gitoxide/commit/363a826144ad59518b5c1a3dbbc82d04e4fc062d))
+ - adjust to changes in `git-config` ([`920d56e`](https://github.com/Byron/gitoxide/commit/920d56e4f5141eeb536956cdc5fac042ddee3525))
+ - adjustments required due to changed in `git-config` ([`41bfd3b`](https://github.com/Byron/gitoxide/commit/41bfd3b4122e37370d268608b60cb00a671a8879))
+ - adjust to breaking changes in `git-config` ([`5b66202`](https://github.com/Byron/gitoxide/commit/5b66202d96bf664ed84755afc3ec49c301ecd62c))
+ - adjustments due to breaking changes in `git_path` ([`4420ae9`](https://github.com/Byron/gitoxide/commit/4420ae932d5b20a9662a6d36353a27111b5cd672))
+ * **[#427](https://github.com/Byron/gitoxide/issues/427)**
+ - adjustments to handle changes in git-odb ([`23b7e4a`](https://github.com/Byron/gitoxide/commit/23b7e4ad0aab31cf029447b8f2866e71e9cb45a7))
+ - refactor ([`8b79775`](https://github.com/Byron/gitoxide/commit/8b79775a9e5ea949c554f16222dbe1308bd2ef37))
+ - refactor ([`aa2b933`](https://github.com/Byron/gitoxide/commit/aa2b9337c0c5db7ae7cdc5cba102df8ec61df3ed))
+ - All remaining tests for ref and prefix disambiguation ([`dcd0dca`](https://github.com/Byron/gitoxide/commit/dcd0dca581ba9fc5e30cf52c267412fda03a1e5f))
+ - Implement ref + object prefix disambiguation similar to git ([`5995e44`](https://github.com/Byron/gitoxide/commit/5995e443cb96307b4614ee4d484d4610e1d4c87e))
+ - Sketch how options for `from_bytes()` can look like ([`0345b08`](https://github.com/Byron/gitoxide/commit/0345b08d985c46b30334e5808b32307d0482f191))
+ - Finish ambiguous commit testing ([`a018fc6`](https://github.com/Byron/gitoxide/commit/a018fc6e8be458b63108af533c3fe70188a1f80f))
+ - Support for per-repo baseline; more ambiguity tests ([`661283a`](https://github.com/Byron/gitoxide/commit/661283accd9e1b8fbd6234a2370652de17e914e8))
+ - Add commit history with colliding prefixes ([`a1a6b13`](https://github.com/Byron/gitoxide/commit/a1a6b13411e42502174681fe7b2e23bbd31522ac))
+ - improve describe hinting to allow hinting with describe-anchors as well ([`d993992`](https://github.com/Byron/gitoxide/commit/d99399287966ba2adf143222c3bd9ccdb4d135f9))
+ - support disambiguation of describe prefixes ([`637dcb0`](https://github.com/Byron/gitoxide/commit/637dcb09771c8df83436dc48d6a72804b400c5e1))
+ - Many more complex disambiguation tests ([`5fdf693`](https://github.com/Byron/gitoxide/commit/5fdf693b342700e8c7bf4690d465280749388b81))
+ - Add test for blob access through tree ([`0955ff2`](https://github.com/Byron/gitoxide/commit/0955ff27c4883fb087884c3c8f4a8025487c07fb))
+ - Add disambiguation test that we can't handle ([`5278cbc`](https://github.com/Byron/gitoxide/commit/5278cbc9b91ce01761a96a6962564a92daa77b7f))
+ - Add test which shows that we don't allow disambiguation of by type yet ([`9d2e1eb`](https://github.com/Byron/gitoxide/commit/9d2e1eb3defc3ddd7ade7fe2bdd26d8a21afe55f))
+ - test for broken zlib sream when rev-parsing an object ([`7c8e3f2`](https://github.com/Byron/gitoxide/commit/7c8e3f237860c8ab975f42cbd02172e055137138))
+ - Turn on performance mode for sha-1 computation ([`44371a1`](https://github.com/Byron/gitoxide/commit/44371a10f464f32db346aa6b8309e983cfa20933))
+ - Allow `RevSpec` to be serialized and deserialized with `serde`. ([`0660588`](https://github.com/Byron/gitoxide/commit/0660588b64f8d68ffa2f585ad49b384e86e3caec))
+ - First implementation of object peeling ([`b1ef03a`](https://github.com/Byron/gitoxide/commit/b1ef03abc8342adb4a0b67d7c86136720ee600e2))
+ - validate actual hash in baseline as well ([`779c6a4`](https://github.com/Byron/gitoxide/commit/779c6a43b8a3c888b3eb012ece014880b5fccc41))
+ - the first successful test validating the actual revspec ([`2ae7534`](https://github.com/Byron/gitoxide/commit/2ae75346d62b926e414e48c574f026107e2bbe24))
+ - Actually compare against the git baseline ([`d957995`](https://github.com/Byron/gitoxide/commit/d9579959438470b53af3e0de534c671f741faac1))
+ - record a git baseline and prepare for reading it ([`5a3f6f5`](https://github.com/Byron/gitoxide/commit/5a3f6f5ab1ec9f89967deeac7c521ecf72bec84f))
+ - The first successful disambiguation test ([`6bc6337`](https://github.com/Byron/gitoxide/commit/6bc6337037708243346afeee07ad24a02565894b))
+ - A sketch for the RevSpec access API ([`91ac1e2`](https://github.com/Byron/gitoxide/commit/91ac1e289d1d44577de031aac0a469b3aee621a7))
+ - refactor ([`7258326`](https://github.com/Byron/gitoxide/commit/7258326b6ddf8f40c8e3c59cd1b416d213e186d6))
+ * **Uncategorized**
+ - Release git-worktree v0.4.0, git-repository v0.20.0, git-commitgraph v0.8.0, gitoxide-core v0.15.0, gitoxide v0.13.0 ([`d4df661`](https://github.com/Byron/gitoxide/commit/d4df661dbf60dad75d07002ef9979cabe8a86935))
+ - Release git-config v0.6.0, git-credentials v0.3.0, git-diff v0.17.0, git-discover v0.3.0, git-index v0.4.0, git-mailmap v0.3.0, git-traverse v0.16.0, git-pack v0.21.0, git-odb v0.31.0, git-url v0.7.0, git-transport v0.19.0, git-protocol v0.18.0, git-revision v0.3.0, git-worktree v0.4.0, git-repository v0.20.0, git-commitgraph v0.8.0, gitoxide-core v0.15.0, gitoxide v0.13.0 ([`aa639d8`](https://github.com/Byron/gitoxide/commit/aa639d8c43f3098cc4a5b50614c5ae94a8156928))
+ - Release git-hash v0.9.6, git-features v0.22.0, git-date v0.0.2, git-actor v0.11.0, git-glob v0.3.1, git-path v0.4.0, git-attributes v0.3.0, git-tempfile v2.0.2, git-object v0.20.0, git-ref v0.15.0, git-sec v0.3.0, git-config v0.6.0, git-credentials v0.3.0, git-diff v0.17.0, git-discover v0.3.0, git-index v0.4.0, git-mailmap v0.3.0, git-traverse v0.16.0, git-pack v0.21.0, git-odb v0.31.0, git-url v0.7.0, git-transport v0.19.0, git-protocol v0.18.0, git-revision v0.3.0, git-worktree v0.4.0, git-repository v0.20.0, git-commitgraph v0.8.0, gitoxide-core v0.15.0, gitoxide v0.13.0, safety bump 22 crates ([`4737b1e`](https://github.com/Byron/gitoxide/commit/4737b1eea1d4c9a8d5a69fb63ecac5aa5d378ae5))
+ - prepare changelog prior to release ([`3c50625`](https://github.com/Byron/gitoxide/commit/3c50625fa51350ec885b0f38ec9e92f9444df0f9))
+ - Merge branch 'gix-repo-config' ([`afecb63`](https://github.com/Byron/gitoxide/commit/afecb6337dcf0fc51d5c74747c3c60fa06ae6346))
+ - Merge branch 'config-cascade' ([`f144eaf`](https://github.com/Byron/gitoxide/commit/f144eaf5863ae5cac63103f0db51c35fcf03a948))
+ - thanks clippy ([`fddc720`](https://github.com/Byron/gitoxide/commit/fddc7206476423a6964d61acd060305572ecd02b))
+ - thanks clippy ([`0346aaa`](https://github.com/Byron/gitoxide/commit/0346aaaeccfe18a443410652cada7b14eb34d8b9))
+ - thanks clippy ([`b630543`](https://github.com/Byron/gitoxide/commit/b630543669af5289508ce066bd026e2b9a9d5044))
+ - Merge branch 'config-sec-access' ([`b420eba`](https://github.com/Byron/gitoxide/commit/b420eba520ecc31fb2d07c939fa64f1a7be5737e))
+ - thanks clippy ([`d9eb34c`](https://github.com/Byron/gitoxide/commit/d9eb34cad7a69b56f10eec5b88b86ebd6a9a74af))
+ - Merge branch 'config-reduce-events' ([`fd046f4`](https://github.com/Byron/gitoxide/commit/fd046f463a9200d0d8f1a5c3e5f452792f015bd5))
+ - Merge branch 'config-metadata' ([`453e9bc`](https://github.com/Byron/gitoxide/commit/453e9bca8f4af12e49222c7e3a46d6222580c7b2))
+ - Merge pull request #1 from Byron/main ([`085e76b`](https://github.com/Byron/gitoxide/commit/085e76b121291ed9bd324139105d2bd4117bedf8))
+ - avoid extra copies of paths using `PathCursor` tool during repo init ([`5771721`](https://github.com/Byron/gitoxide/commit/5771721ff5f86dd808d9961126c9c4a61867507c))
+ - Merge branch 'config-comfort' ([`84b98d9`](https://github.com/Byron/gitoxide/commit/84b98d94177ceaf931aaa521e44eca0fa484d2d3))
+ - Merge branch 'config-output' ([`20e188f`](https://github.com/Byron/gitoxide/commit/20e188ff3b06ac7e866956ea5216b00dcffd1307))
+ - make fmt ([`0700b09`](https://github.com/Byron/gitoxide/commit/0700b09d6828849fa2470df89af1f75a67bfb27d))
+ - change mostily internal uses of [u8] to BString/BStr ([`311d4b4`](https://github.com/Byron/gitoxide/commit/311d4b447daf8d4364670382a20901468748d34d))
+ - Merge branch 'main' into pathspec ([`89ea12b`](https://github.com/Byron/gitoxide/commit/89ea12b558bcc056b892193ee8fb44b8664b5da4))
+ - Merge branch 'main' into cont_include_if ([`daa71c3`](https://github.com/Byron/gitoxide/commit/daa71c3b753c6d76a3d652c29237906b3e28728f))
+ - thanks clippy ([`e1003d5`](https://github.com/Byron/gitoxide/commit/e1003d5fdee5d4439c0cf0286c67dec9b5e34f53))
+ - Merge branch 'main' into cont_include_if ([`0e9df36`](https://github.com/Byron/gitoxide/commit/0e9df364c4cddf006b1de18b8d167319b7cc1186))
+ - Use git_path::realpath in all places that allow it right now ([`229dc91`](https://github.com/Byron/gitoxide/commit/229dc917fc7d9241b85e5818260a6fbdd3a5daaa))
+ - fix build warnings ([`84109f5`](https://github.com/Byron/gitoxide/commit/84109f54877d045f8ccc7a380c012802708c2f1e))
+ - Make a note to be sure we use the home-dir correctly in git-repository; avoid `dirs` crate ([`0e8cf19`](https://github.com/Byron/gitoxide/commit/0e8cf19d7f742f9400afa4863d302ba18a452adc))
+ - adjust to changes in git-config ([`7a1678d`](https://github.com/Byron/gitoxide/commit/7a1678d8da0c361e0a0cc4380a04ebfb3ce5035d))
+ - Merge branch 'main' into cont_include_if ([`41ea8ba`](https://github.com/Byron/gitoxide/commit/41ea8ba78e74f5c988148367386a1f4f304cb951))
+ - Release git-path v0.3.0, safety bump 14 crates ([`400c9be`](https://github.com/Byron/gitoxide/commit/400c9bec49e4ec5351dc9357b246e7677a63ea35))
+ - thanks clippy ([`e898bfa`](https://github.com/Byron/gitoxide/commit/e898bfaf00f7c0eeb5cf9cb0d2cde8c1911ba497))
+ - thanks clippy ([`59c4b10`](https://github.com/Byron/gitoxide/commit/59c4b10a16da5119efe4bf7f6fa4997cf2ec8136))
+
+
+## 0.19.0 (2022-06-13)
+
+### New Features (BREAKING)
+
+ - Make `realpath()` easier to use by introducing `realpath_opt()`.
+ That way there is consistency about how many symlinks to follow.
+
+### Commit Statistics
+
+
+
+ - 12 commits contributed to the release over the course of 18 calendar days.
+ - 20 days passed between releases.
+ - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-worktree v0.3.0, git-repository v0.19.0 ([`0d8e856`](https://github.com/Byron/gitoxide/commit/0d8e8566dc5c6955487d67e235f86fbc75a3a88a))
+ - Release git-date v0.0.1, git-hash v0.9.5, git-features v0.21.1, git-actor v0.10.1, git-path v0.2.0, git-attributes v0.2.0, git-ref v0.14.0, git-sec v0.2.0, git-config v0.5.0, git-credentials v0.2.0, git-discover v0.2.0, git-pack v0.20.0, git-odb v0.30.0, git-url v0.6.0, git-transport v0.18.0, git-protocol v0.17.0, git-revision v0.2.1, git-worktree v0.3.0, git-repository v0.19.0, safety bump 13 crates ([`a417177`](https://github.com/Byron/gitoxide/commit/a41717712578f590f04a33d27adaa63171f25267))
+ - update changelogs prior to release ([`bb424f5`](https://github.com/Byron/gitoxide/commit/bb424f51068b8a8e762696890a55ab48900ab980))
+ - make fmt ([`c665aef`](https://github.com/Byron/gitoxide/commit/c665aef4270c5ee54da89ee015cc0affd6337608))
+ - Merge branch 'main' into svetli-n-cont_include_if ([`315c87e`](https://github.com/Byron/gitoxide/commit/315c87e18c6cac0fafa7b4e59fdd3c076a58a45a))
+ - fix docs ([`daef221`](https://github.com/Byron/gitoxide/commit/daef2215cc6c4fddded5229951e8ac71c395468d))
+ - refactor ([`b27a8c2`](https://github.com/Byron/gitoxide/commit/b27a8c243cdc14730478c2a94cafdc8ccf5c60d3))
+ - refactor ([`06e96a4`](https://github.com/Byron/gitoxide/commit/06e96a435d820a1ef1e567bf93e7b9ca5fa74829))
+ - Make `realpath()` easier to use by introducing `realpath_opt()`. ([`266d437`](https://github.com/Byron/gitoxide/commit/266d4379e9132fd7dd21e6c8fccb36e125069d6e))
+ - Refact. ([`a342e53`](https://github.com/Byron/gitoxide/commit/a342e53dac58cea1787a94eaa1a9d24fb1389df2))
+ - Add discovery opt env-overrides & env discovery helpers ([`e521d39`](https://github.com/Byron/gitoxide/commit/e521d39e1b0f4849280bae1527bf28977eec5093))
+ - Merge branch 'main' into SidneyDouw-pathspec ([`a22b1d8`](https://github.com/Byron/gitoxide/commit/a22b1d88a21311d44509018729c3ef1936cf052a))
+
+
+## 0.18.1 (2022-05-23)
+
+### New Features
+
+ - `Debug` for `Reference`.
+
+### Commit Statistics
+
+
+
+ - 2 commits contributed to the release.
+ - 1 day passed between releases.
+ - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-path v0.1.3, git-discover v0.1.2, git-repository v0.18.1, cargo-smart-release v0.10.1 ([`b7399cc`](https://github.com/Byron/gitoxide/commit/b7399cc44ee419355a649a7b0ba7b352cd48b400))
+ - `Debug` for `Reference`. ([`c78baec`](https://github.com/Byron/gitoxide/commit/c78baecbb37fd92a0a86231810c9e35e9a4c21cd))
+
+
+## 0.18.0 (2022-05-21)
+
+
+
+### Other
+
+ - add ceiling_dirs option to upwards discovery
+
+### Commit Statistics
+
+
+
+ - 8 commits contributed to the release over the course of 2 calendar days.
+ - 3 days passed between releases.
+ - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-path v0.1.2, git-sec v0.1.1, git-config v0.4.0, git-discover v0.1.1, git-pack v0.19.1, git-repository v0.18.0, cargo-smart-release v0.10.0, safety bump 2 crates ([`ceb6dff`](https://github.com/Byron/gitoxide/commit/ceb6dff13362a2b4318a551893217c1d11643b9f))
+ - Merge branch 'svetli-n-git_includeif' ([`cf24fbe`](https://github.com/Byron/gitoxide/commit/cf24fbe4b62d67b06138243d470dcc1805ebd55b))
+ - refactor ([`07e0f5e`](https://github.com/Byron/gitoxide/commit/07e0f5e91b3c41614b9182cf9716120fe41ddf40))
+ - Merge branch 'davidkna-discover-ceiling' ([`66944ba`](https://github.com/Byron/gitoxide/commit/66944ba986114ece2d3b31440c721d0e84b4f267))
+ - Merge branch 'main' into git_includeif ([`229d938`](https://github.com/Byron/gitoxide/commit/229d9383bef8844111d2bf3c406a2ea570109c8b))
+ - add ceiling_dirs option to upwards discovery ([`e63e722`](https://github.com/Byron/gitoxide/commit/e63e722791a7795cd99048bed834459595c60abc))
+ - Fix markdown rendering issue ([`e4aaa44`](https://github.com/Byron/gitoxide/commit/e4aaa44f6d38008111640da72375f9c0578f1507))
+ - Merge branch 'main' into git_includeif ([`598c853`](https://github.com/Byron/gitoxide/commit/598c853087fcf8f77299aa5b9803bcec705c0cd0))
+
+
+## 0.17.0 (2022-05-18)
+
+
+
+
+
+### New Features
+
+ - Add `Repository::head_name()`.
+ A convenient way to obtain the name of a head, if not detached.
+
+### Bug Fixes
+
+ - `Commit::describe()` now returns annotated tags before lightweight ones and prefers more recent ones as well
+ - Support for in truncated history in git-describe
+ This allows `describe()` to work on shallow clones.
+
+### Other
+
+ - 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
+
+### Changed (BREAKING)
+
+ - 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.
+
+### New Features (BREAKING)
+
+ - use `git-credentials` in `git-protocol`
+
+### Commit Statistics
+
+
+
+ - 141 commits contributed to the release over the course of 42 calendar days.
+ - 43 days passed between releases.
+ - 10 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 10 unique issues were worked on: [#298](https://github.com/Byron/gitoxide/issues/298), [#301](https://github.com/Byron/gitoxide/issues/301), [#331](https://github.com/Byron/gitoxide/issues/331), [#364](https://github.com/Byron/gitoxide/issues/364), [#382](https://github.com/Byron/gitoxide/issues/382), [#383](https://github.com/Byron/gitoxide/issues/383), [#384](https://github.com/Byron/gitoxide/issues/384), [#386](https://github.com/Byron/gitoxide/issues/386), [#389](https://github.com/Byron/gitoxide/issues/389), [#393](https://github.com/Byron/gitoxide/issues/393)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 4 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#298](https://github.com/Byron/gitoxide/issues/298)**
+ - upgrade dependencies ([`b039d39`](https://github.com/Byron/gitoxide/commit/b039d39613bb14d49670c4d8b586f76ffb420d03))
+ - adjust msrv to the one required by `windows` crates ([`0f141ca`](https://github.com/Byron/gitoxide/commit/0f141ca5f29ea3f75372a8d030fd8ecfa4f72d10))
+ - Support for in truncated history in git-describe ([`99365f2`](https://github.com/Byron/gitoxide/commit/99365f221065ebc315ac80940ad72cae253743bc))
+ - fix compile warnings ([`9a06fe1`](https://github.com/Byron/gitoxide/commit/9a06fe1b900c2fb9b4466251224a61e26d637271))
+ * **[#301](https://github.com/Byron/gitoxide/issues/301)**
+ - update changelogs prior to release ([`84cb256`](https://github.com/Byron/gitoxide/commit/84cb25614a5fcddff297c1713eba4efbb6ff1596))
+ - adapt to changes in git-discover ([`bd281b8`](https://github.com/Byron/gitoxide/commit/bd281b80b2d01088a97bbca96ff1401ae06a70d1))
+ - adjusts to changes in git-ref ([`b362fb5`](https://github.com/Byron/gitoxide/commit/b362fb594546400e6c42688103df438954df7eeb))
+ - Avoid using `Cow` at all in favor of a simple `&PartialNameref` ([`1bc9a87`](https://github.com/Byron/gitoxide/commit/1bc9a875d2b09b906f40db9e2c031c99e4fd9928))
+ - See what it means to use `Cow` ([`2ae129a`](https://github.com/Byron/gitoxide/commit/2ae129ad6183f36179031ea905d8974705e70da8))
+ - adapt to changes in git-ref ([`21109ca`](https://github.com/Byron/gitoxide/commit/21109ca9ab21df0ab45f3be552e83114817e98d0))
+ - adapt to changes in git-ref ([`49b0e89`](https://github.com/Byron/gitoxide/commit/49b0e89440ffcc5fa5dc66be45112f9c1f7d9244))
+ - Instantiate worktree aware versions of file stores ([`0b670dd`](https://github.com/Byron/gitoxide/commit/0b670ddf97b316f0a6c332d999265a3bda7fcdab))
+ - adjust to changes in git-ref ([`3299606`](https://github.com/Byron/gitoxide/commit/32996060c7405be787b8f5b91041e5d6dcd9ffc9))
+ - Adjust permissions mildly to make a little more sense ([`9c05629`](https://github.com/Byron/gitoxide/commit/9c05629d1ca1ad779f1e07f3a3be102f049874df))
+ - rely on `absolutize_components()` ([`e844006`](https://github.com/Byron/gitoxide/commit/e84400660dad6281fe3869ad649470f2adf31979))
+ - brutally fix path handling of common dirs ([`e120232`](https://github.com/Byron/gitoxide/commit/e120232252875cd3fdacb9b7df90c3db58e7e24e))
+ - Assure 'commondir' is actually resolved and not kept relative ([`3de63ff`](https://github.com/Byron/gitoxide/commit/3de63ff789e518cf07a8e1f02c385ae4ce857615))
+ - first working worktree tests for git-repository ([`508cdd2`](https://github.com/Byron/gitoxide/commit/508cdd213ec48aec879ee4ddc3b76b6c851dd3c7))
+ - refactor ([`6d9b2d9`](https://github.com/Byron/gitoxide/commit/6d9b2d9e7a32c825848a1df1fdec2e53b8705662))
+ - A new version of opening a repository while accepting environment overrides ([`9d73424`](https://github.com/Byron/gitoxide/commit/9d7342429d2c4d7e5ef98a51a47d5caaa11297e0))
+ - basic parsing for git-dir files ([`e11c677`](https://github.com/Byron/gitoxide/commit/e11c67770c301942188f204dbb2cd61880087959))
+ - prepare for refactoring the overrides code ([`238e1b0`](https://github.com/Byron/gitoxide/commit/238e1b013d3f4d67b6384c6123c5ab6ea9f236fa))
+ - fix build ([`d7dac11`](https://github.com/Byron/gitoxide/commit/d7dac11be455ee99299a8d7dfd412853f0d709f3))
+ - Adjust to `git-discovery` to support linked worktrees in `Kind` type ([`2a99b7d`](https://github.com/Byron/gitoxide/commit/2a99b7d32374b4863dee0a0cdf55711686c94001))
+ - refactor `repositoryKind` adjusted to handle linked worktrees ([`84677cb`](https://github.com/Byron/gitoxide/commit/84677cb09634e1d18ce20850bb7c6c9d63a13818))
+ - Handle potential issue with overrides using documentation ([`feb4eb2`](https://github.com/Byron/gitoxide/commit/feb4eb26b33a5d3824fe98259193bed7961f6fef))
+ - refactor how environment overrides work ([`99d98ec`](https://github.com/Byron/gitoxide/commit/99d98ece1688880f3b0b35bc4f7ab7ddd9289f1f))
+ - fix docs ([`3366696`](https://github.com/Byron/gitoxide/commit/3366696af9ec58ebb43ed7d4dde9d2c79ca71d3d))
+ - adjust to changes in git-discover ([`3271979`](https://github.com/Byron/gitoxide/commit/3271979f86bd5fb009a946cb06cd4ce8ea03119c))
+ - refactor; add worktree id and determine main status of worktree ([`54be8e3`](https://github.com/Byron/gitoxide/commit/54be8e3da14b92f0c2dad32a969a651ad9ba9eec))
+ - properly handle common-dir on repo open ([`de0cc1b`](https://github.com/Byron/gitoxide/commit/de0cc1bd1a1ccb26fa4fc5f7d8aedb422226b4a1))
+ - first step towards getting repos from worktree proxies ([`60d0433`](https://github.com/Byron/gitoxide/commit/60d0433d8f6dda1e3556a73f85edff1c04d46dff))
+ - refactor ([`7b5fe1d`](https://github.com/Byron/gitoxide/commit/7b5fe1de5332ca8a85741c7c0872130b5ebd31f2))
+ - Keep instantiation options in Repository for worktrees ([`d25c938`](https://github.com/Byron/gitoxide/commit/d25c938e01e2fc8e9dd44724ea5017997d38e945))
+ - refactor ([`71dd056`](https://github.com/Byron/gitoxide/commit/71dd0566cbfa9cbda148145efc78f76557663ae7))
+ - obtain the base() path of a private worktree ([`f77d8c8`](https://github.com/Byron/gitoxide/commit/f77d8c8a60f1807f77aafd7b1d71334e9710e2e8))
+ - fix docs ([`1e3acd0`](https://github.com/Byron/gitoxide/commit/1e3acd08b9df9fe0cc36bb6a4d4bac57c365443d))
+ - use `git-discover` crate ([`f5f9a0d`](https://github.com/Byron/gitoxide/commit/f5f9a0d609316b2a64ee665f47faade7d8277315))
+ - refactor ([`00a988e`](https://github.com/Byron/gitoxide/commit/00a988e3c2c964447f675164a6126bf6cb470c6b))
+ - Remove `worktree()` platform in favor of the current worktree ([`f2a2c55`](https://github.com/Byron/gitoxide/commit/f2a2c5581eb3dde5ef7352439b564d89e9f76461))
+ - basic worktree iteration ([`992a6ce`](https://github.com/Byron/gitoxide/commit/992a6ce154b97520b0c4679d6c50f4e3cc6e3091))
+ - maybe fix failing test on windows ([`8f69af2`](https://github.com/Byron/gitoxide/commit/8f69af2eb48f01e2bbcf7b6483ae06f9b8dea61b))
+ - assure worktree test repositories are regenerated ([`2eed703`](https://github.com/Byron/gitoxide/commit/2eed70392fd06f31f08acf2caa94437e967c7a1f))
+ - Learn to read the common dir ([`e07c453`](https://github.com/Byron/gitoxide/commit/e07c453ea20e29994520dcd6346ac0a28f585813))
+ - A first stab at more control over which worktrees and git-dirs to use ([`83ac263`](https://github.com/Byron/gitoxide/commit/83ac2638dd52e9da9a0dc8a62b4c9669c8eec372))
+ - devise a worktree API that can work even if a valid worktree isn't present ([`8d067d1`](https://github.com/Byron/gitoxide/commit/8d067d113acfaf9a3e28ba1a829b07303a80e992))
+ - reorganize types to properly represent worktrees in their various 'states' ([`b46bff5`](https://github.com/Byron/gitoxide/commit/b46bff58e40bb9805af7ee7f96272f0dc19c0ac7))
+ - parse baseline worktree listing ([`aabe8b2`](https://github.com/Byron/gitoxide/commit/aabe8b2edc0753f125dcdea71dd44908d1826a21))
+ - A first test to run against a bare and non-bare repos with worktrees ([`70164d7`](https://github.com/Byron/gitoxide/commit/70164d7252f57bd4b645d8ca694e7458ce4d1a0f))
+ - Don't have expectations on the path, rather deal with it gracefully ([`3a41d5c`](https://github.com/Byron/gitoxide/commit/3a41d5cd7a6eb9f21c3461d499af4399b8f6e5be))
+ - REMOVE ME: debug info for failing CI test ([`b0b3df4`](https://github.com/Byron/gitoxide/commit/b0b3df4e7fa93dba7f03003160f38036cbb6d80f))
+ - see if this fixes the CI test issue on windows ([`7697f51`](https://github.com/Byron/gitoxide/commit/7697f517ec7c39a15076b1190056882812fe6a12))
+ - :discover()` now returns the shortest path. ([`e4f4c4b`](https://github.com/Byron/gitoxide/commit/e4f4c4b2c75a63a40a174e3a006ea64ef8d78809))
+ - Basic prefix support as well the first working version of `exclude query` ([`9cb8385`](https://github.com/Byron/gitoxide/commit/9cb83859f9bb76f38ab5bbd0ae6d6f20a691e9e1))
+ - fix build ([`cb1c80f`](https://github.com/Byron/gitoxide/commit/cb1c80f8343691600797b61c61cba9cef82a59fc))
+ - refactor ([`a89a667`](https://github.com/Byron/gitoxide/commit/a89a66792855fea7d695ec72899da954b8c16f3d))
+ - Permission controlled access to xdg config ([`42a6c8c`](https://github.com/Byron/gitoxide/commit/42a6c8c9d19f9aab0b33537156e2774c61621864))
+ - preliminary access to a fully configured exclusion cache ([`259d015`](https://github.com/Byron/gitoxide/commit/259d015c4c0195fb77d372545d790ea4c4d01b8a))
+ - refactor ([`a86ed7b`](https://github.com/Byron/gitoxide/commit/a86ed7bc0e10ebed2918f19d2fc3304fbed87df3))
+ - remove `values::*Error` in favor of `value::parse::Error`. ([`38dfdcf`](https://github.com/Byron/gitoxide/commit/38dfdcf80f9b7368ccaa10f4b78b2129849848d0))
+ - refactor ([`807b7f8`](https://github.com/Byron/gitoxide/commit/807b7f826b4e614478aadd36d6361e9970e5d746))
+ - A first version of opening index files with proper configuration ([`f11cc44`](https://github.com/Byron/gitoxide/commit/f11cc441f10e4a7c2c09e7aa9f9435c837c5e77a))
+ - Remove IntegerSuffix error which wasn't ever used ([`732c0fa`](https://github.com/Byron/gitoxide/commit/732c0fa6e1832efcc0de4adc894e820b3bd27b8f))
+ - Adjust to improvements to the `git-config` API ([`ffc5dec`](https://github.com/Byron/gitoxide/commit/ffc5dec6b9ed2b2d19d927848006053f73741a27))
+ - fix build warnings ([`4496b5a`](https://github.com/Byron/gitoxide/commit/4496b5a26abaf91fd4844e0494aaa1b4cce73628))
+ - fix build ([`cb56f12`](https://github.com/Byron/gitoxide/commit/cb56f12ad83cf2932a068ef4fa0ca5ce4aa73e84))
+ - Adapt to changes in git-config ([`61ea4c4`](https://github.com/Byron/gitoxide/commit/61ea4c4a254bafd3d1f0c18cf1c10cbd66c15a4d))
+ - sketch `open_index()` on `Worktree`, but… ([`ff76261`](https://github.com/Byron/gitoxide/commit/ff76261f568f6b717a93b1f2dcf5d8e8b63acfca))
+ - a sketch of basic Worktree support ([`732f6fb`](https://github.com/Byron/gitoxide/commit/732f6fb0aa9cdc843087352b12bed2cd142ed6ec))
+ - Use `git-path` crate instead of `git_features::path` ([`47e607d`](https://github.com/Byron/gitoxide/commit/47e607dc256a43a3411406c645eb7ff04239dd3a))
+ - docs for git-glob ([`8f4969f`](https://github.com/Byron/gitoxide/commit/8f4969fe7c2e3f3bb38275d5e4ccb08d0bde02bb))
+ - make fmt ([`50ff7aa`](https://github.com/Byron/gitoxide/commit/50ff7aa7fa86e5e2a94fb15aab86470532ac3f51))
+ * **[#331](https://github.com/Byron/gitoxide/issues/331)**
+ - Use `Integer::to_decimal()` in git-repository ([`8fb95bf`](https://github.com/Byron/gitoxide/commit/8fb95bf62a33ccef3b037162f49e9a72abb0e3d9))
+ * **[#364](https://github.com/Byron/gitoxide/issues/364)**
+ - some TODOs related to precomposed unicode on MacOS ([`bc246aa`](https://github.com/Byron/gitoxide/commit/bc246aaa81cd7023e8533a006211a800621e8907))
+ * **[#382](https://github.com/Byron/gitoxide/issues/382)**
+ - refactor ([`0010675`](https://github.com/Byron/gitoxide/commit/00106757a2c86e841bcf03ae233d4ff7bfc710dd))
+ - match test structure with crate structure ([`b91e4bd`](https://github.com/Byron/gitoxide/commit/b91e4bd335024d8d4404d263e5f761eced2d15e9))
+ - Simplify state tests ([`fc61c0d`](https://github.com/Byron/gitoxide/commit/fc61c0d4f7cb3cd9073418e4d8edc55cd14f5fb3))
+ * **[#383](https://github.com/Byron/gitoxide/issues/383)**
+ - Use previously unused variable in fixture script ([`cfaf31f`](https://github.com/Byron/gitoxide/commit/cfaf31fc654472acf1aacacb516b58a3295cffcd))
+ * **[#384](https://github.com/Byron/gitoxide/issues/384)**
+ - No need to isolate archives by crate name ([`19d46f3`](https://github.com/Byron/gitoxide/commit/19d46f35440419b9911b6e2bca2cfc975865dce9))
+ - add archive files via git-lfs ([`7202a1c`](https://github.com/Byron/gitoxide/commit/7202a1c4734ad904c026ee3e4e2143c0461d51a2))
+ - auto-set commit.gpgsign=false when executing git ([`c23feb6`](https://github.com/Byron/gitoxide/commit/c23feb64ad157180cfba8a11c882b829733ea8f6))
+ * **[#386](https://github.com/Byron/gitoxide/issues/386)**
+ - integrate trust model into repository discovery ([`80e8fd4`](https://github.com/Byron/gitoxide/commit/80e8fd4a5944890f43f3d888b7a73bb26351b195))
+ - `path::discover::existing()` -> `path::discover()` ([`2e39b0e`](https://github.com/Byron/gitoxide/commit/2e39b0ede98826e6f85c56fef77ac65a5b7e7ac2))
+ - more expressive and fuiture-proof handling of git dir access controls ([`b1d319b`](https://github.com/Byron/gitoxide/commit/b1d319b249fb6c6d4d5197734938836824789053))
+ - A first PoC to show how the permissions model works in practice ([`67d5837`](https://github.com/Byron/gitoxide/commit/67d58372a8352da0197ec2992f120bd000ffe5de))
+ - don't assume repos with work-trees are non-bare; make git-sec manadatory ([`9c4516d`](https://github.com/Byron/gitoxide/commit/9c4516d309fef0c6fa5396e2bc366475182e0690))
+ - use `git-credentials` in `git-protocol` ([`32dc182`](https://github.com/Byron/gitoxide/commit/32dc1829a5661f66396d109c8d0a8eaae6b1f532))
+ * **[#389](https://github.com/Byron/gitoxide/issues/389)**
+ - `Commit::describe()` now returns annnotated tags before lighweight ones and prefers more recent ones as well ([`a1680b4`](https://github.com/Byron/gitoxide/commit/a1680b44ef568317465d2971da6e0930f9885530))
+ - test all cases for the names filter in describe ([`0d9f6c6`](https://github.com/Byron/gitoxide/commit/0d9f6c6687d7b2a4c473daa1115c100ef40369e7))
+ - first crude fix ([`35019f2`](https://github.com/Byron/gitoxide/commit/35019f282ca7f91bef11cacd03117a756a1bd9f2))
+ - reproduce commit-describe name ordering issue ([`6d023e3`](https://github.com/Byron/gitoxide/commit/6d023e3cbed6a24821ab8a1d36084a350a39415b))
+ * **[#393](https://github.com/Byron/gitoxide/issues/393)**
+ - refactor ([`5044576`](https://github.com/Byron/gitoxide/commit/50445760d180d89501516fc7ed780f0d09edb2d9))
+ - Use the name `state()` instead of `in_progress_operation()` ([`e9b92f0`](https://github.com/Byron/gitoxide/commit/e9b92f002eec51e5ccec74d0dbc641aabf6eda9d))
+ - refactor ([`6540869`](https://github.com/Byron/gitoxide/commit/6540869ec1a1492e3338ff2d33074be33890ee8f))
+ - Add `Repository::head_name()`. ([`45920da`](https://github.com/Byron/gitoxide/commit/45920da7c8c5618c6e7258de08dbd633a637d017))
+ * **Uncategorized**
+ - Release git-worktree v0.2.0, git-repository v0.17.0 ([`3f71246`](https://github.com/Byron/gitoxide/commit/3f7124616ab9752007b8cf03e1c6a3a796ffee0b))
+ - Release git-worktree v0.2.0, git-repository v0.17.0 ([`5845934`](https://github.com/Byron/gitoxide/commit/584593448b560afdd60dbdbdff901d267082765e))
+ - Release git-ref v0.13.0, git-discover v0.1.0, git-index v0.3.0, git-mailmap v0.2.0, git-traverse v0.15.0, git-pack v0.19.0, git-odb v0.29.0, git-packetline v0.12.5, git-url v0.5.0, git-transport v0.17.0, git-protocol v0.16.0, git-revision v0.2.0, git-worktree v0.2.0, git-repository v0.17.0 ([`349c590`](https://github.com/Byron/gitoxide/commit/349c5904b0dac350838a896759d51576b66880a7))
+ - Release git-hash v0.9.4, git-features v0.21.0, git-actor v0.10.0, git-glob v0.3.0, git-path v0.1.1, git-attributes v0.1.0, git-sec v0.1.0, git-config v0.3.0, git-credentials v0.1.0, git-validate v0.5.4, git-object v0.19.0, git-diff v0.16.0, git-lock v2.1.0, git-ref v0.13.0, git-discover v0.1.0, git-index v0.3.0, git-mailmap v0.2.0, git-traverse v0.15.0, git-pack v0.19.0, git-odb v0.29.0, git-packetline v0.12.5, git-url v0.5.0, git-transport v0.17.0, git-protocol v0.16.0, git-revision v0.2.0, git-worktree v0.2.0, git-repository v0.17.0, safety bump 20 crates ([`654cf39`](https://github.com/Byron/gitoxide/commit/654cf39c92d5aa4c8d542a6cadf13d4acef6a78e))
+ - make fmt ([`e043807`](https://github.com/Byron/gitoxide/commit/e043807abf364ca46d00760e2f281528efe20c75))
+ - Merge branch 'refs-and-worktrees' ([`8131227`](https://github.com/Byron/gitoxide/commit/8131227ddff6f36919b6a0f7b33792ebde0f8ae9))
+ - Merge branch 'main' into refs-and-worktrees ([`9cf0c7b`](https://github.com/Byron/gitoxide/commit/9cf0c7bd0cc5419137db5796f3a5b91bdf3dcc94))
+ - Merge branch 'davidkna-remote-branch-name' ([`068a2de`](https://github.com/Byron/gitoxide/commit/068a2de764fabff949ff49a50594563cc625e343))
+ - refactor ([`5ab5842`](https://github.com/Byron/gitoxide/commit/5ab58428358938bced45cc348ec76b527bca9be3))
+ - Use a Cow for remote name handling ([`633a30d`](https://github.com/Byron/gitoxide/commit/633a30dc919ef4a16e4382f6f81825ff2deb7f6b))
+ - adjust to changes in git-ref ([`0671586`](https://github.com/Byron/gitoxide/commit/06715861d3a1d236c310d71737ec1d1a5ca6c770))
+ - allow reading information about remote branch ([`53c06c7`](https://github.com/Byron/gitoxide/commit/53c06c7e6a3003b34edaab10db1f158e2fb57403))
+ - thanks clippy ([`a7ac64c`](https://github.com/Byron/gitoxide/commit/a7ac64cd801b985790b5717be1a5dc722b2ae3a9))
+ - Merge branch 'main' into git_includeif ([`b1bfc8f`](https://github.com/Byron/gitoxide/commit/b1bfc8fe8efb6d8941f54dddd0fcad99aa13ed6c))
+ - Merge branch 'basic-worktree-support' ([`e058bda`](https://github.com/Byron/gitoxide/commit/e058bdabf8449b6a6fdff851e3929137d9b71568))
+ - Merge branch 'main' into git_includeif ([`05eb340`](https://github.com/Byron/gitoxide/commit/05eb34023933918c51c03cf2afd774db89cc5a33))
+ - thanks clippy ([`d624f4e`](https://github.com/Byron/gitoxide/commit/d624f4e7fafd821867a41548b49f2cd7f09def8c))
+ - thanks clippy ([`6fb19cf`](https://github.com/Byron/gitoxide/commit/6fb19cfee79a49741dd439ade9c638aa89943f10))
+ - Merge branch 'main' into msrv-for-windows ([`7cb1972`](https://github.com/Byron/gitoxide/commit/7cb19729133325bdfacedf44cdc0500cbcf36684))
+ - make fmt ([`251b6df`](https://github.com/Byron/gitoxide/commit/251b6df5dbdda24b7bdc452085f808f3acef69d8))
+ - Merge branch 'worktree-stack' ([`98da8ba`](https://github.com/Byron/gitoxide/commit/98da8ba52cef8ec27f705fcbc84773e5bacc4e10))
+ - thanks clippy ([`f802a03`](https://github.com/Byron/gitoxide/commit/f802a03dc0b04d12fa360fb570d460ad4e1eb53a))
+ - Merge branch 'inferiorhumanorgans-repo-status-additional-tests' ([`66dee9a`](https://github.com/Byron/gitoxide/commit/66dee9a89780063630c657e4d9a08bce6cd940d4))
+ - Add test coverage for RepositoryState::CherryPickSequence… ([`fc281d8`](https://github.com/Byron/gitoxide/commit/fc281d820d130b74c80d8fc139188a4c4b7b7331))
+ - erge branch 'fix-describe' ([`56d7ad7`](https://github.com/Byron/gitoxide/commit/56d7ad7a2e7994545581ad5955c25feb9cefdf4e))
+ - fix docs ([`5ee2307`](https://github.com/Byron/gitoxide/commit/5ee23070ecfbf73e5897344421a1f1ec2917a3bd))
+ - Merge branch 'main' into repo-status ([`9679d6b`](https://github.com/Byron/gitoxide/commit/9679d6b0e68c28438e22cb65c554d0b31dfaf159))
+ - remove unused variant ([`da8059c`](https://github.com/Byron/gitoxide/commit/da8059ce26343c8cd275f43c879d98c92f77fa51))
+ - Merge branch 'git-sec' ([`cd723b5`](https://github.com/Byron/gitoxide/commit/cd723b5ae11148e7e9fd07daf28bc04455d5c46f))
+ - Clean up the error message and comments. ([`463a705`](https://github.com/Byron/gitoxide/commit/463a705dc23cddf0ba0ec2dc578a618c793b1d9d))
+ - Print out some human readable text if GNU sed cannot be found. ([`cf19a18`](https://github.com/Byron/gitoxide/commit/cf19a1854091dc5c709dc367ca5f9568dd7e6da8))
+ - Merge branch 'main' into repo-status ([`0eb2372`](https://github.com/Byron/gitoxide/commit/0eb23721dca78f6e6bf864c5c3a3e44df8b419f0))
+ - repo_path -> git_dir ([`53c22ee`](https://github.com/Byron/gitoxide/commit/53c22ee00834ce5912ec28d20026032b063fd2ec))
+ - Merge branch 'test-archive-support' ([`350df01`](https://github.com/Byron/gitoxide/commit/350df01042d6ca8b93f8737fa101e69b50535a0f))
+ - Let's try not parsing the git version. ([`475e7d1`](https://github.com/Byron/gitoxide/commit/475e7d1ebdd27e3efd4bd7de6e0a1ee9447feb4b))
+ - Take a couple more steps to appease the CI gods. ([`ac3c8c7`](https://github.com/Byron/gitoxide/commit/ac3c8c7397bf5294cbce97e0718bac23588b2ca5))
+ - Fix the GNU sed detection so it works where /usr/bin/sed is GNU. ([`5c162e0`](https://github.com/Byron/gitoxide/commit/5c162e05299256e99abe84213b078652b5c637a0))
+ - Make clippy happier. ([`a5406b5`](https://github.com/Byron/gitoxide/commit/a5406b5c06a9ecb147f5850db001de2782dd283d))
+ - Pass version appropriate rebase flags to git. ([`bb18a13`](https://github.com/Byron/gitoxide/commit/bb18a13cd05ddce3e850760814e4bdc6e35e0f0e))
+ - Merge branch 'main' into repo-status ([`4086335`](https://github.com/Byron/gitoxide/commit/40863353a739ec971b49410fbc2ba048b2762732))
+ - Add a few tests for good measure. ([`499c811`](https://github.com/Byron/gitoxide/commit/499c81106d520e3c8ae1aa02e905c8048a054f79))
+ - in_progress_operation now returns an Option ([`172b464`](https://github.com/Byron/gitoxide/commit/172b4640984d23d7adafacd96cf9d88569d29769))
+ - Tweak the naming and comments a bit ([`56038ed`](https://github.com/Byron/gitoxide/commit/56038ed075d6774043651f14abb61550539b5c26))
+ - Release git-glob v0.2.0, safety bump 3 crates ([`ab6bed7`](https://github.com/Byron/gitoxide/commit/ab6bed7e2aa19eeb9990441741008c430f373708))
+ - Merge branch 'worktree-stack' ([`e90d3fd`](https://github.com/Byron/gitoxide/commit/e90d3fd0a9764511e6280596f21d3a0494ed7021))
+ - First pass at Repository::in_progress_state() ([`c2f66e4`](https://github.com/Byron/gitoxide/commit/c2f66e4ea26fb28bde80dc44ea3ea7278c2fd967))
+
+
+## 0.16.0 (2022-04-05)
+
+### New Features
+
+ - 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.
+
+### Commit Statistics
+
+
+
+ - 20 commits contributed to the release.
+ - 2 days passed between releases.
+ - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 1 unique issue was worked on: [#298](https://github.com/Byron/gitoxide/issues/298)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 5 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#298](https://github.com/Byron/gitoxide/issues/298)**
+ - Use all tags by default, instead of requiring annotated tags ([`00c42ca`](https://github.com/Byron/gitoxide/commit/00c42ca36e93a22f233fc1d3f9a1afc241fd4464))
+ - Fix off-by-one error ([`d5b8fd5`](https://github.com/Byron/gitoxide/commit/d5b8fd5d93605912ccd8e3610ed3c10ec96cf5fe))
+ - auto-calculation of a good hex-len, like what git does ([`47556f6`](https://github.com/Byron/gitoxide/commit/47556f6815148ed960a727fd122f7162345544c3))
+ - Parse the hex-len from config on repo-initialization ([`aee55c0`](https://github.com/Byron/gitoxide/commit/aee55c02853ce91d1e9bc10349a630bf9c8f20d8))
+ - Support for simple BString powered string values ([`2381c5d`](https://github.com/Byron/gitoxide/commit/2381c5d3b91e3a071c887d9e1e166625977d5830))
+ - refactor configuration handling to allow pre-parsing of common values ([`e3d280f`](https://github.com/Byron/gitoxide/commit/e3d280fc3fe09787b27c0b6354797278f6f12c9f))
+ - restrict signature changes to 'Ancestores::sorting()` ([`d71bd9d`](https://github.com/Byron/gitoxide/commit/d71bd9ded1e5e5a61a27be3d55f4b85ee4049bcf))
+ - Adjust to changes in git-traverse ([`8240622`](https://github.com/Byron/gitoxide/commit/824062215865e6ec12afeb2d51b3c63f15291244))
+ - set MSRV to 1.54 as we really need VecDeque::binary_search ([`514e468`](https://github.com/Byron/gitoxide/commit/514e468fdc102f36f9719fcf4c8f99eb22d9c0ae))
+ - support for the --max-candidates flag ([`b9e6754`](https://github.com/Byron/gitoxide/commit/b9e67540801f2630be8aa1acbfddfec4202360ac))
+ - Reduce amount of max candidates, add --debug flag ([`c8c13e3`](https://github.com/Byron/gitoxide/commit/c8c13e398671a21e96282547fc0e3bd445627e2f))
+ - Use hashed-hasher for an eek of performance ([`324a839`](https://github.com/Byron/gitoxide/commit/324a839e6c72174f08779a97fa12cc313e2afac2))
+ - `Commit::describe()` ([`654f4af`](https://github.com/Byron/gitoxide/commit/654f4afb794a370b7cd9d9502ff6d0c3378ec417))
+ * **Uncategorized**
+ - Release git-revision v0.1.0, git-repository v0.16.0, gitoxide-core v0.14.0, gitoxide v0.12.0 ([`f041c00`](https://github.com/Byron/gitoxide/commit/f041c00a7df2455ca52fac7b83af1e9f335f5688))
+ - Release git-config v0.2.1, git-diff v0.15.0, git-traverse v0.14.0, git-pack v0.18.0, git-odb v0.28.0, git-ref v0.12.1, git-revision v0.1.0, git-repository v0.16.0, gitoxide-core v0.14.0, gitoxide v0.12.0, safety bump 6 crates ([`b612021`](https://github.com/Byron/gitoxide/commit/b612021683ba709b693bd48aef3e2e3c2f5b9ead))
+ - thanks clippy ([`7887d8b`](https://github.com/Byron/gitoxide/commit/7887d8b5bedc49890bd73beb058a9828aa734729))
+ - thanks clippy ([`0f5a943`](https://github.com/Byron/gitoxide/commit/0f5a9439d6b1716345f0e122c23c1a566fdd3088))
+ - thanks clippy ([`9407532`](https://github.com/Byron/gitoxide/commit/9407532b98646d33bb0b947860a6a0022cfbae28))
+ - thanks clippy ([`60cb858`](https://github.com/Byron/gitoxide/commit/60cb8589e901981802be11289352510a9d43cd87))
+ - thanks clippy ([`f2faa00`](https://github.com/Byron/gitoxide/commit/f2faa001ed2c8e96e25dbd56544320055f8dbe1b))
+
+
+## 0.15.0 (2022-04-03)
+
+
+
+
+
+### New Features
+
+ - 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.
+
+### Bug Fixes
+
+ - Properly classify worktrees as non-bare, helps with `ein t find`
+ They use git-files which point to the actual repository data.
+
+### Changed (BREAKING)
+
+ - Easier access to local and remote branches
+
+### New Features (BREAKING)
+
+ - `interrupt::Iter`, rename `interrupt::Iter` -> `interrupt::IterWithError`
+ - Let 'easy::Object::try_into_…()` 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.
+
+### Bug Fixes (BREAKING)
+
+ - 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.
+
+### Other (BREAKING)
+
+ - `Id::prefix` -> `Id::shorten()`
+ It's definitely more intuitive that way.
+
+### Refactor (BREAKING)
+
+ - dissolve 'easy' module by moving everything one level up
+ - clarify different repository types much better
+
+### Commit Statistics
+
+
+
+ - 82 commits contributed to the release over the course of 69 calendar days.
+ - 69 days passed between releases.
+ - 21 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 7 unique issues were worked on: [#293](https://github.com/Byron/gitoxide/issues/293), [#298](https://github.com/Byron/gitoxide/issues/298), [#301](https://github.com/Byron/gitoxide/issues/301), [#329](https://github.com/Byron/gitoxide/issues/329), [#336](https://github.com/Byron/gitoxide/issues/336), [#364](https://github.com/Byron/gitoxide/issues/364), [#366](https://github.com/Byron/gitoxide/issues/366)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 5 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#293](https://github.com/Byron/gitoxide/issues/293)**
+ - `easy::Commit::time()` to access the committers time conveniently. ([`9f5663e`](https://github.com/Byron/gitoxide/commit/9f5663ed83d83c7335b346313837d4cada9cd846))
+ - easy::Head::name() to learn about the name of the HEAD ref ([`7c88b62`](https://github.com/Byron/gitoxide/commit/7c88b62e439af7a60ddb68fb6737cb3b1cebf00d))
+ - fix build ([`d89a587`](https://github.com/Byron/gitoxide/commit/d89a587cd05c8d1697d250eb19ea29d32192de0e))
+ - `Repsitory::load_index()` ([`1c22d76`](https://github.com/Byron/gitoxide/commit/1c22d76c26464db4a185e19bb6c1f9a17fa19bc9))
+ - refactor ([`8bf585d`](https://github.com/Byron/gitoxide/commit/8bf585d67cd67b168d819ba05858cef7d9b90894))
+ - JSON output for index entries ([`3fc1622`](https://github.com/Byron/gitoxide/commit/3fc1622488054c6ab655eb9d2f941b68cc3ccf18))
+ * **[#298](https://github.com/Byron/gitoxide/issues/298)**
+ - actual default hex-len for short-ids is 7, but… ([`36e004b`](https://github.com/Byron/gitoxide/commit/36e004b05cb996c50f6446381e5574faacc329c2))
+ - quick sketch of how the retrieval of ints from config could look like ([`af6326f`](https://github.com/Byron/gitoxide/commit/af6326f534ca0b5982fd752c40933ea4cf4af59f))
+ - frame for simplified config access via Repository ([`eba2b9a`](https://github.com/Byron/gitoxide/commit/eba2b9a6bbfe6fe4ad1df657955061a66ea7c06c))
+ - fix docs; consistent naming of 'repo' ([`1f79bc3`](https://github.com/Byron/gitoxide/commit/1f79bc32ee3d7a70985b7bef830ccdd1dc762f05))
+ - rename `sync::Handle` into `ThreadSafeRepository` ([`1cc4faa`](https://github.com/Byron/gitoxide/commit/1cc4faaaffa9b5c461659a84b3abc6ebf577945c))
+ - disoolve 'easy' module by moving everything one level up ([`c10f07c`](https://github.com/Byron/gitoxide/commit/c10f07c50f6dde4b39bf1e3ff26c239c5f202912))
+ - prepare for moving `git-repository::easy:: one level up ([`ccecb9a`](https://github.com/Byron/gitoxide/commit/ccecb9ab5134bb0abb44de1c462b588e64cf5b9b))
+ - make config available in easy::Repository ([`fbdb1a2`](https://github.com/Byron/gitoxide/commit/fbdb1a2ddc0ec3846418f69aa9b0304c061ff54f))
+ - refactor ([`591b533`](https://github.com/Byron/gitoxide/commit/591b5338ecdc0da33151baa0781fd8dc1ee8d5a9))
+ - refactor ([`a1a846a`](https://github.com/Byron/gitoxide/commit/a1a846a3d804fb62d87468717e591375410fdbca))
+ - clarify different repository types much better ([`bbc6efe`](https://github.com/Byron/gitoxide/commit/bbc6efeceb26050973e1425e68a52e51b9df4572))
+ - docs ([`a45f378`](https://github.com/Byron/gitoxide/commit/a45f3789696078848e2e96ddb8a55570c941dd53))
+ - First stab at Oid::prefix() ([`35e77c1`](https://github.com/Byron/gitoxide/commit/35e77c16b05aa08d090d08a8442ff5dd58750e13))
+ - `easy::Head::peel_to_commit_in_place()` ([`3b0913a`](https://github.com/Byron/gitoxide/commit/3b0913a2e6695e4e9e94341ef48d2ba3b4a518e6))
+ - Let 'easy::Object::try_into_…()` return `try_into::Error`. ([`813a3be`](https://github.com/Byron/gitoxide/commit/813a3bea88cdbe1fd9b0a8070efeee2a44f7823e))
+ * **[#301](https://github.com/Byron/gitoxide/issues/301)**
+ - `interrupt::Iter`, rename `interrupt::Iter` -> `interrupt::IterWithError` ([`8945d95`](https://github.com/Byron/gitoxide/commit/8945d95f7fa88562d37ff67ac6e38bead73dd2df))
+ - refactor ([`9ea1e44`](https://github.com/Byron/gitoxide/commit/9ea1e4474a3ce803da7a56e1fc1748f65c11a876))
+ - unset the pack cache if GITOXIDE_DISABLE_PACK_CACHE is set ([`6d8bc49`](https://github.com/Byron/gitoxide/commit/6d8bc4959765340be53f445d9709d3056eaeecd8))
+ - frame for traversing tree entries ([`0e55fbb`](https://github.com/Byron/gitoxide/commit/0e55fbb2fb0cec6f402b7a3aed7ee55078d233a1))
+ - basic version of index checkout via command-line ([`f23b8d2`](https://github.com/Byron/gitoxide/commit/f23b8d2f1c4b767d337ec51888afaa8b3719798c))
+ - support for unicode-precomposition for gix apps ([`e90c123`](https://github.com/Byron/gitoxide/commit/e90c123675a98ab62fc6bb22019f889cee8b7301))
+ - `Commit::short_id()` ([`1be00cf`](https://github.com/Byron/gitoxide/commit/1be00cf9e00ce9428ffddb2c79b2373926069b13))
+ - verify that Id::prefix() makes use of the git configuration ([`76e9110`](https://github.com/Byron/gitoxide/commit/76e911083fbb789e1cd3f84c194759517625182c))
+ * **[#329](https://github.com/Byron/gitoxide/issues/329)**
+ - in-manifest and in-lib documentation of feature toggles ([`c7dff9e`](https://github.com/Byron/gitoxide/commit/c7dff9e8b695d298a3fb21f19f51752a885a5ce3))
+ - Document all features related to serde1 ([`72b97f2`](https://github.com/Byron/gitoxide/commit/72b97f2ae4dc7642b160f183c6d5df4502dc186f))
+ * **[#336](https://github.com/Byron/gitoxide/issues/336)**
+ - do not install signal handlers by default ([`c863ea5`](https://github.com/Byron/gitoxide/commit/c863ea5b34fa9ee3dac21c1f85587da16045f8d8))
+ * **[#364](https://github.com/Byron/gitoxide/issues/364)**
+ - support for object replacement ([`1322dbf`](https://github.com/Byron/gitoxide/commit/1322dbf6827ea5cc1d71175afb669e01fb1242ef))
+ - initialize replacements in a configurable way ([`6a27985`](https://github.com/Byron/gitoxide/commit/6a27985a8e68896be0d7e10c27ddf5a20018e04b))
+ - add some precaution to avoid strange interactions with packs ([`b052a9a`](https://github.com/Byron/gitoxide/commit/b052a9a3e9127fd9a4029594ea9de6e436db03c6))
+ - commit traversals on shallow clones are non-fatal by default ([`1a75357`](https://github.com/Byron/gitoxide/commit/1a75357f3d7d3cb70f1700d471b1c9c5b953c292))
+ - adapt to changes in git-ref ([`f606f88`](https://github.com/Byron/gitoxide/commit/f606f88075d84a52d145a1f87ec2eae0659af36b))
+ - Add and improve Debug implementation on major types ([`d23c3d4`](https://github.com/Byron/gitoxide/commit/d23c3d4c6e7ac1d712f7c2b7ebf4cfe45923ee6e))
+ - support for trimming of whitespace around name and email ([`a39bf71`](https://github.com/Byron/gitoxide/commit/a39bf71531ee0a6c8db082758d3212c805ce2bf0))
+ - also inform about average and max commit sizes ([`5052a4e`](https://github.com/Byron/gitoxide/commit/5052a4e532fec63ccf49f6ce54df41707779e70b))
+ - fix install_dir(); refactor ([`11644bd`](https://github.com/Byron/gitoxide/commit/11644bd53a2c8fb60a22ef244bb7ef11024a83a2))
+ - `Repository::head_commit()` ([`0057804`](https://github.com/Byron/gitoxide/commit/00578040a699e1939b3d3813616d3cc4e1d8669e))
+ - `Repository::head_id()` ([`f0d8a49`](https://github.com/Byron/gitoxide/commit/f0d8a49587c08713350252e1701a45bb308b6f9d))
+ - fix docs ([`29822c6`](https://github.com/Byron/gitoxide/commit/29822c65d398efcd95b7eb9c668a7841b3d54ed9))
+ - `Id::prefix` -> `Id::shorten()` ([`5f75953`](https://github.com/Byron/gitoxide/commit/5f7595305efc85d6ca3c541e9f9adac3915cbd84))
+ - refactor ([`b1b9871`](https://github.com/Byron/gitoxide/commit/b1b9871e8b0c2bcbdee0c3ea4c060b4a7c32bc15))
+ - Easier access to local and remote branches ([`a8b6589`](https://github.com/Byron/gitoxide/commit/a8b6589a7c645f323f95da6cb94321fc967e9b06))
+ - Fix lifetime declarations to allow ancestors().all() chaining ([`df24f16`](https://github.com/Byron/gitoxide/commit/df24f16ffdec355940a6c1b2d5e9d9d6f0ce24d1))
+ - consolidate naming of directories, use same convention as git2 ([`a7dbed1`](https://github.com/Byron/gitoxide/commit/a7dbed193cc25d05e03c4f2148d0fa9562a4a586))
+ - Full error handling for CommitRefIter ([`b94471a`](https://github.com/Byron/gitoxide/commit/b94471a0ced50204156cf5d4126c676f0258a5eb))
+ - More speedy access to author/committer ([`6129607`](https://github.com/Byron/gitoxide/commit/61296077cebaaf2eb939fa6082121304bc6cf39b))
+ - adjust to changes in git-actor ([`e5c0200`](https://github.com/Byron/gitoxide/commit/e5c02002467a6ad2ab2330cf6f38bcebabf4ba7c))
+ - cleaner API for detaching objects, now for commits as well ([`59d75fc`](https://github.com/Byron/gitoxide/commit/59d75fce0d2292733afd455f1acbcb4711ba3f9b))
+ - Adjust to breaking changes in `git-traverse` ([`d79b506`](https://github.com/Byron/gitoxide/commit/d79b5064eab2d1bef445e6c9e62a53466a8d5225))
+ * **[#366](https://github.com/Byron/gitoxide/issues/366)**
+ - `ein tool estimate-hours` now supports mailmaps ([`def80df`](https://github.com/Byron/gitoxide/commit/def80df2e165b74f4b053e4030f563902b7d34a4))
+ - `gix repository mailmap entries` ([`d2388d8`](https://github.com/Byron/gitoxide/commit/d2388d8d80f379eccc9ee84ebe07acd67d154630))
+ - frame for printing mailmap entries using git-repository ([`2a01f47`](https://github.com/Byron/gitoxide/commit/2a01f4728ae858b47280b587501d343fdb86655d))
+ - the first possibly working version of loading a mailmap with multiple sources ([`98d745e`](https://github.com/Byron/gitoxide/commit/98d745e8080975a91cff1ce75e187258c851d3f4))
+ - frame for `Repository::load_mailmap_into()` ([`c8c87ec`](https://github.com/Byron/gitoxide/commit/c8c87ec12f7ff5061132f9e67828d59ac51a8043))
+ - unstable mailmap module ([`e3bc1b4`](https://github.com/Byron/gitoxide/commit/e3bc1b410409a9e27894a5cac48b06d8c3295e36))
+ * **Uncategorized**
+ - Release git-diff v0.14.0, git-bitmap v0.1.0, git-index v0.2.0, git-tempfile v2.0.1, git-lock v2.0.0, git-mailmap v0.1.0, git-traverse v0.13.0, git-pack v0.17.0, git-quote v0.2.0, git-odb v0.27.0, git-packetline v0.12.4, git-url v0.4.0, git-transport v0.16.0, git-protocol v0.15.0, git-ref v0.12.0, git-worktree v0.1.0, git-repository v0.15.0, cargo-smart-release v0.9.0, safety bump 5 crates ([`e58dc30`](https://github.com/Byron/gitoxide/commit/e58dc3084cf17a9f618ae3a6554a7323e44428bf))
+ - Merge branch 'for-onefetch' ([`8e5cb65`](https://github.com/Byron/gitoxide/commit/8e5cb65da75036a13ed469334e7ae6c527d9fff6))
+ - Release git-hash v0.9.3, git-features v0.20.0, git-config v0.2.0, safety bump 12 crates ([`f0cbb24`](https://github.com/Byron/gitoxide/commit/f0cbb24b2e3d8f028be0e773f9da530da2656257))
+ - make fmt ([`7cf3545`](https://github.com/Byron/gitoxide/commit/7cf354509b545f7e7c99e159b5989ddfbe86273d))
+ - Properly classify worktrees as non-bare, helps with `ein t find` ([`c329dd7`](https://github.com/Byron/gitoxide/commit/c329dd75420f82d506fd415cd377f7df6c6ccbad))
+ - fix MSRV ([`1bf5d11`](https://github.com/Byron/gitoxide/commit/1bf5d11ec0b9df2f1c6fb5239007ad8409b97f75))
+ - thanks clippy ([`8e2e4e3`](https://github.com/Byron/gitoxide/commit/8e2e4e352b563b2accd2e9d91c6e8a33b5a9709c))
+ - Merge branch 'short-id' ([`5849d5b`](https://github.com/Byron/gitoxide/commit/5849d5b326b83f98a16cf1d956c720c7f0fd4445))
+ - thanks clippy ([`4618f8a`](https://github.com/Byron/gitoxide/commit/4618f8aa7648c0553a8e1b023fceb6738654e38b))
+ - thanks clippy ([`5db3993`](https://github.com/Byron/gitoxide/commit/5db39936fc003a79f18e545a8317305fe18af74d))
+ - thanks clippy ([`d5911b5`](https://github.com/Byron/gitoxide/commit/d5911b59e4bd039fe39702487640d18319c0ed7e))
+ - Set the MSRV version explicitly in git-repository ([`bbf6799`](https://github.com/Byron/gitoxide/commit/bbf6799db01e25c8e3f49e0fd6ff3ec802e773a0))
+ - remove unused dependency ([`2fbc93c`](https://github.com/Byron/gitoxide/commit/2fbc93cc2ce855f24aea63c8513cf1e037c685a1))
+ - Release git-tempfile v2.0.0, safety bump 6 crates ([`90b1c42`](https://github.com/Byron/gitoxide/commit/90b1c42d5487904a9f329362d185b035d0ddb975))
+ - upgrade document-features ([`c35e62e`](https://github.com/Byron/gitoxide/commit/c35e62e0da9ac1f7dcb863f5f9c69108c728d32e))
+ - Release git-actor v0.8.1 ([`08fe550`](https://github.com/Byron/gitoxide/commit/08fe5508472f2eb209db8a5fc4e4942a9d7db93d))
+ - fix lint ([`b339b41`](https://github.com/Byron/gitoxide/commit/b339b419bde0418fb4fcd998e232b1eba836f7a4))
+ - Release git-hash v0.9.2, git-object v0.17.1, git-pack v0.16.1 ([`0db19b8`](https://github.com/Byron/gitoxide/commit/0db19b8deaf11a4d4cbc03fa3ae40eea104bc302))
+ - Merge branch 'index-verification' ([`ad3c803`](https://github.com/Byron/gitoxide/commit/ad3c8032cee02052ef3940d1d7c950270a0a299a))
+ - thanks clippy ([`2f25bf1`](https://github.com/Byron/gitoxide/commit/2f25bf1ebf44aef8c4886eaefb3e87836d535f61))
+ - Release git-config v0.1.11 ([`a605b67`](https://github.com/Byron/gitoxide/commit/a605b67294773628590220600f5017c63911f620))
+ - Merge branch 'index-information' ([`025f157`](https://github.com/Byron/gitoxide/commit/025f157de10a509a4b36a9aed41de80487e8c15c))
+
+
+## 0.14.0 (2022-01-23)
+
+
+
+
+
+
+### New Features
+
+ - 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.
+
+### Changed (BREAKING)
+
+ - 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 `git_odb::Find*` traits in prelude, instead of `git_pack::Find*`
+ These are higher-level and generally more desirable.
+ The Find traits in `git-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 git_pack::data::Object to git_object::Data, massively alter git_odb::Find trait
+ This will break a lot, but has to happen to prepare these traits for the
+ next generation of object databases.
+
+### Commit Statistics
+
+
+
+ - 67 commits contributed to the release over the course of 51 calendar days.
+ - 55 days passed between releases.
+ - 18 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 7 unique issues were worked on: [#215](https://github.com/Byron/gitoxide/issues/215), [#266](https://github.com/Byron/gitoxide/issues/266), [#274](https://github.com/Byron/gitoxide/issues/274), [#279](https://github.com/Byron/gitoxide/issues/279), [#287](https://github.com/Byron/gitoxide/issues/287), [#293](https://github.com/Byron/gitoxide/issues/293), [#298](https://github.com/Byron/gitoxide/issues/298)
+
+### Commit Details
+
+
+
+view details
+
+ * **[#215](https://github.com/Byron/gitoxide/issues/215)**
+ - `easy::Oid::ancestors()` now supports `sorting()` and iteration by first commit only ([`0ae2a8d`](https://github.com/Byron/gitoxide/commit/0ae2a8da010d848d98bef47ac923ae1d770091ff))
+ - refactor ([`9af2a94`](https://github.com/Byron/gitoxide/commit/9af2a9431005f6bd235881c34baf176b6fc9f686))
+ - Use GITOXIDE_OBJECT_CACHE_MEMORY to control how much object cache is used ([`bc77534`](https://github.com/Byron/gitoxide/commit/bc77534f9c385046f6c9adb994b1443307afda46))
+ - Don't read environment variables each time an pack cache is created ([`91d7ef2`](https://github.com/Byron/gitoxide/commit/91d7ef295e5bca4368b6161b497d7796c99c115f))
+ * **[#266](https://github.com/Byron/gitoxide/issues/266)**
+ - Default handle refresh mode is the least surprising, with option to configure ([`1b74c14`](https://github.com/Byron/gitoxide/commit/1b74c14c99a3076753f166dc1a6a4451bca490d2))
+ - refactor ([`b88f253`](https://github.com/Byron/gitoxide/commit/b88f253e46e7ad0a50b670b96c1bfa09eaaecaef))
+ - refactor ([`52a4dcd`](https://github.com/Byron/gitoxide/commit/52a4dcd3a6969fa8f423ab39c875f98f9d210e95))
+ - A quick and dirty version index iteration ([`0384007`](https://github.com/Byron/gitoxide/commit/0384007cd9e813cf4bfb13642adef8a602d219ad))
+ - Use new store in git-repository ([`2f9e342`](https://github.com/Byron/gitoxide/commit/2f9e342b63f9e5c925d8e85ebc0a0be693ca0901))
+ - Adjust object-acess to test new contains method ([`8488b41`](https://github.com/Byron/gitoxide/commit/8488b41651751d9177f53a23233b7ddd655dd696))
+ - assure loops can't happen anymore ([`f04ff80`](https://github.com/Byron/gitoxide/commit/f04ff8011198b7f6c45c2094530903316c6e91ea))
+ - Rename `Handle` to `Cache` ([`580e96c`](https://github.com/Byron/gitoxide/commit/580e96c1b2d9782a2e8cf9d1123f6d53a5376a3d))
+ - First sketch of general store ([`fc1b640`](https://github.com/Byron/gitoxide/commit/fc1b6409380256b73cf271c105802f4494dbb8c5))
+ - add docs for handle-related functions ([`cf1b1e6`](https://github.com/Byron/gitoxide/commit/cf1b1e6d82f691ab17975e4f1479d93720368803))
+ - use `git_odb::Find*` traits in prelude, instead of `git_pack::Find*` ([`f9c0493`](https://github.com/Byron/gitoxide/commit/f9c0493460ab7c664aaa231ffcf7dfd56076c920))
+ - fix git-repository docs ([`3496a97`](https://github.com/Byron/gitoxide/commit/3496a970c0918c309075a0ecad7b84b449a6e4cf))
+ - remove borrowing Repo as possible failure cause ([`7a91212`](https://github.com/Byron/gitoxide/commit/7a91212631219e94b9454d2874b53f3ecc1db77e))
+ - remove Easy… abstraction in favor of Handle ([`b2cc0c6`](https://github.com/Byron/gitoxide/commit/b2cc0c63570d45de032d63e62d94c3344783440e))
+ - rename easy::State to easy::Handle ([`83d7b31`](https://github.com/Byron/gitoxide/commit/83d7b31e7dd6d09eea79fc3c68620d099459132f))
+ - Remove unnecessary error variants now that repo() is called less ([`afcd579`](https://github.com/Byron/gitoxide/commit/afcd579e53c09b8d1c39be16f516584f6ff93bfa))
+ - Use db handle for writing ([`053e7b6`](https://github.com/Byron/gitoxide/commit/053e7b61c093021b9931f1cca105a462ba4fc3cf))
+ - Adapt to changes in git-repository ([`3ab9b03`](https://github.com/Byron/gitoxide/commit/3ab9b03eee7d449b7bb87cb7dcbf164fdbe4ca48))
+ - fully rely on OdbHandle in repository State ([`5e7aa16`](https://github.com/Byron/gitoxide/commit/5e7aa1689f5d7ea5b510611a3ca0868828226291))
+ - Rename `Repository::odb` to` Repository::objects` ([`57de915`](https://github.com/Byron/gitoxide/commit/57de915886b76f80b3641def0ccf4fd79e334fc8))
+ - Add odb handle to state ([`4e38da3`](https://github.com/Byron/gitoxide/commit/4e38da35be4d753c30e07ed292ae8ce15513bcfe))
+ - remove Repository::refresh_object_database() ([`93db4a5`](https://github.com/Byron/gitoxide/commit/93db4a5e70456d2c33ea010e3c86e5f26eb1bcc0))
+ - remove pack-cache from `Find::try_find(…)` ([`ebc7f47`](https://github.com/Byron/gitoxide/commit/ebc7f47708a63c3df4415ba0e702660d976dfb3e))
+ - move git_pack::data::Object to git_object::Data, massively alter git_odb::Find trait ([`2290d00`](https://github.com/Byron/gitoxide/commit/2290d006705ff47ad780b009fe58ee422b3285af))
+ * **[#274](https://github.com/Byron/gitoxide/issues/274)**
+ - Rename `OwnedObject` to `DetachedObject` ([`b673097`](https://github.com/Byron/gitoxide/commit/b6730979808ce28b98c65888a349f1e3d0ea1b9a))
+ - Fix docs ([`acb0ccc`](https://github.com/Byron/gitoxide/commit/acb0cccabf9f2a9cd966a2473da65db170e434e3))
+ - Remove easy::borrow::Error entirely; support for multiple objects per handle ([`c4184f3`](https://github.com/Byron/gitoxide/commit/c4184f3c31ffc4597bd089e8140653906a6594d8))
+ - rename `easy::Object` to `OwnedObject`; remove `Ref` suffix from `ObjectRef` and `TreeRef` ([`880b564`](https://github.com/Byron/gitoxide/commit/880b56426859306aa30038ff35e2ad14607e9e90))
+ * **[#279](https://github.com/Byron/gitoxide/issues/279)**
+ - fix docs ([`b61a920`](https://github.com/Byron/gitoxide/commit/b61a9200d267865be76bdd2f36477c3940bc4dcc))
+ - rename `easy::Object` methods returning `Ref` objects to have `ref` in their name ([`6e3a745`](https://github.com/Byron/gitoxide/commit/6e3a745dfada66a2fcac256dae0ac63959e74d08))
+ - cargo fmt ([`8b9da35`](https://github.com/Byron/gitoxide/commit/8b9da35b3e0d3458efcac150f7062c9d7382a6c4))
+ - Deal with changes to git-odb `Write` trait ([`4d67122`](https://github.com/Byron/gitoxide/commit/4d6712210555c7ac88940be2a271471ee1e7cb97))
+ - adapt to changes to `git-odb` ([`5b0e2b9`](https://github.com/Byron/gitoxide/commit/5b0e2b927eac75548d5a9f3cf302aa5eda70a795))
+ - First pieces of header parsing; allow to respect multi-index desired hash kind in git-odb ([`1a2a049`](https://github.com/Byron/gitoxide/commit/1a2a04930ab56ba778091e10b15cecf415f5058d))
+ - refactor ([`4e89d8d`](https://github.com/Byron/gitoxide/commit/4e89d8d16dc0af56b07c9ef0de35035154162430))
+ - Respect `core.multiPackIndex` option ([`1495efc`](https://github.com/Byron/gitoxide/commit/1495efcc914449f9680f9141805d60b1f3188001))
+ * **[#287](https://github.com/Byron/gitoxide/issues/287)**
+ - basic output for 'repo verify' json only ([`9f8d61f`](https://github.com/Byron/gitoxide/commit/9f8d61f164fb3fbdb76cc44fbd634ca5db35b3b8))
+ * **[#293](https://github.com/Byron/gitoxide/issues/293)**
+ - make clear what 'steal' actually steals from ([`1b0ab44`](https://github.com/Byron/gitoxide/commit/1b0ab449af18ebf876abeafdb35bf416039f665d))
+ - Make obvious that we steal data from the free list ([`3523aa4`](https://github.com/Byron/gitoxide/commit/3523aa433d4d87d5f75ca7bb7c1b1e228c0aa07d))
+ - handle won't try to reuse empty buffers to allow it to be claimed ([`0fb4c91`](https://github.com/Byron/gitoxide/commit/0fb4c91c32ee67642e52ce70e3b4060ca1dd3952))
+ * **[#298](https://github.com/Byron/gitoxide/issues/298)**
+ - frame for printing index information ([`9ea98fd`](https://github.com/Byron/gitoxide/commit/9ea98fda75fbef339647a0ca03776060356d1206))
+ * **Uncategorized**
+ - Release git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0 ([`b286b24`](https://github.com/Byron/gitoxide/commit/b286b24a51878be7d2e0fd77ff0c5c99b439a6a0))
+ - Release git-odb v0.26.0, git-packetline v0.12.3, git-url v0.3.5, git-transport v0.15.0, git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0 ([`42ebb53`](https://github.com/Byron/gitoxide/commit/42ebb536cd6086f096b8422291776c9720fa0948))
+ - Release git-diff v0.13.0, git-tempfile v1.0.4, git-chunk v0.3.0, git-traverse v0.12.0, git-pack v0.16.0, git-odb v0.26.0, git-packetline v0.12.3, git-url v0.3.5, git-transport v0.15.0, git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0 ([`1b76119`](https://github.com/Byron/gitoxide/commit/1b76119259b8168aeb99cbbec233f7ddaa2d7d2c))
+ - Release git-actor v0.8.0, git-config v0.1.10, git-object v0.17.0, git-diff v0.13.0, git-tempfile v1.0.4, git-chunk v0.3.0, git-traverse v0.12.0, git-pack v0.16.0, git-odb v0.26.0, git-packetline v0.12.3, git-url v0.3.5, git-transport v0.15.0, git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0 ([`8f57c29`](https://github.com/Byron/gitoxide/commit/8f57c297d7d6ed68cf51415ea7ede4bf9263326e))
+ - Release git-features v0.19.1, git-actor v0.8.0, git-config v0.1.10, git-object v0.17.0, git-diff v0.13.0, git-tempfile v1.0.4, git-chunk v0.3.0, git-traverse v0.12.0, git-pack v0.16.0, git-odb v0.26.0, git-packetline v0.12.3, git-url v0.3.5, git-transport v0.15.0, git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0 ([`d78aab7`](https://github.com/Byron/gitoxide/commit/d78aab7b9c4b431d437ac70a0ef96263acb64e46))
+ - Release git-hash v0.9.1, git-features v0.19.1, git-actor v0.8.0, git-config v0.1.10, git-object v0.17.0, git-diff v0.13.0, git-tempfile v1.0.4, git-chunk v0.3.0, git-traverse v0.12.0, git-pack v0.16.0, git-odb v0.26.0, git-packetline v0.12.3, git-url v0.3.5, git-transport v0.15.0, git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0, safety bump 4 crates ([`373cbc8`](https://github.com/Byron/gitoxide/commit/373cbc877f7ad60dac682e57c52a7b90f108ebe3))
+ - prepar changelogs for cargo-smart-release release ([`8900d69`](https://github.com/Byron/gitoxide/commit/8900d699226eb0995be70d66249827ce348261df))
+ - Release git-bitmap v0.0.1, git-hash v0.9.0, git-features v0.19.0, git-index v0.1.0, safety bump 9 crates ([`4624725`](https://github.com/Byron/gitoxide/commit/4624725f54a34dd6b35d3632fb3516965922f60a))
+ - remove debug-helper ([`c243215`](https://github.com/Byron/gitoxide/commit/c2432158ca4be3008847bce40cfe536e082d1f4a))
+ - Don't use bleeding edge features ([`3de0ab1`](https://github.com/Byron/gitoxide/commit/3de0ab1163d267102e7605da1d7a114574508a00))
+ - reference statistics for stats example ([`83b99ce`](https://github.com/Byron/gitoxide/commit/83b99cee89dd55550503290602a5ab62c62dec55))
+ - Experiment with novel API idea around Tree breadthfirst traversal ([`2ee1890`](https://github.com/Byron/gitoxide/commit/2ee189068edcc06491e03c8551866ce5ac0cf0ba))
+ - Add `easy::Tree::traverse()` platform ([`667485e`](https://github.com/Byron/gitoxide/commit/667485e133ca29fcc6914a7142cf953564b5fce3))
+ - (change!: consistently use `object_hash` instead of `hash_kind` #279) ([`81bd453`](https://github.com/Byron/gitoxide/commit/81bd4531c8ab752eaadb201a18d7c26fdf83f893))
+ - Release git-chunk v0.2.0, safety bump 4 crates ([`b792fab`](https://github.com/Byron/gitoxide/commit/b792fabf9f5f93ab906ac5a5bb3e4f01c179290a))
+ - Merge branch 'sync-db-draft' ([`7d2e20c`](https://github.com/Byron/gitoxide/commit/7d2e20c6fedc2c7e71a307d8d072412fa847a4aa))
+ - Tests for Commit object ([`1130928`](https://github.com/Byron/gitoxide/commit/1130928b8b450387daff1b79faff4ffd012c1dba))
+ - Add `easy::Commit` object ([`8f650c0`](https://github.com/Byron/gitoxide/commit/8f650c089c88698483f778aa5c0070f606b94f09))
+ - Episode 5 ([`8ba7fc8`](https://github.com/Byron/gitoxide/commit/8ba7fc894689b2b163f06b8686dda4563c3c0838))
+ - episode 4 ([`e7e54a2`](https://github.com/Byron/gitoxide/commit/e7e54a22fbc06c5e54216abc426d70d7bff0ac26))
+ - episode 3 ([`e107d9a`](https://github.com/Byron/gitoxide/commit/e107d9ab9f150fec41fbcb008950df5050f9fe34))
+ - make fmt ([`066f3ff`](https://github.com/Byron/gitoxide/commit/066f3ffb8740f242c1b03e680c3c5c1a0e4c36c3))
+
+
+## 0.13.0 (2021-11-29)
+
+
+
+
+With changes to `git-ref`, what follows is all the adjustments made to simplify the `gix` implementation.
+
+### Changed (BREAKING)
+
+ - 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 `git-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 `git_ref::file::WriteRefLog` to `git_ref::store::WriteRefLog`
+
+### Bug Fixes (BREAKING)
+
+ - 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.
+
+### Other (BREAKING)
+
+ - Reference::logs() -> Reference::log_iter()
+ The latter now returns a standard Platform to iterate over all
+ reflog entries from oldest to newest or vice versa.
+
+### Refactor (BREAKING)
+
+ - `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.
+
+### Commit Statistics
+
+
+
+ - 16 commits contributed to the release over the course of 7 calendar days.
+ - 12 days passed between releases.
+ - 6 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 2 unique issues were worked on: [#259](https://github.com/Byron/gitoxide/issues/259), [#263](https://github.com/Byron/gitoxide/issues/263)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#259](https://github.com/Byron/gitoxide/issues/259)**
+ - Describe and propose fix for ref namespace-sharing issue ([`55773b8`](https://github.com/Byron/gitoxide/commit/55773b87feb246927a7421a822c45d9e101e985e))
+ * **[#263](https://github.com/Byron/gitoxide/issues/263)**
+ - Adjust to changes in git-ref ([`1e32855`](https://github.com/Byron/gitoxide/commit/1e3285572a640683660936297e5f072d827b3ded))
+ - Reference::logs() -> Reference::log_iter() ([`951c050`](https://github.com/Byron/gitoxide/commit/951c050ecbb70c9de216603e55c7cfbc89a067e3))
+ - Adapt to new iteration Platform in git-ref ([`b5a749e`](https://github.com/Byron/gitoxide/commit/b5a749e1e26e4490d94f1cbd6901596d90f3cf47))
+ - file::Store::iter() is now a platform, with `.all()` and `.prefixed(…)` respectively ([`5d498a3`](https://github.com/Byron/gitoxide/commit/5d498a33236391d8e456f267b1bf6af24de66f11))
+ - Adjustments to match new signature of peel_to_ids_in_place ([`f87a11f`](https://github.com/Byron/gitoxide/commit/f87a11fef632dd2442393c4655ada11f1d480332))
+ - file::Store::(try_)find(…, packed) was removed ([`15d429b`](https://github.com/Byron/gitoxide/commit/15d429bb50602363292453606902bdce5042d9a5))
+ - `file::Store::base` is now `file::Store::base()` and read-only ([`0e18753`](https://github.com/Byron/gitoxide/commit/0e1875363fea09452789d7a90fc6860a7996d6d3))
+ - move `git_ref::file::WriteRefLog` to `git_ref::store::WriteRefLog` ([`9524732`](https://github.com/Byron/gitoxide/commit/95247322a8191edfa7fac9c5aa72b40239f3aa88))
+ - ref namespaces are now thread-local ([`fc8e85c`](https://github.com/Byron/gitoxide/commit/fc8e85cd71d4f16bc8daad0b790d875045faefff))
+ - Add cheap and sync loose ref DB directly to state ([`38c8146`](https://github.com/Byron/gitoxide/commit/38c81462b94d225861fd237bd0c2ce0c558664c4))
+ * **Uncategorized**
+ - Release git-actor v0.7.0, git-config v0.1.9, git-object v0.16.0, git-diff v0.12.0, git-traverse v0.11.0, git-pack v0.15.0, git-odb v0.25.0, git-packetline v0.12.2, git-transport v0.14.0, git-protocol v0.13.0, git-ref v0.10.0, git-repository v0.13.0, cargo-smart-release v0.7.0 ([`d3f9227`](https://github.com/Byron/gitoxide/commit/d3f922781a81e8fbb81aa47afdbe9afeb06d666b))
+ - Release git-features v0.18.0, git-actor v0.7.0, git-config v0.1.9, git-object v0.16.0, git-diff v0.12.0, git-traverse v0.11.0, git-pack v0.15.0, git-odb v0.25.0, git-packetline v0.12.2, git-transport v0.14.0, git-protocol v0.13.0, git-ref v0.10.0, git-repository v0.13.0, cargo-smart-release v0.7.0, safety bump 12 crates ([`acd3737`](https://github.com/Byron/gitoxide/commit/acd37371dcd92ebac3d1f039224d02f2b4e9fa0b))
+ - Adjust changelogs prior to release ([`ec38950`](https://github.com/Byron/gitoxide/commit/ec3895005d141abe79764eaff7c0f04153e38d73))
+ - thanks clippy ([`a74f27c`](https://github.com/Byron/gitoxide/commit/a74f27c042bdf0c1e30a1767b56032e32cbc81a9))
+ - Merge branch 'pack-consistency' ([`5982406`](https://github.com/Byron/gitoxide/commit/5982406b4e1b26fd383d9ec21a3cf652ec8ab25f))
+
+
+## 0.12.0 (2021-11-16)
+
+### New Features
+
+ - Allow `PartialNameRef` to be created from owned items
+
+### Changed (BREAKING)
+
+ - Rename gix->ein and gixp->gix
+
+### Commit Statistics
+
+
+
+ - 12 commits contributed to the release over the course of 20 calendar days.
+ - 27 days passed between releases.
+ - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 4 unique issues were worked on: [#241](https://github.com/Byron/gitoxide/issues/241), [#247](https://github.com/Byron/gitoxide/issues/247), [#251](https://github.com/Byron/gitoxide/issues/251), [#254](https://github.com/Byron/gitoxide/issues/254)
+
+### Commit Details
+
+
+
+view details
+
+ * **[#241](https://github.com/Byron/gitoxide/issues/241)**
+ - refactor ([`8cd5f6a`](https://github.com/Byron/gitoxide/commit/8cd5f6ad66781b83d69490754fe6e8b87974b125))
+ - Improve usability of the pack-cache environment variable ([`47d8162`](https://github.com/Byron/gitoxide/commit/47d81629a0bfa2eccf75cbe081de55d80d0abd59))
+ * **[#247](https://github.com/Byron/gitoxide/issues/247)**
+ - Rename gix->ein and gixp->gix ([`e8b0919`](https://github.com/Byron/gitoxide/commit/e8b091943f0c9a26317da0003f7fcdf5a56ef21a))
+ * **[#251](https://github.com/Byron/gitoxide/issues/251)**
+ - refactor ([`244a646`](https://github.com/Byron/gitoxide/commit/244a646370dcc4e35478825922b86fe59646d86c))
+ - Another example that probably is closer to the optimal case ([`a216d89`](https://github.com/Byron/gitoxide/commit/a216d89b8ef51a47aa9b19cc0296fbbe984b1066))
+ - Allow `PartialNameRef` to be created from owned items ([`b7aab9e`](https://github.com/Byron/gitoxide/commit/b7aab9efd42975e8f2dcb5c97e51495996175702))
+ - Add full-name workaround as example ([`06893cf`](https://github.com/Byron/gitoxide/commit/06893cf49f98b0da4878c8d808544b6ec309f24e))
+ - add tests to verify common inputs would work for try_find_reference(…) ([`d986d09`](https://github.com/Byron/gitoxide/commit/d986d09cd9a4cb8e3a1444d781237f4a0ce550a1))
+ * **[#254](https://github.com/Byron/gitoxide/issues/254)**
+ - Adjust changelogs prior to git-pack release ([`6776a3f`](https://github.com/Byron/gitoxide/commit/6776a3ff9fa5a283da06c9ec5723d13023a0b267))
+ * **Uncategorized**
+ - Release git-repository v0.12.0, cargo-smart-release v0.6.0 ([`831a777`](https://github.com/Byron/gitoxide/commit/831a777487452a6f51a7bc0a9f9ca34b0fd778ed))
+ - Release git-config v0.1.8, git-object v0.15.1, git-diff v0.11.1, git-traverse v0.10.1, git-pack v0.14.0, git-odb v0.24.0, git-packetline v0.12.1, git-transport v0.13.1, git-protocol v0.12.1, git-ref v0.9.1, git-repository v0.12.0, cargo-smart-release v0.6.0 ([`f606fa9`](https://github.com/Byron/gitoxide/commit/f606fa9a0ca338534252df8921cd5e9d3875bf94))
+ - Adjusting changelogs prior to release of git-config v0.1.8, git-object v0.15.1, git-diff v0.11.1, git-traverse v0.10.1, git-pack v0.14.0, git-odb v0.24.0, git-packetline v0.12.1, git-transport v0.13.1, git-protocol v0.12.1, git-ref v0.9.1, git-repository v0.12.0, cargo-smart-release v0.6.0, safety bump 5 crates ([`39b40c8`](https://github.com/Byron/gitoxide/commit/39b40c8c3691029cc146b893fa0d8d25d56d0819))
+
+
+## v0.11.0 (2021-10-19)
+
+A maintenance release to properly dealing with previously breaking changes in `git-hash`.
+
+### Commit Statistics
+
+
+
+ - 5 commits contributed to the release over the course of 3 calendar days.
+ - 3 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 2 unique issues were worked on: [#221](https://github.com/Byron/gitoxide/issues/221), [#222](https://github.com/Byron/gitoxide/issues/222)
+
+## v0.10.0 (2021-10-15)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### New Features
+
+ - Make `git_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 `git_url::Url` available under `gix::Url`
+
+### BREAKING Changes
+
+ - Use 'to_*' when converting `easy::Object` to specific object kind
+ This also makes the API more consistent while being more idiomatic.
+ - Avoid duplicate module paths in 'tree' and 'commit'
+ - rename ObjectIdExt::ancestors_iter() to *::ancestors()
+ - rename `easy::Object::to_(commit|tag)_iter()`…
+ …to `easy::Object::try_to_(commit|tag)_iter()` for consistency.
+ - rename `*::State` into `*::Platform`
+ - various small API changes
+ - move easy::head::peel::Error -> easy::head::peel::to_id::Error
+ - rename path::is_git to path::is
+ - rename easy::reference::log::State to easy::reference::Logs
+
+### Other
+
+ - 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'.
+
+### Refactor
+
+ - split data::output::count::objects into files
+ - use new git_pack::cache::Object trait
+ - remove object cache impl which now lives in git-pack
+
+### Other
+
+ - :remote_url() is now optional
+ Otherwise it wouldn't work on repos that don't have a remote set yet.
+ Instead of failing, we don't create links.
+ - try to create persistent Easy iterator, but can't make it Send…
+ …which is fair as it contains borrowed RefCells, which really would have
+ to be owned to work for this, which would in turn require the Ancestor's
+ struct to be kind of self-referential
+ - path::is
+ - path::discover
+ - top-level of 'path' module
+ - object_id
+ - repository
+ - ext::tree
+ - easy::object::peel
+ - easy::object::errors
+ - a seemingly slow version of path lookup, but…
+ …in debug mode it's faster than the fast path, despite doing more
+ and being the same when it comes to searching path components.
+ - easy::object, sans a few child-modules
+ - update 'platform' information to reflect the current usage
+ - configure caches with env vars using `apply_environment()`
+ - refactor
+ - set package cache via RepositoryAccessExt
+ - Add GITOXIDE_PACK_CACHE_MEMORY_IN_BYTES=536870912 to control pack-cache size…
+ …which can mean another considerable speed-up for many workloads, but
+ usually needs some knowledge about the application, repos, and should
+ thus be with the user.
+ - allow disabling the pack cache with GITOXIDE_DISABLE_PACK_CACHE
+ - prepare for configurable pack cache
+ - object-cache to allow for a speed boost…
+ …by avoiding duplicate accesses to hit the object database.
+ However, the cost for the cache are relatively high and involve some
+ memory copying, so hit rates of about 50% is certainly what is needed
+ to get any speed boost at all.
+ - build commit history for later use in changelog generation
+ - Allow object access during commit ancestor traversal…
+ …by getting only a temporary handle to the pack-cache. The cost of this
+ should be negligible compared to the cost of object decoding.
+ - sketch history acquisition
+ - add 'Head::peeled()' method
+
+### Changed (BREAKING)
+
+ - `easy::Object::try_to_commit()` now returns `Result`…
+ …without the nested `Option`, folding the type mismatch into a specific
+ `conversion::Error` instead.
+ - rename `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.
+
+### Commit Statistics
+
+
+
+ - 95 commits contributed to the release over the course of 33 calendar days.
+ - 34 days passed between releases.
+ - 44 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 4 unique issues were worked on: [#164](https://github.com/Byron/gitoxide/issues/164), [#198](https://github.com/Byron/gitoxide/issues/198), [#200](https://github.com/Byron/gitoxide/issues/200), [#67](https://github.com/Byron/gitoxide/issues/67)
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 4 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **[#164](https://github.com/Byron/gitoxide/issues/164)**
+ - path::is ([`1f4e45a`](https://github.com/Byron/gitoxide/commit/1f4e45a26a3d2727f00c3f248452dd41fc8a95be))
+ - rename path::is_git to path::is ([`ac3b9ef`](https://github.com/Byron/gitoxide/commit/ac3b9efb7b90958274ce55800959d930f8641115))
+ - path::discover ([`1958e8a`](https://github.com/Byron/gitoxide/commit/1958e8aa65eb97f9755f065d713f0a48c5e41b1b))
+ - Avoid duplicate module paths in 'tree' and 'commit' ([`2f2d856`](https://github.com/Byron/gitoxide/commit/2f2d856efe733d3cf81110c0e0607d2e7c40d968))
+ - top-level of 'path' module ([`066f59b`](https://github.com/Byron/gitoxide/commit/066f59b23a125b1ce9a015437a3f4468e5791da0))
+ - object_id ([`329d183`](https://github.com/Byron/gitoxide/commit/329d183ad4e256a4f9cdeb34589b5f3432495f79))
+ - rename ObjectIdExt::ancestors_iter() to *::ancestors() ([`a19567e`](https://github.com/Byron/gitoxide/commit/a19567eceab0dd7f5478b83c2ff9ce79754db308))
+ - repository ([`1a1959f`](https://github.com/Byron/gitoxide/commit/1a1959f487d69ffdd5394775b707139c44dbd11d))
+ - ext::tree ([`5e091fb`](https://github.com/Byron/gitoxide/commit/5e091fb2b4fd33879c176e6dadd3c9805d99af50))
+ - easy::object::peel ([`e376067`](https://github.com/Byron/gitoxide/commit/e3760679547e0dc1bf31761acdb6e63b04a50919))
+ - easy::object::errors ([`de004b3`](https://github.com/Byron/gitoxide/commit/de004b318fdc6923711dd001bff5f4bcbba4270e))
+ - rename `easy::Object::to_(commit|tag)_iter()`… ([`61793ff`](https://github.com/Byron/gitoxide/commit/61793ff42f5c2f9ddf302901adea2dac6149eac8))
+ - easy::object, sans a few child-modules ([`f582439`](https://github.com/Byron/gitoxide/commit/f582439a3efe5c234f54c488792395e9de09a032))
+ - update 'platform' information to reflect the current usage ([`42080ae`](https://github.com/Byron/gitoxide/commit/42080aefe3b286afb58235c1c22491579ab73919))
+ - rename easy::reference::log::State to easy::reference::Logs ([`03fe8a7`](https://github.com/Byron/gitoxide/commit/03fe8a7ebd34608d725d4585da5c1630123762ec))
+ - rename `*::State` into `*::Platform` ([`0cd585e`](https://github.com/Byron/gitoxide/commit/0cd585e20a5abd323a34ec32d92fbd48531b3b18))
+ * **[#198](https://github.com/Byron/gitoxide/issues/198)**
+ - :remote_url() is now optional ([`e16603b`](https://github.com/Byron/gitoxide/commit/e16603b15b5488b81563c583cd8f5292ab9d24a2))
+ - `easy::Object::try_to_commit()` now returns `Result`… ([`c3385cd`](https://github.com/Byron/gitoxide/commit/c3385cd144298eb9f06d7751d180e26da7b4d338))
+ - rename `ObjectAccessExt::tag(…)` to `*::tag_reference(…)`, add `easy::Object::try_to_tag()` ([`e59f901`](https://github.com/Byron/gitoxide/commit/e59f901f47fb0180211494a1591aed62b856406a))
+ - add easy::ext::ObjectAccessExt::tag(…) to create tag objects ([`80b8331`](https://github.com/Byron/gitoxide/commit/80b8331092f4856f52afa1d85fa375ae688bdd28))
+ - prettify changelog also to practice user segments ([`5c57264`](https://github.com/Byron/gitoxide/commit/5c5726409d6f6343fc9a860f4b9ecde4730fe7d9))
+ - Fix git-url re-export to respect feature flags ([`ec4e3ca`](https://github.com/Byron/gitoxide/commit/ec4e3ca4c7211655549a76cae252742633da1083))
+ - deduplicate conventional message ids ([`e695eda`](https://github.com/Byron/gitoxide/commit/e695eda8cd183f703d9a3e59b7c3c7fa496ea1d2))
+ - regenerate all changelogs to get links ([`0c81769`](https://github.com/Byron/gitoxide/commit/0c817690bd444f52bed2936b2b451cafd87dde92))
+ - pass actual repository url down from commands ([`4e03515`](https://github.com/Byron/gitoxide/commit/4e03515622afd79b145db081ef9e3cb301ce6e97))
+ - Make `git_url::Url` available under `gix::Url` ([`0ebfeb6`](https://github.com/Byron/gitoxide/commit/0ebfeb614264ca06ab763189e55e6c016c9997af))
+ - Mention actual issues that where worked on ([`a517e39`](https://github.com/Byron/gitoxide/commit/a517e39a81145b331f6c7a6cc2fc22e25daf42e2))
+ - Allow 'refactor' and 'other' in conventional messages if they have breaking changes ([`4eebaac`](https://github.com/Byron/gitoxide/commit/4eebaac669e590beed112b622752997c64772ef1))
+ - merge doesn't consider user generated sections, only the ones it would want to add ([`ebbebdd`](https://github.com/Byron/gitoxide/commit/ebbebdd70aeec9aa3ad453d61375429a7f555bbc))
+ - Rebuild all changelogs to assure properly ordered headlines ([`4a9a05f`](https://github.com/Byron/gitoxide/commit/4a9a05f95930bad5938d4ce9c517ebf0e0b990f1))
+ - Sort all commits by time, descending… ([`f536bad`](https://github.com/Byron/gitoxide/commit/f536bad20ffbac4dc353dfeb1a917bb88becbb78))
+ - greatly reduce changelog size now that the traversal fix is applied ([`a0bc98c`](https://github.com/Byron/gitoxide/commit/a0bc98c06c349de2fd6e0d4593606e68b98def72))
+ - Use hashmap based lookup for trees… ([`48a0c76`](https://github.com/Byron/gitoxide/commit/48a0c76ab163b6e35b19dd2a9efc2e101a721633))
+ - Fixup remaining changelogs… ([`2f75db2`](https://github.com/Byron/gitoxide/commit/2f75db294fcf20c325555822f65629611be52971))
+ - Generate changelogs with details ([`e1861ca`](https://github.com/Byron/gitoxide/commit/e1861caa435d312953a9fea7ceff6d2e07b03443))
+ - Update all changelogs with details ([`58ab2ae`](https://github.com/Byron/gitoxide/commit/58ab2aee23ba70a536e9487b44fb04c610374d1a))
+ - Update changelogs ([`c857d61`](https://github.com/Byron/gitoxide/commit/c857d61ce3ce342012a2c4ba10a8327822aa530e))
+ - Avoid adding newlines which make writing unstable ([`6b5c394`](https://github.com/Byron/gitoxide/commit/6b5c394f49282a8d09c2a9ffece840e4683572db))
+ - Fix section headline level ([`9d6f263`](https://github.com/Byron/gitoxide/commit/9d6f263beef289d227dec1acc2d4240087cb9be6))
+ - Write first version of changlogs thus far… ([`719b6bd`](https://github.com/Byron/gitoxide/commit/719b6bdf543b8269ccafad9ad6b46e0c55efaa38))
+ - Use 'to_*' when converting `easy::Object` to specific object kind ([`1cb41f8`](https://github.com/Byron/gitoxide/commit/1cb41f81cffe19c75aadf49a5cc7ec390ec6cae7))
+ - Fix panic related to incorrect handling of character boundaries ([`9e92cff`](https://github.com/Byron/gitoxide/commit/9e92cff33f4f53d3b2d6b55a722d577c2dd6a4f2))
+ - Fix build ([`d0a956f`](https://github.com/Byron/gitoxide/commit/d0a956fdb5a822dbd116792bfbe70d1532a95ec9))
+ - refactor!: Use git_object::commit::MessageRef::summary()… ([`13e7c3a`](https://github.com/Byron/gitoxide/commit/13e7c3ad5e079fe778d07d115c9e41c4c6eb038f))
+ - Sketch data for parsed messages ([`32dd280`](https://github.com/Byron/gitoxide/commit/32dd280eaada635994e11b4f2722a4efc59faa8f))
+ - a seemingly slow version of path lookup, but… ([`41afad3`](https://github.com/Byron/gitoxide/commit/41afad3386461b658ee859225785b6de86d13cfb))
+ - configure caches with env vars using `apply_environment()` ([`d422b9a`](https://github.com/Byron/gitoxide/commit/d422b9a31a37a03551bec4382039aaf3a7e49902))
+ - refactor ([`e7c061b`](https://github.com/Byron/gitoxide/commit/e7c061b10c263001eb4abf03098d6694b770f828))
+ - set package cache via RepositoryAccessExt ([`66292fd`](https://github.com/Byron/gitoxide/commit/66292fd1076c2c9db4694c5ded09799a0be11a03))
+ - Add GITOXIDE_PACK_CACHE_MEMORY_IN_BYTES=536870912 to control pack-cache size… ([`5aadf75`](https://github.com/Byron/gitoxide/commit/5aadf75a0d93d1a990ad0305c38366c5c22bdcb2))
+ - allow disabling the pack cache with GITOXIDE_DISABLE_PACK_CACHE ([`d79a1b7`](https://github.com/Byron/gitoxide/commit/d79a1b75304e397c16b5af7055906591a187ddfd))
+ - prepare for configurable pack cache ([`7d2b6b6`](https://github.com/Byron/gitoxide/commit/7d2b6b66e09ff39727fccd68d190679b52d90126))
+ - object-cache to allow for a speed boost… ([`06996e0`](https://github.com/Byron/gitoxide/commit/06996e032b1e451a674395ebaca94434fac46f05))
+ - build commit history for later use in changelog generation ([`daec716`](https://github.com/Byron/gitoxide/commit/daec7167df524b329daad7dabb1b9920b6ef8936))
+ - Allow object access during commit ancestor traversal… ([`4fe4786`](https://github.com/Byron/gitoxide/commit/4fe4786797d240a59d29dbf2c6310490a381c8b6))
+ - sketch history acquisition ([`debe009`](https://github.com/Byron/gitoxide/commit/debe0094826f83839f907523715def929133fd58))
+ - various small API changes ([`89f1505`](https://github.com/Byron/gitoxide/commit/89f15051763a03627f332c46beedfc53b8b9b15b))
+ - add 'Head::peeled()' method ([`56e39fa`](https://github.com/Byron/gitoxide/commit/56e39fac54bfa3871c42bbf76a9f7c49486b85be))
+ - move easy::head::peel::Error -> easy::head::peel::to_id::Error ([`f644d0e`](https://github.com/Byron/gitoxide/commit/f644d0ede7a2e8d344a81c7003c3877eed64a6b0))
+ - loose reference iteration with non-dir prefixes… ([`293bfc0`](https://github.com/Byron/gitoxide/commit/293bfc0278c5983c0beaec93253fb51f00d81156))
+ - Add 'references().all().peeled().'… ([`6502412`](https://github.com/Byron/gitoxide/commit/650241251a420602f74037babfc24c9f64df78d8))
+ - filter refs correctly, but… ([`2b4a615`](https://github.com/Byron/gitoxide/commit/2b4a61589a7cba3f7600710e21304e731ae3b36a))
+ * **[#200](https://github.com/Byron/gitoxide/issues/200)**
+ - feat: Lift io::Errors to response::Error::UploadPack(…)… ([`f293b63`](https://github.com/Byron/gitoxide/commit/f293b633d16c0f7393d0ede64e12f14e47d0296b))
+ * **[#67](https://github.com/Byron/gitoxide/issues/67)**
+ - split data::output::count::objects into files ([`8fe4612`](https://github.com/Byron/gitoxide/commit/8fe461281842b58aa11437445637c6e587bedd63))
+ - use new git_pack::cache::Object trait ([`b209da2`](https://github.com/Byron/gitoxide/commit/b209da29f361512ba757febf56bc1aca039f2a41))
+ - remove object cache impl which now lives in git-pack ([`741558d`](https://github.com/Byron/gitoxide/commit/741558dd8194590c5cc8566aa22f96e73df38edf))
+ - Use Easy in the one spot where it is possible… ([`6a97bfa`](https://github.com/Byron/gitoxide/commit/6a97bfabcec6597efe9282e6d5c9f0ac3ada61dc))
+ - try to create persistent Easy iterator, but can't make it Send… ([`54a64a5`](https://github.com/Byron/gitoxide/commit/54a64a588ff72515451a3d0343306ac4abe1cb35))
+ * **Uncategorized**
+ - Release git-hash v0.7.0, git-features v0.16.5, git-actor v0.5.3, git-config v0.1.7, git-validate v0.5.3, git-object v0.14.1, git-diff v0.10.0, git-tempfile v1.0.3, git-lock v1.0.1, git-traverse v0.9.0, git-pack v0.12.0, git-odb v0.22.0, git-packetline v0.11.0, git-url v0.3.4, git-transport v0.12.0, git-protocol v0.11.0, git-ref v0.8.0, git-repository v0.10.0, cargo-smart-release v0.4.0 ([`59ffbd9`](https://github.com/Byron/gitoxide/commit/59ffbd9f15583c8248b7f48b3f55ec6faffe7cfe))
+ - thanks clippy ([`bcc9871`](https://github.com/Byron/gitoxide/commit/bcc98715b1bfd9613079071da59309aa8a5ab27b))
+ - Adjusting changelogs prior to release of git-hash v0.7.0, git-features v0.16.5, git-actor v0.5.3, git-validate v0.5.3, git-object v0.14.1, git-diff v0.10.0, git-tempfile v1.0.3, git-lock v1.0.1, git-traverse v0.9.0, git-pack v0.12.0, git-odb v0.22.0, git-packetline v0.11.0, git-url v0.3.4, git-transport v0.12.0, git-protocol v0.11.0, git-ref v0.8.0, git-repository v0.10.0, cargo-smart-release v0.4.0, safety bump 3 crates ([`a474395`](https://github.com/Byron/gitoxide/commit/a47439590e36b1cb8b516b6053fd5cbfc42efed7))
+ - make fmt, but now it picked up some parts that usually don't get altered… ([`01f7b72`](https://github.com/Byron/gitoxide/commit/01f7b729337bd2c99498321c479a9a13b1858e3e))
+ - Update changelogs just for fun ([`21541b3`](https://github.com/Byron/gitoxide/commit/21541b3301de1e053fc0e84373be60d2162fbaae))
+ - Merge branch 'changelog-generation' ([`bf0106e`](https://github.com/Byron/gitoxide/commit/bf0106ea21734d4e59d190b424c22743c22da966))
+ - Merge branch 'main' into changelog-generation ([`c956f33`](https://github.com/Byron/gitoxide/commit/c956f3351d766c748faf0460780e32ac8dfe8165))
+ - thanks clippy ([`ae7826e`](https://github.com/Byron/gitoxide/commit/ae7826e1cf79fce6ad12f407162f58b3bfb02b16))
+ - thanks clippy ([`b02edb5`](https://github.com/Byron/gitoxide/commit/b02edb5b1e9b7c8f8bd1b4a8e2d60667da629839))
+ - thanks clippy ([`68ea77d`](https://github.com/Byron/gitoxide/commit/68ea77dcdd5eb8033618e7af2e3eb0989007b89b))
+ - improved changelog… ([`8b82f7d`](https://github.com/Byron/gitoxide/commit/8b82f7d44c7eb63b7922ddc31ada9cefdce776b0))
+ - Bump git-traverse v0.9.0, safety bump 8 crates ([`d39fabb`](https://github.com/Byron/gitoxide/commit/d39fabb8757369aa19452a457f610fe21dc13a14))
+ - Bump git-repository v0.10.0 ([`5a10dde`](https://github.com/Byron/gitoxide/commit/5a10dde1bcbc03157f3ba45104638a8b5b296cb9))
+ - [repository #164] docs for easy::reference::log ([`7de7c7e`](https://github.com/Byron/gitoxide/commit/7de7c7eb51b7d709fd140dbf789e31e97161bfa7))
+ - [repository #164] docs for easy::reference::iter ([`d86c713`](https://github.com/Byron/gitoxide/commit/d86c71363a5a73dd8986566a9687e2b4756972cb))
+ - [repository #164] refactor ([`437e63b`](https://github.com/Byron/gitoxide/commit/437e63b4e841ef478c12a91bf3e2dce63d5b1041))
+ - [repository #164] docs for top-level of easy::reference ([`9e465e0`](https://github.com/Byron/gitoxide/commit/9e465e03dc636c360128c93864749c4a3f8a99e5))
+ - [repository #164] docs for easy::oid ([`b66b6fe`](https://github.com/Byron/gitoxide/commit/b66b6fe759eeb55cb875fcb65aa58b62c6963ca8))
+ - [repository #164] docs for easy::commit and easy::odb ([`abf37e5`](https://github.com/Byron/gitoxide/commit/abf37e54e5a4584f521988e27dd02f6d6badc4ef))
+ - [repository #164] Documentation for `easy::borrow` ([`3e612f4`](https://github.com/Byron/gitoxide/commit/3e612f441e1e837d7ba3d3ddd40b4a8c2ba05c61))
+ - [repository #164] docs for easy::head::* ([`516fde7`](https://github.com/Byron/gitoxide/commit/516fde7ffb505603479b4de2a78200da480b66ed))
+ - [repository #164] refactor ([`65b0e0f`](https://github.com/Byron/gitoxide/commit/65b0e0fbe7ab7cb405fd267802e7ad3de36d98f7))
+ - [repository #164] docs for `easy::ext::ReferenceAccessExt` ([`ab4910f`](https://github.com/Byron/gitoxide/commit/ab4910f1b4bf98569a04596b43aba862caca029b))
+ - [repository #164] docs for easy::ext::RepositoryAccessExt ([`9041d47`](https://github.com/Byron/gitoxide/commit/9041d474f178f45c86d628a7140c64810365b97d))
+ - [repository #164] another test and fix for `commit()` ([`8d676d7`](https://github.com/Byron/gitoxide/commit/8d676d77cb69df203d3fcbf8c1a34f212035605f))
+ - [repository #164] easy::ext::ObjectAccessExt docs ([`c4984af`](https://github.com/Byron/gitoxide/commit/c4984af4f6343a17290f6c85f8385e77354875bb))
+ - [repository #164] ([`4111d22`](https://github.com/Byron/gitoxide/commit/4111d22ebe4cc9ddd726cce566e5872708067440))
+
+
+## v0.9.1 (2021-09-10)
+
+
+
+
+
+
+- Remove `max-performance` feature from default set until the `msvc` build issue is fixed. Otherwise it will surprisingly break windows builds.
+
+### Other
+
+ - 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'.
+
+### Commit Statistics
+
+
+
+ - 6 commits contributed to the release.
+ - 1 day passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-repository v0.9.1 ([`262c122`](https://github.com/Byron/gitoxide/commit/262c1229d6d2d55c70fe0e199ab15d10954d967b))
+ - Release git-ref v0.7.3 ([`b0a9815`](https://github.com/Byron/gitoxide/commit/b0a98157ab3b240af027acb9965c981a543e55fa))
+ - [repository] don't enforce feature flags that may fail on windows by default ([`afdec2e`](https://github.com/Byron/gitoxide/commit/afdec2e89eee0397b16602fdff16d3997ef370d0))
+ - Release git-ref v0.7.2 ([`e940e9a`](https://github.com/Byron/gitoxide/commit/e940e9a21938035eb8791bba19cc16814a0fb4e7))
+ - Release git-protocol v0.10.4 ([`898ee08`](https://github.com/Byron/gitoxide/commit/898ee08befa1eb7dd22980063c7633f83d0a8958))
+ - Release git-odb v0.21.3 ([`223f930`](https://github.com/Byron/gitoxide/commit/223f93075a28dd49f44505c039cfeae5a7296914))
+
+
+## v0.9.0 (2021-09-08)
+
+- rename `prelude::ConfigAccessExt` to `prelude::RepositoryAccessExt`
+- `prelude::ObjectAccessExt::commit()` signature change
+- cargo feature changed in incompatible ways. `network` was replaced by more finegrained options for _blocking_ and _async_ networking, as well as optional http transport
+
+### New
+
+- `init()`
+- `init_bare()`
+- `Repository::init(Kind)`
+- `open()`
+- `Repository::open()`
+- `easy::Head`
+- `easy::ext::ReferenceAccessExt::head()`
+- `ext::ReferenceExt` trait
+
+### Breaking
+- **renames / moves / Signature Changes**
+ - `path::Path` to `Path`
+ - `init::repository(dir)` -> `path::create::into(dir, **Kind**)`
+
+### Commit Statistics
+
+
+
+ - 7 commits contributed to the release.
+ - 1 day passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Bump git-pack v0.11.0 ([`5ae6ff5`](https://github.com/Byron/gitoxide/commit/5ae6ff52cd2cd1ccd1e26bb987c154eb19603696))
+ - Bump git-repository v0.9.0 ([`b797fc1`](https://github.com/Byron/gitoxide/commit/b797fc10f3f3d1fbc23916a4ff6e5e860e2dd4ed))
+ - [repository #193] Add feature flags for async/blocking ([`57f482c`](https://github.com/Byron/gitoxide/commit/57f482c59ac47b7a5f1abf01b4a3e25364e061c2))
+ - Bump git-object v0.14.0 ([`d4fc81f`](https://github.com/Byron/gitoxide/commit/d4fc81f6390443f8c8561d91ac27ea4a6318fb62))
+ - [repository #164] Prepare `commit()` for a possible less-allocating future ([`0fd01f7`](https://github.com/Byron/gitoxide/commit/0fd01f7071c785c27c56d2c034aac8dcdf690677))
+ - [repository #164] Support for refreshing the object database ([`46e10f8`](https://github.com/Byron/gitoxide/commit/46e10f863e1fea419483a7b086022c16cd0ca226))
+ - [odb #164] Add refresh() functionality ([`ee16d04`](https://github.com/Byron/gitoxide/commit/ee16d041941a5777c8f6495a28f7633c327cbd6b))
+
+
+## v0.8.2 (2021-09-07)
+
+### Commit Statistics
+
+
+
+ - 67 commits contributed to the release over the course of 8 calendar days.
+ - 9 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-repository v0.8.2 ([`3fc23be`](https://github.com/Byron/gitoxide/commit/3fc23beaf103c037253ace727c87ec457be5dedd))
+ - Merge branch 'repository-integration' ([`49f5453`](https://github.com/Byron/gitoxide/commit/49f5453629646ac24d752f53c532e5f67eb09374))
+ - [repository #190] test for oid.ancestors().all() ([`fdc3678`](https://github.com/Byron/gitoxide/commit/fdc3678c63fa128ac754b3fa9ae3d88a4a221d0d))
+ - [repository #190] fix build, lets just make traversal available by default ([`6da3599`](https://github.com/Byron/gitoxide/commit/6da35994cf2a3c9ab741733af53761c9a2cebeed))
+ - Bump git-pack v0.10.0 ([`e5e3c80`](https://github.com/Byron/gitoxide/commit/e5e3c8024e1c2e5e90cee83abbdae41d58eee156))
+ - [repository #190] access to repository directories ([`f4d1ec4`](https://github.com/Byron/gitoxide/commit/f4d1ec4ac0be8aa46d97eb92fb8a8f3fb8da94fb))
+ - [repository #190] first shot at ancestor iteration… ([`85f1a48`](https://github.com/Byron/gitoxide/commit/85f1a48ea39f3b224e8d0ba3728dd75e03a6edc3))
+ - [repository #190] refactor ([`e7188e0`](https://github.com/Byron/gitoxide/commit/e7188e047529cb0f4b20b3876f36b4592e9d2dc4))
+ - [ref #190] fix tests ([`e426e15`](https://github.com/Byron/gitoxide/commit/e426e15188d8ec38ee0029f1d080dbab9afd8642))
+ - [repository #190] fix tests; needs inbound transaction handling… ([`e5a5c09`](https://github.com/Byron/gitoxide/commit/e5a5c09bb108741fff416672566e381f50f02b38))
+ - [repository #190] leverage git-ref namespace support ([`1aa9c11`](https://github.com/Byron/gitoxide/commit/1aa9c113488175f03758f8a64338a33b3417dd87))
+ - [repository #190] refactor ([`609c249`](https://github.com/Byron/gitoxide/commit/609c249916ca64f4beecdab86eb4562adbd1ca4f))
+ - [repository #190] fix build ([`f5e118c`](https://github.com/Byron/gitoxide/commit/f5e118c8871e45ed3db9da9cd6bc63a5ea99621e))
+ - [repository #190] note a known limitation about finding references in namespaces… ([`d335731`](https://github.com/Byron/gitoxide/commit/d3357318cf100fc3e0751e5b6de3922b1c209ddb))
+ - [repository #190] transparent namespace support ([`d14f073`](https://github.com/Byron/gitoxide/commit/d14f073707c2f4641a271ba7965ec8281638e8df))
+ - [repository #190] turns out we need bstr with unicode support ([`3d8796e`](https://github.com/Byron/gitoxide/commit/3d8796e670f9bb5d2ed22fb3b75130a599737341))
+ - [repository #190] public bstr re-export ([`3b7ffde`](https://github.com/Byron/gitoxide/commit/3b7ffde385b1984393ee65a7505ad7221fecd0dc))
+ - [repository #190] cleanup usage of bstr… ([`e4411ff`](https://github.com/Byron/gitoxide/commit/e4411ff43b24af79fefeaa4411e004dc504a4e2a))
+ - [repository #190] prefixed reference iteration ([`a6e19c9`](https://github.com/Byron/gitoxide/commit/a6e19c9a49bdc6a7c5cabef0a8d93bfd48a74fcd))
+ - [repository #190] implementation of reference iteration (all() for now)… ([`2c0939a`](https://github.com/Byron/gitoxide/commit/2c0939a146b5973de26bd03987e075a34a84bc88))
+ - [repository #190] refactor ([`8c532a4`](https://github.com/Byron/gitoxide/commit/8c532a4c78452dd11115cf36a906a27741858774))
+ - [repository #190] prepare reference iteration ([`427f146`](https://github.com/Byron/gitoxide/commit/427f14622fb98e0397de2cae4d36a29f5915d375))
+ - Bump git-hash v0.6.0 ([`6efd90d`](https://github.com/Byron/gitoxide/commit/6efd90db54f7f7441b76159dba3be80c15657a3d))
+ - [repository #190] obtain the kind fo hash used in a repo ([`a985491`](https://github.com/Byron/gitoxide/commit/a985491bcea5f76942b863de8a9a89dd235dd0c9))
+ - [repository #190] refactor ([`7a111b1`](https://github.com/Byron/gitoxide/commit/7a111b126cfb318acb2d09d119315150a38b7cd3))
+ - [repository #190] shortcut to create references ([`28afd8e`](https://github.com/Byron/gitoxide/commit/28afd8e7cf09a17410c4a6ad57cddda608371364))
+ - [ref #190] add forward log iter and localize iter types… ([`c3e240d`](https://github.com/Byron/gitoxide/commit/c3e240da47021226311681f3bcd48983f354243f))
+ - [repository #190] refactor ([`e751688`](https://github.com/Byron/gitoxide/commit/e751688a5378552b73cfddd07f38a0d0bb491b83))
+ - thanks clippy ([`023dedc`](https://github.com/Byron/gitoxide/commit/023dedc41aa859cd49d208392a586deaf77bd1bd))
+ - [ref #190] reverse reflog ergonomics ([`2de86f9`](https://github.com/Byron/gitoxide/commit/2de86f904f6ee63e292f9c701cc3524e8bfe87e4))
+ - [repository #190] ref log for HEAD specifically ([`946bbf1`](https://github.com/Byron/gitoxide/commit/946bbf19ed3f793b0eb1c5c90a655140e12d7e21))
+ - [repository #190] reflog tests ([`641edde`](https://github.com/Byron/gitoxide/commit/641edde5608ff22bf18cea845ba1925b84a7b9f2))
+ - [ref #190] First working sketch of reverse log iter access ([`4a36ded`](https://github.com/Byron/gitoxide/commit/4a36dedc17ce3124802d1b72330abc524fd98c6f))
+ - [ref #190] move remaining file store functions to extension trait ([`60fc215`](https://github.com/Byron/gitoxide/commit/60fc215ccac529b4a14cb9d8260ab9ddec86758a))
+ - thanks clippy ([`376c045`](https://github.com/Byron/gitoxide/commit/376c045cf589e51b639cf6c3633c4a8fcae7b6aa))
+ - [repository #190] refactor ([`15d4ac8`](https://github.com/Byron/gitoxide/commit/15d4ac8f4b08716f6b06938f01396fb8ba8e7086))
+ - [repository #190] a major step forward with `head()` access ([`43ac4f5`](https://github.com/Byron/gitoxide/commit/43ac4f5acbe3ace5d43ed3ed1bc394d721f0e273))
+ - [ref #190] cache peeled objects properly ([`2cb511e`](https://github.com/Byron/gitoxide/commit/2cb511efe5833f860f3c17b8e5f5b4cd643baddb))
+ - Bump git-ref v0.7.0 ([`ac4413c`](https://github.com/Byron/gitoxide/commit/ac4413ce4e45703d5fe722e7220d039217f0bdef))
+ - [repository #190] experiment with 'HEAD' API… ([`c55ce4d`](https://github.com/Byron/gitoxide/commit/c55ce4d8453c1ab4a107f5c6fb01521b422ee5c4))
+ - thanks clippy ([`14dff63`](https://github.com/Byron/gitoxide/commit/14dff63fbc0d318bbc8a2618e0d72aaa98948acf))
+ - [ref #190] Use Raw Reference everywhere for great simplification… ([`7aeea9c`](https://github.com/Byron/gitoxide/commit/7aeea9c36d4da04a806e68968356f8cc0dc11475))
+ - [repository #190] refactor ([`d6bef3a`](https://github.com/Byron/gitoxide/commit/d6bef3afe7168659a75e26fb3ae2aa722fecf853))
+ - [ref #190] introduce Raw reference type that simplifies everything… ([`8634341`](https://github.com/Byron/gitoxide/commit/86343416dec8026f32c57d164dec4bf9b75b6536))
+ - [ref #190] refactor ([`07126d6`](https://github.com/Byron/gitoxide/commit/07126d65946e981b339b6535986597cb328a1c9e))
+ - [ref #190] Allow for explicit expected previous values ([`1a4786f`](https://github.com/Byron/gitoxide/commit/1a4786fb3bdb3d3a86b026dbf04e6baef6d3c695))
+ - [repository #190] show that unconditional creation of references doesn't is lacking… ([`06b9270`](https://github.com/Byron/gitoxide/commit/06b9270e67823e9e911a9fa9d6eeeedcd93e62cb))
+ - [repository #190] another commit() test… ([`4ec631c`](https://github.com/Byron/gitoxide/commit/4ec631c92349bbffa69c786838d2127b0c51970e))
+ - [repository #190] produce nice reflog messages ([`e7a8b62`](https://github.com/Byron/gitoxide/commit/e7a8b62eb24f840f639aa436b4e79a4a567d3d05))
+ - [repository #190] commit::summary() ([`43f7568`](https://github.com/Byron/gitoxide/commit/43f7568bd11fc310bac8350991ff3d4183dcd17b))
+ - [repository #190] thanks clippy ([`0763ac2`](https://github.com/Byron/gitoxide/commit/0763ac260450b53b42f3c139deae5736fef056ce))
+ - [repository #190] first version of 'commit(…)' without reflog message handling ([`bfcf8f1`](https://github.com/Byron/gitoxide/commit/bfcf8f17c7a89027e5bbcb5f85e3d0ba4036e8a0))
+ - [refs #190] refactor; handle value-checks in dereffed symlinks correctly ([`63bedc7`](https://github.com/Byron/gitoxide/commit/63bedc7647bb584353289e19972adf351765a526))
+ - [repository #190] put git-lock into ST1… ([`26a6637`](https://github.com/Byron/gitoxide/commit/26a6637222081997ad7c08f4dc8d8facfb9cf94e))
+ - [repository #190] refactor ([`1e029b4`](https://github.com/Byron/gitoxide/commit/1e029b4beb6266853d5035c52b3d85bf98469556))
+ - [repository #190] A way to write objects and the empty tree specifically ([`7c559d6`](https://github.com/Byron/gitoxide/commit/7c559d6e1b68bc89220bca426257f383bce586ae))
+ - [various #190] rename 'local-offset' to 'local-time-support' ([`3a7d379`](https://github.com/Byron/gitoxide/commit/3a7d3793a235ac872437f3bfedb9dd8fde9b31b1))
+ - [repository #190] Make local-offset available on demand only… ([`1927be7`](https://github.com/Byron/gitoxide/commit/1927be7764f6af04ecc715dd52c631a3c8e16577))
+ - [repository #185] rustfmt ([`dfbb015`](https://github.com/Byron/gitoxide/commit/dfbb015a89db47c79015135870013ecc384c4aea))
+ - [repository #185] remove quick-error infavor of thiserror ([`212c44c`](https://github.com/Byron/gitoxide/commit/212c44c84b903681f6d35d934ee5f7ad6e1da791))
+ - [repository #185] on the way to removing quick-error ([`6ecd431`](https://github.com/Byron/gitoxide/commit/6ecd431661e7ddc2f97e5a78a7932d2a7f1f27f0))
+ - [repository #185] support for initializing bare repositories ([`9e8a39e`](https://github.com/Byron/gitoxide/commit/9e8a39e3cbd620bd48f379743df0d5783c33a86f))
+ - [repository #185] use git-config to handle bare repos more properly ([`8a5aac5`](https://github.com/Byron/gitoxide/commit/8a5aac55cf62bdd7287a363fa29f12aa39d4c583))
+ - [repository #185] sketch of how to open a repository… ([`48207b5`](https://github.com/Byron/gitoxide/commit/48207b54b97ac1b6354f6b53c13ccc4d1d8ea98f))
+ - [repository #185] refactor ([`63089ff`](https://github.com/Byron/gitoxide/commit/63089ff356ea0f62963ae213ea0dbb09f891ada6))
+ - [repository #185] refactor ([`7604935`](https://github.com/Byron/gitoxide/commit/7604935b12eacb26a98bedc5f77636b5583629a5))
+ - [repository #185] refactor repository initialization… ([`5ff7eaa`](https://github.com/Byron/gitoxide/commit/5ff7eaa86bddfa94aec97355a5d6adb117045693))
+
+
+## v0.8.1 (2021-08-28)
+
+- Introduce `EasyArcExclusive` type, now available thanks to `parking_lot` 0.11.2
+
+### Commit Statistics
+
+
+
+ - 2 commits contributed to the release.
+ - 1 day passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-repository v0.8.1 ([`b269a12`](https://github.com/Byron/gitoxide/commit/b269a1264f830bafcfe74f0f3ce01448c894146e))
+ - [repository #164] make EasyArcExclusive available ([`2fa3dcb`](https://github.com/Byron/gitoxide/commit/2fa3dcb40a34a7ec19382e5f6a71348ecf7a7c36))
+
+
+## v0.8.0 (2021-08-27)
+
+- Rename `object` to `objs` to be equivalent to `refs` and make space for the new `object` module
+- various minor version updates of pre-release dependencies
+
+### Commit Statistics
+
+
+
+ - 116 commits contributed to the release over the course of 10 calendar days.
+ - 10 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 4 times to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - [repository #174] keep assets ([`e0fca77`](https://github.com/Byron/gitoxide/commit/e0fca771f5ee068b0a9a0975930317d0883701cc))
+ - [repository #174] remove arc_lock code entirely ([`dcbe742`](https://github.com/Byron/gitoxide/commit/dcbe742eb5244f0b5c6563cf59962183b708f54f))
+ - [repository #174] conditionally compile future parking_lot version… ([`5375fc8`](https://github.com/Byron/gitoxide/commit/5375fc872b9af2526683326f58e9c3d7f20ef166))
+ - Bump git-repository v0.8.0 ([`cdb45ff`](https://github.com/Byron/gitoxide/commit/cdb45ffa0810e9fcc9fd25bff7b696c2d27eeef5))
+ - [repository #174] adjust various changelogs ([`081faf5`](https://github.com/Byron/gitoxide/commit/081faf5c3a21b34b7068b44d8206fb5770c392f5))
+ - Bump git-protocol v0.10.0 ([`82d5a0b`](https://github.com/Byron/gitoxide/commit/82d5a0bb38903a8389e43cd5416e02e5496e661a))
+ - Bump git-odb v0.21.0 ([`7b9854f`](https://github.com/Byron/gitoxide/commit/7b9854fb35e86958a5ca827ec9a55b1168f38395))
+ - [pack #179] refactor ([`ab6554b`](https://github.com/Byron/gitoxide/commit/ab6554b0cd5838f1ea4e82f6b5019798288076fa))
+ - [packetline #178] fix compile warnings ([`c8d2e72`](https://github.com/Byron/gitoxide/commit/c8d2e72d272243da7d853f78463552bfc58ed9d6))
+ - Bump git-traverse v0.8.0 ([`54f3541`](https://github.com/Byron/gitoxide/commit/54f3541f1448a8afa044d3958fa1be5b074e4445))
+ - Bump git-diff v0.9.0 ([`2e2e798`](https://github.com/Byron/gitoxide/commit/2e2e7983178b3af7e5684995de68ed5d020927ec))
+ - [object #177] cleanup CommitRefIter imports and git_object::Error ([`058f68a`](https://github.com/Byron/gitoxide/commit/058f68a9e1cd79fd5a2a1235da42358bc92ed255))
+ - [object #177] fix docs ([`2fd23ed`](https://github.com/Byron/gitoxide/commit/2fd23ed9ad556b8e46cf650e23f0c6726e304708))
+ - [object #177] migrate immutable::commit into crate::commit ([`45d3934`](https://github.com/Byron/gitoxide/commit/45d393438eac2c7ecd47670922437dd0de4cd69b))
+ - [object #177] tag::RefIter -> TagRefIter ([`28587c6`](https://github.com/Byron/gitoxide/commit/28587c691eb74e5cb097afb2b63f9d9e2561c45d))
+ - [object #177] move mutable objects to crate::* ([`c551c02`](https://github.com/Byron/gitoxide/commit/c551c0236c64f3237cb9be7f35159f753d4b871f))
+ - [object #177] migrate immutable::tree to crate::tree ([`fa5cd06`](https://github.com/Byron/gitoxide/commit/fa5cd0648d5c855060ab2b75ee933851987c2dcf))
+ - [object #177] move immutable::* to crate::*Ref, start `iter` adjustments ([`461dc53`](https://github.com/Byron/gitoxide/commit/461dc53ba3bc07d55fdb4aad7570ba9176a8b360))
+ - [object #177] rename immutable::* to immutable::*Ref ([`6deb012`](https://github.com/Byron/gitoxide/commit/6deb01291fb382b7fb9206682e319afa81bacc05))
+ - Release git-object v0.13.0 ([`708fc5a`](https://github.com/Byron/gitoxide/commit/708fc5abd8af4dd7459f388c7092bf35915c6662))
+ - Merge branch 'git-ref-refactor' ([`5dbf753`](https://github.com/Byron/gitoxide/commit/5dbf753ce2035ffd07e4bce7ceb3bcd4e309c16e))
+ - [ref #175] follow (try_)find(_what) naming convention ([`679895c`](https://github.com/Byron/gitoxide/commit/679895cf866d643e768e353af614a55aeed2ba5c))
+ - [ref #175] make 'mutable' module private ([`a80dbcf`](https://github.com/Byron/gitoxide/commit/a80dbcf083bfcf2e291013f7b13bba9e787c5cb4))
+ - Release git-actor v0.5.0 ([`a684b0f`](https://github.com/Byron/gitoxide/commit/a684b0ff96ebfc5e4b3ce78452dc21ce856a6869))
+ - [ref #175] refactor ([`292e567`](https://github.com/Byron/gitoxide/commit/292e567eaa04a121fb4d7262bb316d37dd8ad11f))
+ - Release git-actor v0.4.0 ([`16358c9`](https://github.com/Byron/gitoxide/commit/16358c9bf03604857d51bfa4dbfd2fc8c5210da7))
+ - [actor #173] rename immutable::Signature to SignatureRef! ([`96461ac`](https://github.com/Byron/gitoxide/commit/96461ace776d6b351b313d4f2697f2d95b9e196e))
+ - Release git-lock v1.0.0 ([`f38f72c`](https://github.com/Byron/gitoxide/commit/f38f72c73f69775358d8b047de2e354364fcafc2))
+ - Release git-tempfile v1.0.0 ([`1238535`](https://github.com/Byron/gitoxide/commit/123853539dc30ddea2d822ab177ee09b191bdf1b))
+ - [smart-release #171] it's about time we get some tests ([`48a489b`](https://github.com/Byron/gitoxide/commit/48a489b4247ed6feff222924bdcdb53ce45c6ce6))
+ - [stability #171] Prime git-tempfile and git-lock for release ([`01278fe`](https://github.com/Byron/gitoxide/commit/01278fe4e28bf97ce6a2b8947198683646e361ee))
+ - [stability #171] mark git-hash and git-actor as ST1 as well ([`32caae1`](https://github.com/Byron/gitoxide/commit/32caae1c32aae38bde59756e52848bef1cef049b))
+ - [stability #171] git-ref is now ST1 and available through git-repository ([`50154cd`](https://github.com/Byron/gitoxide/commit/50154cd02fdd90930a1d7c5a4406d53c8067cb4b))
+ - [smart-release #171] Try to avoid unstable git-repository features… ([`c8f325b`](https://github.com/Byron/gitoxide/commit/c8f325bed5d644eded035109702098f9fed3fba3))
+ - Merge branch 'main' into stability ([`11bae43`](https://github.com/Byron/gitoxide/commit/11bae437e473fef6ed09c178d54ad11eee001b1d))
+ - [stability #171] Don't provide access to less stable crates in `Respository` ([`e4c5b58`](https://github.com/Byron/gitoxide/commit/e4c5b58ad935c907dfbd0d61049453dcb64a7e19))
+ - cleanup imports ([`e669303`](https://github.com/Byron/gitoxide/commit/e6693032f1391416fd704c21617051ddfb862a3a))
+ - [stability #171] Don't leak unstable plumbing crates in git-repository… ([`71eb30f`](https://github.com/Byron/gitoxide/commit/71eb30f1caa41c1f9fe5d2785b71c9d77922c2af))
+ - Release git-pack v0.9.0 ([`7fbc961`](https://github.com/Byron/gitoxide/commit/7fbc9617da97d4ba4bb3784f41d4163c0839c03c))
+ - [repository #164] top-level easy docs ([`6b71c51`](https://github.com/Byron/gitoxide/commit/6b71c51f703aa3b6a7d5a110d04294dd7ea4e8b0))
+ - [repository #165] see if `git-config` can already be placed… ([`d287a4a`](https://github.com/Byron/gitoxide/commit/d287a4aec70e5dd33976a25d9a849c44d62d77c9))
+ - [repository #165] add limitations along with possible workarouds ([`7578f1e`](https://github.com/Byron/gitoxide/commit/7578f1e2e578010eee087a9176d53a5862ec8862))
+ - [repository #165] assure packed-refs are always uptodate ([`a5605df`](https://github.com/Byron/gitoxide/commit/a5605df9b83a25f1726b181b78d751987d71a32b))
+ - [repository #165] Allow cloning packed-refs and try to see how it differs… ([`7ec32b7`](https://github.com/Byron/gitoxide/commit/7ec32b7662995b5a60aba1bd932830e68ab1dbdc))
+ - Release git-ref v0.6.0 ([`0bb4c13`](https://github.com/Byron/gitoxide/commit/0bb4c133da96f6a96d9f1767848ada792a27c2be))
+ - [ref #165] refactor ([`66624c3`](https://github.com/Byron/gitoxide/commit/66624c3ef1faf7048ee86ed73cf5f622802c061e))
+ - Revert "[repository #165] PROOF: GATs will work as expected!" ([`853f072`](https://github.com/Byron/gitoxide/commit/853f0723d3d202b1cc2e653109ae92aa14d4d437))
+ - [repository #165] PROOF: GATs will work as expected! ([`7f56dbd`](https://github.com/Byron/gitoxide/commit/7f56dbd82db2abc18b8e6d228c8a5f54b3dbf32a))
+ - [repository #165] refactor ([`1547d0b`](https://github.com/Byron/gitoxide/commit/1547d0b062e35bad2229dac532e6f30bf105db73))
+ - [repository #165] refactor; fine grained allow(missing_docs)… ([`aa0511f`](https://github.com/Byron/gitoxide/commit/aa0511f80f11de8e83fc333e78db369ceb9b2794))
+ - [repository #165] prepare for writing light docs for Easy ([`f8834c9`](https://github.com/Byron/gitoxide/commit/f8834c9c8d2ab2ce87857c6773c6204f60df240e))
+ - [repository #165] refactor ([`3a0160e`](https://github.com/Byron/gitoxide/commit/3a0160ed1c5bc33d330ad4e9189c4937d194e98d))
+ - [repository #165] fmt ([`a02d5aa`](https://github.com/Byron/gitoxide/commit/a02d5aa8ef0e4a1118a9d8523c3f34b836461952))
+ - [repository #165] Don't panic on repo borrow error… ([`b2f644a`](https://github.com/Byron/gitoxide/commit/b2f644a73c2b1945ab71c5f5719c9b2b32c01b07))
+ - thanks clippy ([`b496d99`](https://github.com/Byron/gitoxide/commit/b496d9952924afdb67e9ba8ea0b9b61c8c8fb1f2))
+ - [repository #165] Write about the GAT plan to make this better one day ([`d793ecd`](https://github.com/Byron/gitoxide/commit/d793ecd00f55b5bf7c6dcaee8772975e97bd5e30))
+ - [repository #165] quick test to see if Access2 can become Access… ([`45acc7a`](https://github.com/Byron/gitoxide/commit/45acc7a9d6a89977563872c2eac389a2b78b9e27))
+ - [repository #165] Generalizing over mutable Repos is possible too… ([`0f7efe3`](https://github.com/Byron/gitoxide/commit/0f7efe3f2e2608213ad5c75b52db876dd4214908))
+ - [repository #165] show that Access2 works for all Easy* types… ([`b8ceefe`](https://github.com/Byron/gitoxide/commit/b8ceefed275953aa36d823d51b466cd100729905))
+ - [repository #165] First success with creating a shared borrow to the repo ([`f2a38b2`](https://github.com/Byron/gitoxide/commit/f2a38b20aee484e0354d3e2e3db9cc880ae95310))
+ - Revert "[repository #165] FAIL Look into `owned_ref` crate" ([`a1443e4`](https://github.com/Byron/gitoxide/commit/a1443e4982fa4d1a1615554a37294d56fd9026eb))
+ - [repository #165] FAIL Look into `owned_ref` crate ([`09aa714`](https://github.com/Byron/gitoxide/commit/09aa714f2db5ad220b0e76a65e01e394663f08b4))
+ - [repository #165] FAIL AsRef works for basic refs but… ([`02979b6`](https://github.com/Byron/gitoxide/commit/02979b61e6bc4e1de3b3badc784a950477b31cad))
+ - [repository #165] FAIL try to generalize with Borrow… ([`295ba95`](https://github.com/Byron/gitoxide/commit/295ba95a341775b566c18e897a2d58a94e6d98f9))
+ - [repository #165] FAIL See if EasyExclusive can work… ([`016debb`](https://github.com/Byron/gitoxide/commit/016debbfce7a29502742408da304c80405063230))
+ - [repository #165] introduce EasyShared ([`a119ad9`](https://github.com/Byron/gitoxide/commit/a119ad94096a3464b98f6a6bc26c92ba6efa9474))
+ - [repository #165] First thoughts about stale caches ([`7f8b63e`](https://github.com/Byron/gitoxide/commit/7f8b63e23ef3561117249668d14507cec1508ad3))
+ - [repository #165] hide all easy::State fields behind result-enforcing methods ([`000c537`](https://github.com/Byron/gitoxide/commit/000c537ab766a50679764118af50731b3bab39e5))
+ - [repository #165] pack cache access only with errors ([`2353e50`](https://github.com/Byron/gitoxide/commit/2353e5092599228f147ef58c0f0cd45c63c126e2))
+ - [repository #165] assure packed-refs is only used non-panicking ([`a355d94`](https://github.com/Byron/gitoxide/commit/a355d943b986307216161bad38e5bb89f8608b49))
+ - [repository #165] refactor ([`16fce63`](https://github.com/Byron/gitoxide/commit/16fce637561af29727a8fa025f6ddece853fcc20))
+ - [repository #165] a sample of a simpler way to create a tag ([`fb8f584`](https://github.com/Byron/gitoxide/commit/fb8f58412cdd32991a182a41cbc0d463127a4e0e))
+ - [smart-release #165] Use generic edit-reference functionality ([`be3e57f`](https://github.com/Byron/gitoxide/commit/be3e57f6221dc87505ba1aad1166e28c328c3b54))
+ - [repository #165] sketch generic ref file editing ([`3a026ae`](https://github.com/Byron/gitoxide/commit/3a026aea2a98648a6b624bca9661555f5a147494))
+ - [repository #165] refactor ([`00ec15d`](https://github.com/Byron/gitoxide/commit/00ec15dcfdb839095e508139d238df384ea418eb))
+ - [repository #165] refactor ([`0f13104`](https://github.com/Byron/gitoxide/commit/0f13104375216ccf099ebc2fcf0d180ed0de5237))
+ - [repository #165] An experiment on transforming panics into errors… ([`1f52226`](https://github.com/Byron/gitoxide/commit/1f5222660970e24eb2d82fed3917f234dce7e0eb))
+ - [repository #165] offer panicking type conversions for objects ([`f802f8c`](https://github.com/Byron/gitoxide/commit/f802f8c8c382f8063fa615fda022857a740a974a))
+ - [repository #165] try a more common naming convention for fallbile things… ([`fc70393`](https://github.com/Byron/gitoxide/commit/fc703937a078937840ea1c254f11e64aaf31de90))
+ - [repository #165] refactor ([`6207735`](https://github.com/Byron/gitoxide/commit/6207735f7d955e8a1676c8ad549ce6c1137da760))
+ - thanks clippy ([`41d7a44`](https://github.com/Byron/gitoxide/commit/41d7a443aa63b6ee997fd38ceee05b9b1be3e577))
+ - [repository #162] cleanup imports ([`983d11a`](https://github.com/Byron/gitoxide/commit/983d11a1f46c1ad21dbf2d57b63ecf979fab48b9))
+ - [smart-release #162] use TreeRef capabilities to lookup path ([`51d1943`](https://github.com/Byron/gitoxide/commit/51d19433e6704fabb6547a0ba1b5c32afce43d8b))
+ - [repository #162] what could be a correct implementation of a tree path lookup ([`1f638ee`](https://github.com/Byron/gitoxide/commit/1f638eee0aa5f6e1cc34c5bc59a18b5f22af4cbc))
+ - [repository #162] detachable ObjectRefs and a few conversions ([`ec123bb`](https://github.com/Byron/gitoxide/commit/ec123bb615035684e52f2d786dfb41d0449823d2))
+ - [repository #162] finally let smart-release use the correct abstraction for peeling ([`ba243a3`](https://github.com/Byron/gitoxide/commit/ba243a35ff6f059e5581c6f7ff80e1253ceca6f8))
+ - [repository #162] Add id field to ObjectRef… ([`f5ba98e`](https://github.com/Byron/gitoxide/commit/f5ba98ebd0e1d7d0491871be58476cb6882b8436))
+ - [repository #162] Make clear that Objects are actually references… ([`d1e6843`](https://github.com/Byron/gitoxide/commit/d1e68435d0b7d9dcc9e0099be3c0c5723dc08e93))
+ - [repository #162] another attempt to find a decent peeling abstraction… ([`716d623`](https://github.com/Byron/gitoxide/commit/716d623fb189eb3002d2137827dbfeb143f6ed12))
+ - [repository #162] attach the Object to 'Access' ([`9a12564`](https://github.com/Byron/gitoxide/commit/9a125640da19d5633e51df40dee5332eb9600462))
+ - [repository #162] refactor ([`a32d361`](https://github.com/Byron/gitoxide/commit/a32d361fd5cb0eb1a4112d834b53c1625372a7bc))
+ - [repository #162] trying new names ([`b3f453b`](https://github.com/Byron/gitoxide/commit/b3f453b33f8cda04526110a82f0e0a46a3bb2e34))
+ - [repository #162] put impl for finding object data into the extension trait ([`91b9446`](https://github.com/Byron/gitoxide/commit/91b9446fc7035047ebefaa7907e6a8224b56cf27))
+ - [repository #162] experiment with finding objects… ([`312a692`](https://github.com/Byron/gitoxide/commit/312a69256a67a0f9d3f3f5c5f9eaf51b50971c5e))
+ - thanks clippy ([`f2fb026`](https://github.com/Byron/gitoxide/commit/f2fb0266ba64d002a9913699bcf5843647843beb))
+ - [repository #162] Cannot ever store a RefCell Ref in an object… ([`5c17199`](https://github.com/Byron/gitoxide/commit/5c171995383fa9a3698b6aaf3fbd9537110c0299))
+ - [repository #162] experiemnt with optionally keeping data in Object ([`b8a8e08`](https://github.com/Byron/gitoxide/commit/b8a8e08e1d972e5069b136c30407c079825b7e1d))
+ - [smart-release #162] Object can be used like a git_hash::ObjectId ([`c7bc730`](https://github.com/Byron/gitoxide/commit/c7bc730836f05fe9d967320a6858443a649a59ce))
+ - [smart-release #162] format everything ([`8ff83e5`](https://github.com/Byron/gitoxide/commit/8ff83e5c511ae29979348789bd6e7a2f72b16f1c))
+ - [smart-release #162] don't throw away work… ([`b43b780`](https://github.com/Byron/gitoxide/commit/b43b780c0382683edc859e3fbd27739716a47141))
+ - [smart-release #162] a demo of attaching and detaching objects… ([`ff2927c`](https://github.com/Byron/gitoxide/commit/ff2927ce3fede654d491559fde1c7b07be6a6979))
+ - [smart-release #162] an actual Data type… ([`7fd996f`](https://github.com/Byron/gitoxide/commit/7fd996f5f631f83665e81c0f89c34cc47f270d2b))
+ - [smart-release #162] unify 'ext' visibility ([`ca082a7`](https://github.com/Byron/gitoxide/commit/ca082a75ff29de2a471cec4331a80f84477cca56))
+ - thanks clippy ([`1f2d458`](https://github.com/Byron/gitoxide/commit/1f2d4584f8b650f7e751c8d2df9a5d27725f4f2f))
+ - [smart-release #162] a sketch for accessing objects data… ([`ba27101`](https://github.com/Byron/gitoxide/commit/ba27101e08b2bab5d33b53fedcc0c6aa13b8f35e))
+ - [smart-release #162] peeling objects to a certain target kind… ([`5785136`](https://github.com/Byron/gitoxide/commit/57851361f3fc729b964fd0ca5dca9f084fe20f5e))
+ - [smart-release #162] a single import path for ReferenceExt ([`7060797`](https://github.com/Byron/gitoxide/commit/7060797031e5bdbb8d635cc2da3269996bdfc4cc))
+ - [smart-release #162] rename git-repository::object -> objs ([`ac70d81`](https://github.com/Byron/gitoxide/commit/ac70d81791cad04ffdeb04916d7a2a6b533eee6c))
+ - [smart-release #162] replace reference peeling with git_easy ([`7cfd5f9`](https://github.com/Byron/gitoxide/commit/7cfd5f9e0a7f828152594f0393a919617c60a9d6))
+ - [smart-release #162] smart-release uses Easy repository in 'plumbing' mode ([`4fb672a`](https://github.com/Byron/gitoxide/commit/4fb672a6e7116722577cbbeeee67887871f583bf))
+ - [smart-release #162] refactor ([`ef623a6`](https://github.com/Byron/gitoxide/commit/ef623a6835ab86225ac65b933b0df62c00baa1af))
+ - [smart-release #162] reduce visibility of Cache ([`397fbfe`](https://github.com/Byron/gitoxide/commit/397fbfe6bde7e03c23b66aa60f70d2e6649f5eef))
+ - [smart-release #162] more granular cache control WORKS ([`25dce2a`](https://github.com/Byron/gitoxide/commit/25dce2a4b4522fb9f51fab506dddd8c6ebfb0f54))
+ - Revert "[smart-release #162] FAIL: definitely need better granularity" ([`499993f`](https://github.com/Byron/gitoxide/commit/499993fe0b71ac08b3940119bc682533223a3ddb))
+ - [smart-release #162] FAIL: definitely need better granularity ([`5f27871`](https://github.com/Byron/gitoxide/commit/5f27871b773c18a9f065a0c8e86101382d23c71f))
+ - [smart-release #162] FAIL: promising at first, but not really working… ([`fa01f76`](https://github.com/Byron/gitoxide/commit/fa01f7684c0b7d3b90ec7bde651684a84014a576))
+
+
+## v0.7.2 (2021-08-17)
+
+### Commit Statistics
+
+
+
+ - 20 commits contributed to the release over the course of 1 calendar day.
+ - 3 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-repository v0.7.2 ([`c5791b1`](https://github.com/Byron/gitoxide/commit/c5791b1903e91987f2684eaa8d5d8d21255ae40f))
+ - [smart-release #162] separate mutable state more cleanly… ([`f00de95`](https://github.com/Byron/gitoxide/commit/f00de9575358dec477667e2e7b5090fb75b46ad6))
+ - [smart-release #162] FAIL: one level down, using the cache isn't really working… ([`65db010`](https://github.com/Byron/gitoxide/commit/65db0104146248b273081fc6616a6ed484aa948e))
+ - [smart-release #162] a promising lead, this might just work ([`0c4f77b`](https://github.com/Byron/gitoxide/commit/0c4f77b27815d708be4fa6ed26414231f0d51a38))
+ - bump git-protocol to v0.9.0 as there are breaking changes ([`b4e3340`](https://github.com/Byron/gitoxide/commit/b4e33408b8eb12c9418704f663322385fd1dfb25))
+ - [smart-release #162] a barely working version of refs handling… ([`3e01025`](https://github.com/Byron/gitoxide/commit/3e0102565f0ecdac61e83ed9fb06cc7d788638c7))
+ - [smart-release #162] a sign - can't store references, but… ([`7862652`](https://github.com/Byron/gitoxide/commit/7862652fad734a51ead99d6c3988c1bfe92ad2ad))
+ - Revert "[smart-release #162] FAIL try to use Rc>…" ([`58529a1`](https://github.com/Byron/gitoxide/commit/58529a1e67b77ba1cfe0b794b6ce513162a65139))
+ - [smart-release #162] FAIL try to use Rc>… ([`180be72`](https://github.com/Byron/gitoxide/commit/180be72d8fd37f326484ebdf99a1e1fc8843958d))
+ - [smart-release #162] refactor ([`8f558af`](https://github.com/Byron/gitoxide/commit/8f558afc88276a66c42004e0ac66d89382d83426))
+ - thanks clippy ([`b63cd40`](https://github.com/Byron/gitoxide/commit/b63cd40909d02af85f10b77bc40e1630caf355cf))
+ - [smart-release #162] refactor ([`35ff637`](https://github.com/Byron/gitoxide/commit/35ff637ab8deaef23a29cfb9bd91f5ea07da7a0c))
+ - [smart-release #162] First compiling version, non-threadsafe… ([`d2b2ce9`](https://github.com/Byron/gitoxide/commit/d2b2ce9c1fd78fa63ad24d40eac62f5cbd4f4682))
+ - [smart-release #162] FAIL: RefCell as self param also doesn't work :D… ([`ec0c863`](https://github.com/Byron/gitoxide/commit/ec0c8632360e7c4c7ecf02d0915202d616730644))
+ - [smart-release #162] back to a more humble, hard-coded approach… ([`bdceb7c`](https://github.com/Byron/gitoxide/commit/bdceb7cf6a3c83536c0a3b0cd5f392040d25bb00))
+ - Revert "[smart-release #162] FAIL: cannot use extension traits…" ([`2878a14`](https://github.com/Byron/gitoxide/commit/2878a14613ed1083dd4ff7bc11b09820bade9058))
+ - [smart-release #162] FAIL: cannot use extension traits… ([`e115631`](https://github.com/Byron/gitoxide/commit/e1156314f38e998f1b15a49a126382aa2c10022a))
+ - [smart-release #162] FAIL: try to do things borrowck doesn't like… ([`853ae9c`](https://github.com/Byron/gitoxide/commit/853ae9cfb12f9ce981d1fa20b9d73d7e3d371f77))
+ - [smart-release #162] a sketch of an API that seems to satisfy the constraints… ([`bec8473`](https://github.com/Byron/gitoxide/commit/bec847386a198b4ca5b70bd2a8bf337c007d0501))
+ - Apply nightly rustfmt rules. ([`5e0edba`](https://github.com/Byron/gitoxide/commit/5e0edbadb39673d4de640f112fa306349fb11814))
+
+
+## v0.7.1 (2021-08-13)
+
+### Commit Statistics
+
+
+
+ - 19 commits contributed to the release over the course of 2 calendar days.
+ - 2 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - Release git-repository v0.7.1 ([`4369697`](https://github.com/Byron/gitoxide/commit/4369697e6c5f80a899a5e38fa9fe8be44c6504f1))
+ - remove dev-dependency cycles by removing their version ([`c40faca`](https://github.com/Byron/gitoxide/commit/c40faca41632cd2a226daf4ddf5293b65d1fdc82))
+ - Release git-diff v0.8.0, git-odb v0.20.0, git-pack v0.8.0, git-traverse v0.7.0 ([`f123f69`](https://github.com/Byron/gitoxide/commit/f123f69c7a4f9fd1c98bd2f60ebc953a6739fe04))
+ - Release git-diff v0.7.0, git-odb v0.19.0, git-pack v0.7.0, git-traverse v0.6.0 ([`c67291f`](https://github.com/Byron/gitoxide/commit/c67291ff9bcdff9a747d87241f6a71015607af05))
+ - Release git-object v0.12.0 ([`7006150`](https://github.com/Byron/gitoxide/commit/7006150ac314d19814608723f69f6e70a72f9262))
+ - Release git-actor-0.3.1 ([`727087d`](https://github.com/Byron/gitoxide/commit/727087dca243da4bc40bc87611a2f66234565be7))
+ - (cargo-release) version 0.18.0 ([`b327590`](https://github.com/Byron/gitoxide/commit/b327590d02fec5536c380b2d39dd7be089ca7c40))
+ - (cargo-release) version 0.6.0 ([`d704bca`](https://github.com/Byron/gitoxide/commit/d704bca7de0a6591f35345c842d6418b36ecd206))
+ - (cargo-release) version 0.6.0 ([`4b71e15`](https://github.com/Byron/gitoxide/commit/4b71e15c3ba4a17ff2da5a5ef79986a2832fa3f2))
+ - (cargo-release) version 0.5.0 ([`e21142b`](https://github.com/Byron/gitoxide/commit/e21142ba1a113b2afc4725d4d4225dff519c513a))
+ - (cargo-release) version 0.17.0 ([`c52a491`](https://github.com/Byron/gitoxide/commit/c52a49176bd294bb36db74b4293cdb684a2ab7f6))
+ - (cargo-release) version 0.5.0 ([`c2f94a5`](https://github.com/Byron/gitoxide/commit/c2f94a51bce287be301090450cb00cde57e92f76))
+ - (cargo-release) version 0.4.0 ([`d69d0ac`](https://github.com/Byron/gitoxide/commit/d69d0ac21989243fdafa514fa41579fd51bc2558))
+ - (cargo-release) version 0.6.0 ([`d58f37e`](https://github.com/Byron/gitoxide/commit/d58f37e3b5a000fbe069aa869bd84f66d5c3210b))
+ - (cargo-release) version 0.5.0 ([`1687e59`](https://github.com/Byron/gitoxide/commit/1687e599be98d97925fbab594f31cf5558e9d2b1))
+ - (cargo-release) version 0.4.0 ([`28e58f6`](https://github.com/Byron/gitoxide/commit/28e58f6b43a44e010da749a5618df02441f0d2e8))
+ - (cargo-release) version 0.11.0 ([`a5be31c`](https://github.com/Byron/gitoxide/commit/a5be31c4cf7c0b538a1ed4a52ff5c3a992c6feff))
+ - (cargo-release) version 0.3.0 ([`64efc05`](https://github.com/Byron/gitoxide/commit/64efc0534ddc372b6e668b23c1e9d276098679c9))
+ - (cargo-release) version 0.4.0 ([`70ef344`](https://github.com/Byron/gitoxide/commit/70ef3442775b54ba9e4ee9ebfffb37af9804cc5b))
+
+
+## v0.7.0 (2021-08-10)
+
+### Commit Statistics
+
+
+
+ - 40 commits contributed to the release over the course of 63 calendar days.
+ - 74 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Thanks Clippy
+
+
+
+[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic.
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - (cargo-release) version 0.7.0 ([`1c5dfb8`](https://github.com/Byron/gitoxide/commit/1c5dfb86028f266435475ca8bdddc57f95002330))
+ - (cargo-release) version 0.3.0 ([`0e9c73a`](https://github.com/Byron/gitoxide/commit/0e9c73abd17e0dd21952275077ae53ad7e7aa1af))
+ - (cargo-release) version 0.5.0 ([`ae02dab`](https://github.com/Byron/gitoxide/commit/ae02dabae961089a92a21e6a60a7006de4b56dad))
+ - (cargo-release) version 0.16.0 ([`1231dbd`](https://github.com/Byron/gitoxide/commit/1231dbd16dacefb39adec8e067c312d313a82e3c))
+ - (cargo-release) version 0.5.0 ([`0e11e98`](https://github.com/Byron/gitoxide/commit/0e11e98f0562c7baa9c90e18db6240731d165217))
+ - (cargo-release) version 0.2.0 ([`8ff5115`](https://github.com/Byron/gitoxide/commit/8ff511583e6d859e43ffda0ef75e2fecce3ed03c))
+ - [repository #149] pre-emptively fix windows ([`b4d3934`](https://github.com/Byron/gitoxide/commit/b4d39345d723981bba1db8d313ef7ec4cd83cc82))
+ - [repository #149] only canonicalize if absolutely required ([`d537fac`](https://github.com/Byron/gitoxide/commit/d537fac34e3fb18bd02281f7c74535b59510cff9))
+ - [repository #149] canonicalize only when needed ([`57f42bd`](https://github.com/Byron/gitoxide/commit/57f42bdeda1895ca6aba84b58ad44762a17480c2))
+ - [repository #149] prepare for canonicalizing only when needed ([`cac9d70`](https://github.com/Byron/gitoxide/commit/cac9d702f62cb2527b9c6357bfcbc9d31da69b01))
+ - [repository #149] refactor ([`3c368ec`](https://github.com/Byron/gitoxide/commit/3c368ecb7a07aaff73f0db4432a6184479eb3929))
+ - [repository] Fix TreeExt trait name - it's actually for TreeIters ([`f8e0747`](https://github.com/Byron/gitoxide/commit/f8e07475f8867fc98a9264b1270977b48283a94e))
+ - Canonicalize path when discovering repositories ([`7bfaa14`](https://github.com/Byron/gitoxide/commit/7bfaa14aca1e96c1998e464971808f67c1c4077f))
+ - thanks clippy ([`e1964e4`](https://github.com/Byron/gitoxide/commit/e1964e43979b3e32a5d4bfbe377a842d2c0b10ea))
+ - [ref] fix build ([`1dcc590`](https://github.com/Byron/gitoxide/commit/1dcc590133ff36e2b2c892b3f51df737a46ccc4c))
+ - [ref] refactor ([`e26c72f`](https://github.com/Byron/gitoxide/commit/e26c72fb1bf9392932ffe42843f3dec52c7bbd7d))
+ - [ref] and it compiles again, may todos left ([`16618b9`](https://github.com/Byron/gitoxide/commit/16618b916ff67316717d95575fc1344d956d2c49))
+ - [ref] fix build ([`83002df`](https://github.com/Byron/gitoxide/commit/83002df0296a431de839ebb3522f57d42a17515f))
+ - [ref] rename find_one to 'find' in git-ref… ([`ae7746a`](https://github.com/Byron/gitoxide/commit/ae7746a0815bb94659de67383ba372ac522d53b8))
+ - [ref] refactor ([`758c090`](https://github.com/Byron/gitoxide/commit/758c0907df8dc6987f374e326304e0f9fad29812))
+ - Revert "[ref] parameterize all uses of hash length…" ([`21f187e`](https://github.com/Byron/gitoxide/commit/21f187e6b7011bb59ed935fc1a2d0a5557890ffe))
+ - [ref] parameterize all uses of hash length… ([`5c7285e`](https://github.com/Byron/gitoxide/commit/5c7285e7233390fd7589188084fcd05febcbbac2))
+ - [ref] another deletion test succeeds ([`6037900`](https://github.com/Byron/gitoxide/commit/60379001d2729627c042f304217d6459f99f01bf))
+ - [ref] file store can ignore all writes; sketch transaction API ([`52a81e9`](https://github.com/Byron/gitoxide/commit/52a81e98f38657023d3eb384fd6db69917dd57ca))
+ - [actor] fix gix hours ([`b4e95fd`](https://github.com/Byron/gitoxide/commit/b4e95fdbb6664adcb2603d9cb6e6a69182de050f))
+ - (cargo-release) version 0.4.0 ([`4512798`](https://github.com/Byron/gitoxide/commit/45127986daba0a409f5b405d463fa23f5c4a053b))
+ - [lock] cleanup signal handling even more… ([`9fb13d2`](https://github.com/Byron/gitoxide/commit/9fb13d27ccce5b0742ee9289fca891dbeb8a65de))
+ - (cargo-release) version 0.3.0 ([`92f3a83`](https://github.com/Byron/gitoxide/commit/92f3a830457766c88c68f8424828bfd9b5145f86))
+ - (cargo-release) version 0.2.0 ([`7c2eb36`](https://github.com/Byron/gitoxide/commit/7c2eb36274d13646956ac850bee90abbbac91c5b))
+ - fix docs ([`e68d460`](https://github.com/Byron/gitoxide/commit/e68d460716dc51c7f4757c11f3c8af6c3881e2cf))
+ - fix build ([`dbfa49a`](https://github.com/Byron/gitoxide/commit/dbfa49acf58b2c0763c5e98e5276860b43dfb27b))
+ - Remove mentions of interrupt handling feature toggles ([`833ac04`](https://github.com/Byron/gitoxide/commit/833ac0464b42bd3ecc76c6263b4b06e8ab4ff182))
+ - Fix everything up so that… ([`5930563`](https://github.com/Byron/gitoxide/commit/5930563601d6c2148cf39e109f69f8b7c7dfcb36))
+ - A first attempt to make intrerupt tools work, but… ([`8fb8d37`](https://github.com/Byron/gitoxide/commit/8fb8d374ecfeffa3ae1bd07bf9bc5014351730f5))
+ - First step towards moving git-features::interrupt… ([`8a741d0`](https://github.com/Byron/gitoxide/commit/8a741d0c5423ed7c35d9382307c760a6b9460ccd))
+ - [pack] add --statistics flag to pack-create ([`51a3077`](https://github.com/Byron/gitoxide/commit/51a307730b8514acffa75c78ecca3f02b1eb467b))
+ - [async-client] frame for async connect ([`9ada080`](https://github.com/Byron/gitoxide/commit/9ada0805fc5896f8ef1a31dc821b789b7f0438a6))
+ - Separate networking via feature toggles and pass that through in the main crate ([`2c749f1`](https://github.com/Byron/gitoxide/commit/2c749f10dd03ea0b027fb046e8c40c77869fb2e9))
+ - (cargo-release) version 0.3.0 ([`6b33678`](https://github.com/Byron/gitoxide/commit/6b33678f83e6d261ca15c4a7634ff5b4e66d81dd))
+ - (cargo-release) version 0.2.0 ([`3286e42`](https://github.com/Byron/gitoxide/commit/3286e42547b59df6365087cbae9ce1c9c959faad))
+
+
+## v0.6.0 (2021-05-28)
+
+### Commit Statistics
+
+
+
+ - 31 commits contributed to the release.
+ - 49 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - (cargo-release) version 0.6.0 ([`d35c55d`](https://github.com/Byron/gitoxide/commit/d35c55d8ff4b52e25befb8bff839d805b9f3caf4))
+ - [git-repository] better docs ([`f60a7c5`](https://github.com/Byron/gitoxide/commit/f60a7c567a2ae856840b276479582b87bb0530f5))
+ - [git-repository] gitoxide-core uses more of git-repository ([`bb5b074`](https://github.com/Byron/gitoxide/commit/bb5b0747dfd3a3985a904b7748f296a591fcb26e))
+ - [git-repository] replaces git-features and git-protocol in gitoxide-core ([`081d20f`](https://github.com/Byron/gitoxide/commit/081d20f927f222daa69f2a1a492957fd3146bfc1))
+ - [git-repository] used by gix-hours ([`24e0258`](https://github.com/Byron/gitoxide/commit/24e0258b9691b82df5c35a35111d19df56087cdc))
+ - [git-repository] refactor ([`b5ebcfa`](https://github.com/Byron/gitoxide/commit/b5ebcfa278a0be85ea10893fd40a8b3e2e28efd5))
+ - [git-repository] now used by gixp-organize ([`aa91fad`](https://github.com/Byron/gitoxide/commit/aa91fad3cf237f6d6f9d588ed390baa6e55f6540))
+ - [git-repository] make it easy to get maximum performance in apps using this crate ([`dc150a5`](https://github.com/Byron/gitoxide/commit/dc150a5913ac5db6211c5881873254bc8377aad2))
+ - [git-repository] prevent other implementations of extension traits; refactor ([`e14df75`](https://github.com/Byron/gitoxide/commit/e14df75fa999508a1e3102add4829ba55ec3aa50))
+ - [git-repository] finish 'diffing' program upgrade ([`7eea39a`](https://github.com/Byron/gitoxide/commit/7eea39a8d945f28b376698af9b1a0f67ffaa7e6f))
+ - [git-repository] more details on how this crate is intended ([`cd85050`](https://github.com/Byron/gitoxide/commit/cd85050a506ef99192909db6d8373a99282df53d))
+ - [git-repository] refactor ([`b9f4d25`](https://github.com/Byron/gitoxide/commit/b9f4d25ae80c3dc6e03b734202eae44d444cb442))
+ - [git-repository] try out an API for ancestor iteration ([`de0b5bb`](https://github.com/Byron/gitoxide/commit/de0b5bbe71ce8cfb49665b4f7e429d719dcb08dd))
+ - [git-repository] the first extension trait for more convenience ([`63a1fee`](https://github.com/Byron/gitoxide/commit/63a1fee9195c9d3c23001e09cccece2b2af43324))
+ - [git-repository] now with a prelude for traits ([`7f7a5ea`](https://github.com/Byron/gitoxide/commit/7f7a5eaf080217628b3645af3ff5f1872d5ce11c))
+ - [git-repository] more re-exports for convenience ([`6a5c00e`](https://github.com/Byron/gitoxide/commit/6a5c00e2e1fb7ca911d1f8ce3534a74316478149))
+ - (cargo-release) version 0.4.0 ([`866f86f`](https://github.com/Byron/gitoxide/commit/866f86f59e66652968dcafc1a57912f9849cb21d))
+ - [git-repository] towards git-repository as one stop shop ([`aea6cc5`](https://github.com/Byron/gitoxide/commit/aea6cc536f438050cc0e02223de7702cd7912e75))
+ - [git-repository] repo-init sketch ([`5855c95`](https://github.com/Byron/gitoxide/commit/5855c952e2703412a5f7c1ffbfe57b85f339bab1))
+ - [git-repository] refactor ([`63c22af`](https://github.com/Byron/gitoxide/commit/63c22afe153b08453c3c12c3bb81626d2381f472))
+ - [git-repository] refactor ([`996944a`](https://github.com/Byron/gitoxide/commit/996944a75160538588d34385b6a6717b05ee9c47))
+ - [git-repository] refactor ([`a2d58c1`](https://github.com/Byron/gitoxide/commit/a2d58c100ca696bceaaa0788347bba41f29ab0b8))
+ - [git-repository] a sketch of how the repository could look like ([`3854cef`](https://github.com/Byron/gitoxide/commit/3854cef47205e449bfc638255eefe303a99897d8))
+ - [git-repository] traversal uses git-repository ([`db564c5`](https://github.com/Byron/gitoxide/commit/db564c5016272ff6d2038fd2b554cb6dacb0a6c5))
+ - [git-repository] an actual repository abstraction ([`3f20b26`](https://github.com/Byron/gitoxide/commit/3f20b267b97f0855d958a37b36984da288263cc2))
+ - [git-repository] refactor ([`c8323e4`](https://github.com/Byron/gitoxide/commit/c8323e484f08d5ea59400636cb26334d6976e4c0))
+ - [git-repository] traversal program uses new facilities, and it's cumbersome ([`29ea2de`](https://github.com/Byron/gitoxide/commit/29ea2de9ad48036f78d3776d8526d959f68bf287))
+ - [git-repository] bare repository handling ([`3a8e6ff`](https://github.com/Byron/gitoxide/commit/3a8e6ff041efc57482252458acf379b43ef6b523))
+ - [git-repository] tests pass, bare repo tests missing ([`a5ed9ea`](https://github.com/Byron/gitoxide/commit/a5ed9ea3004f81c2132b86fe26ad34abf620c765))
+ - [git-repository] most of the git repository discovery ([`72a49c8`](https://github.com/Byron/gitoxide/commit/72a49c816253520230a04290619f469df608be19))
+ - [git-repository] frame for repository testing; sketch of discovery API ([`467e340`](https://github.com/Byron/gitoxide/commit/467e340b6c36cad299d35546a60cdb308e29b289))
+
+
+## v0.5.0 (2021-04-08)
+
+### Commit Statistics
+
+
+
+ - 10 commits contributed to the release over the course of 204 calendar days.
+ - 208 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - (cargo-release) version 0.5.0 ([`02df134`](https://github.com/Byron/gitoxide/commit/02df1345a22889a573adfc1be80bda271b2dc9a5))
+ - Merge branch 'daniel-levin/main' into main ([`1e727af`](https://github.com/Byron/gitoxide/commit/1e727afd9bce7bc4b33f094ccf5b4b94376dea72))
+ - refactor ([`170215d`](https://github.com/Byron/gitoxide/commit/170215dc941af9b6a8f19c1fef91f3b5802e1cc7))
+ - Ensured linter checks pass ([`51f2183`](https://github.com/Byron/gitoxide/commit/51f2183357573f9ea30dffbf61af73d5e845f5aa))
+ - Ensured output of directory-less git init unchanged ([`539a573`](https://github.com/Byron/gitoxide/commit/539a5737459de10404b6ba6f06a20224b6d534af))
+ - Added [directory] argument to init. ([`62f8dc6`](https://github.com/Byron/gitoxide/commit/62f8dc62ec3e76efd7311ced32094035856dbcbb))
+ - Spelling fix in error message ([`944d0f4`](https://github.com/Byron/gitoxide/commit/944d0f4ae830c8f2e7eabe3bd58cd023f5674ce1))
+ - remove dash in all repository links ([`98c1360`](https://github.com/Byron/gitoxide/commit/98c1360ba4d2fb3443602b7da8775906224feb1d))
+ - Merge from main. ([`b59bd5e`](https://github.com/Byron/gitoxide/commit/b59bd5e0b0895c7d1d585816cec8be4dea78c278))
+ - refactor ([`ba1d883`](https://github.com/Byron/gitoxide/commit/ba1d88364424eb60a0874a5726b62740dc348592))
+
+
+## v0.4.0 (2020-09-12)
+
+### Commit Statistics
+
+
+
+ - 2 commits contributed to the release over the course of 28 calendar days.
+ - 30 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - (cargo-release) version 0.4.0 ([`2b1bca8`](https://github.com/Byron/gitoxide/commit/2b1bca83c453544972e370dc0adff57cb7590b42))
+ - Allow dual-licensing with Apache 2.0 ([`ea353eb`](https://github.com/Byron/gitoxide/commit/ea353eb02fd4f75508600cc5676107bc7e627f1e))
+
+
+## v0.3.0 (2020-08-12)
+
+### Commit Statistics
+
+
+
+ - 5 commits contributed to the release over the course of 31 calendar days.
+ - 31 days passed between releases.
+ - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 0 issues like '(#ID)' were seen in commit messages
+
+### Commit Details
+
+
+
+view details
+
+ * **Uncategorized**
+ - bump minor version to 0.3 ([`4351e28`](https://github.com/Byron/gitoxide/commit/4351e2871c9dcf342b8471fffa74cae338a53269))
+ - update to quick-error 2.0 ([`4b1b784`](https://github.com/Byron/gitoxide/commit/4b1b7849b47a54092b49821c39e864c86adda979))
+ - Switch to latest quick-error ([`9760856`](https://github.com/Byron/gitoxide/commit/976085614ee13a19fc1347209259a3dcf36ef95b))
+ - refactor ([`2888f1b`](https://github.com/Byron/gitoxide/commit/2888f1b10a2baf40155544e667ddd461f3ddc938))
+ - explicitly include assets in git-repository crate ([`9da6071`](https://github.com/Byron/gitoxide/commit/9da6071c97d668e5af4eedb554ca8f91d184ee7e))
+
+
+## v0.1.0 (2020-07-12)
### Commit Statistics
- - 1 commit contributed to the release.
+ - 5 commits contributed to the release over the course of 17 calendar days.
- 0 commits were understood as [conventional](https://www.conventionalcommits.org).
- 0 issues like '(#ID)' were seen in commit messages
@@ -24,6 +4003,10 @@ Initial release.
view details
* **Uncategorized**
- - Add `gix` crate to reserve name ([`5104a78`](https://github.com/Byron/gitoxide/commit/5104a787127bf0b1f9b65f371b7c5b79f491e396))
+ - Make crates publishable ([`5688a34`](https://github.com/Byron/gitoxide/commit/5688a3427ff3673e1422d43106f4d685fa837aed))
+ - Fix tests ([`59ed51d`](https://github.com/Byron/gitoxide/commit/59ed51d0c84bf067ef0a921730260f2c444e5409))
+ - Use 'main' branches instead of the previous default when initializing a repository ([`da77cc8`](https://github.com/Byron/gitoxide/commit/da77cc807f34d23da76e4d94e4220ed638713f59))
+ - Allow for more screen space when formatting ([`6794300`](https://github.com/Byron/gitoxide/commit/67943002e7f4215b5383bd0538786ce2857f011e))
+ - goodbye git-core, hello git-repository ([`7cec2b6`](https://github.com/Byron/gitoxide/commit/7cec2b648f86fc665b4fc5bfe269e9ca16679a55))
diff --git a/gix/Cargo.toml b/gix/Cargo.toml
index d0554357444..e1343c11a6c 100644
--- a/gix/Cargo.toml
+++ b/gix/Cargo.toml
@@ -1,14 +1,159 @@
[package]
name = "gix"
-version = "0.0.0"
repository = "https://github.com/Byron/gitoxide"
+description = "Interact with git repositories just like git would"
license = "MIT/Apache-2.0"
-description = "A placeholder prior to replacing it with `git-repository`"
+version = "0.35.0"
authors = ["Sebastian Thiel "]
edition = "2021"
+include = ["src/**/*", "CHANGELOG.md"]
rust-version = "1.64"
[lib]
doctest = false
+test = true
+
+[[test]]
+name = "git"
+path = "tests/git.rs"
+required-features = []
+
+[[test]]
+name = "git-with-regex"
+path = "tests/git-with-regex.rs"
+required-features = ["regex"]
+
+[[example]]
+name = "clone"
+path = "examples/clone.rs"
+required-features = ["blocking-network-client"]
+
+[features]
+
+default = ["max-performance-safe"]
+
+#! ### Mutually Exclusive Network Client
+#! Either `async-*` or `blocking-*` versions of these toggles may be enabled at a time.
+
+## Make `git-protocol` available along with an async client.
+async-network-client = ["git-protocol/async-client"]
+## Use this if your crate uses `async-std` as runtime, and enable basic runtime integration when connecting to remote servers.
+async-network-client-async-std = ["async-std", "async-network-client", "git-transport/async-std"]
+## Make `git-protocol` available along with a blocking client.
+blocking-network-client = ["git-protocol/blocking-client"]
+## Stacks with `blocking-network-client` to provide support for HTTP/S using **curl**, and implies blocking networking as a whole.
+blocking-http-transport-curl = ["blocking-network-client", "git-transport/http-client-curl"]
+## Stacks with `blocking-network-client` to provide support for HTTP/S using **reqwest**, and implies blocking networking as a whole.
+blocking-http-transport-reqwest = ["blocking-network-client", "git-transport/http-client-reqwest"]
+## Stacks with `blocking-http-transport-reqwest` and enables HTTPS via the `rustls` crate. Note that https isn't available without a selection.
+blocking-http-transport-reqwest-rust-tls = ["blocking-http-transport-reqwest", "reqwest-for-configuration-only/rustls-tls", "reqwest-for-configuration-only/trust-dns"]
+## Stacks with `blocking-http-transport-reqwest` and enables HTTPS via the `native-tls` crate. Note that https isn't available without a selection.
+blocking-http-transport-reqwest-native-tls = ["blocking-http-transport-reqwest", "reqwest-for-configuration-only/default-tls" ]
+
+
+#! ### Other
+
+## Data structures implement `serde::Serialize` and `serde::Deserialize`.
+serde1 = [ "serde",
+ "git-pack/serde1",
+ "git-object/serde1",
+ "git-protocol?/serde1",
+ "git-transport?/serde1",
+ "git-ref/serde1",
+ "git-odb/serde1",
+ "git-index/serde1",
+ "git-mailmap/serde1",
+ "git-attributes/serde1",
+ "git-revision/serde1",
+ "git-credentials/serde1" ]
+
+## Activate other features that maximize performance, like usage of threads, `zlib-ng` and access to caching in object databases.
+## Note that some platforms might suffer from compile failures, which is when `max-performance-safe` should be used.
+max-performance = [ "git-features/zlib-ng-compat", "fast-sha1", "max-performance-safe" ]
+
+## If enabled, use assembly versions of sha1 on supported platforms.
+## This might cause compile failures as well which is why it can be turned off separately.
+fast-sha1 = [ "git-features/fast-sha1" ]
+
+## Activate features that maximize performance, like usage of threads, `zlib-ng` and access to caching in object databases, skipping the ones known to cause compile failures
+## on some platforms.
+max-performance-safe = [
+ "git-features/parallel",
+ "git-pack/pack-cache-lru-static",
+ "git-pack/pack-cache-lru-dynamic",
+ "git-features/fs-walkdir-parallel"
+]
+## Print debugging information about usage of object database caches, useful for tuning cache sizes.
+cache-efficiency-debug = ["git-features/cache-efficiency-debug"]
+
+
[dependencies]
+git-ref = { version = "^0.24.0", path = "../git-ref" }
+git-discover = { version = "^0.13.0", path = "../git-discover" }
+git-tempfile = { version = "^3.0.0", path = "../git-tempfile" }
+git-lock = { version = "^3.0.0", path = "../git-lock" }
+git-validate = { version = "^0.7.2", path = "../git-validate" }
+git-sec = { version = "^0.6.2", path = "../git-sec" }
+git-date = { version = "^0.4.2", path = "../git-date" }
+git-refspec = { version = "^0.7.2", path = "../git-refspec" }
+
+git-config = { version = "^0.16.0", path = "../git-config" }
+git-odb = { version = "^0.40.2", path = "../git-odb" }
+git-hash = { version = "^0.10.2", path = "../git-hash" }
+git-object = { version = "^0.26.1", path = "../git-object" }
+git-actor = { version = "^0.17.1", path = "../git-actor" }
+git-pack = { version = "^0.30.2", path = "../git-pack", features = ["object-cache-dynamic"] }
+git-revision = { version = "^0.10.2", path = "../git-revision" }
+
+git-path = { version = "^0.7.1", path = "../git-path" }
+git-url = { version = "^0.13.2", path = "../git-url" }
+git-traverse = { version = "^0.22.1", path = "../git-traverse" }
+git-protocol = { version = "^0.26.3", path = "../git-protocol", optional = true }
+git-transport = { version = "^0.25.4", path = "../git-transport", optional = true }
+git-diff = { version = "^0.26.1", path = "../git-diff" }
+git-mailmap = { version = "^0.9.2", path = "../git-mailmap" }
+git-features = { version = "^0.26.2", path = "../git-features", features = ["progress", "once_cell"] }
+
+git-attributes = { version = "^0.8.2", path = "../git-attributes" }
+git-glob = { version = "^0.5.3", path = "../git-glob" }
+git-credentials = { version = "^0.9.1", path = "../git-credentials" }
+git-prompt = { version = "^0.3.2", path = "../git-prompt" }
+git-index = { version = "^0.12.3", path = "../git-index" }
+git-worktree = { version = "^0.12.2", path = "../git-worktree" }
+git-hashtable = { version = "^0.1.1", path = "../git-hashtable" }
+
+prodash = { version = "23.0.0", default-features = false, features = ["progress-tree"] }
+once_cell = "1.14.0"
+signal-hook = { version = "0.3.9", default-features = false }
+thiserror = "1.0.26"
+log = "0.4.14"
+serde = { version = "1.0.114", optional = true, default-features = false, features = ["derive"]}
+smallvec = "1.9.0"
+async-std = { version = "1.12.0", optional = true }
+
+## For use in rev-parse, which provides searching commits by running a regex on their message.
+##
+## If disabled, the text will be search verbatim in any portion of the commit message, similar to
+## how a simple unanchored regex of only 'normal' characters would work.
+regex = { version = "1.6.0", optional = true, default-features = false, features = ["std"] }
+
+# For internal use to allow pure-Rust builds without openssl.
+reqwest-for-configuration-only = { package = "reqwest", version = "0.11.13", default-features = false, optional = true }
+
+document-features = { version = "0.2.0", optional = true }
+
+[target.'cfg(target_vendor = "apple")'.dependencies]
+unicode-normalization = { version = "0.1.19", default-features = false }
+
+[dev-dependencies]
+git-testtools = { path = "../tests/tools" }
+is_ci = "1.1.1"
+anyhow = "1"
+walkdir = "2.3.2"
+serial_test = "1.0.0"
+async-std = { version = "1.12.0", features = ["attributes"] }
+
+[package.metadata.docs.rs]
+features = ["document-features", "max-performance", "blocking-network-client", "serde1"]
+rustdoc-args = ["--cfg", "docsrs"]
diff --git a/git-repository/examples/clone.rs b/gix/examples/clone.rs
similarity index 67%
rename from git-repository/examples/clone.rs
rename to gix/examples/clone.rs
index 3928bf6a380..fb5cbf0c14b 100644
--- a/git-repository/examples/clone.rs
+++ b/gix/examples/clone.rs
@@ -1,7 +1,6 @@
// Clone a repository from any URL or Path to a given target directory
use anyhow::Context;
-use git_repository as git;
fn main() -> anyhow::Result<()> {
let repo_url = std::env::args_os()
@@ -12,34 +11,34 @@ fn main() -> anyhow::Result<()> {
.nth(2)
.context("The second argument is the directory to clone the repository into")?;
- git::interrupt::init_handler(|| {})?;
+ gix::interrupt::init_handler(|| {})?;
std::fs::create_dir_all(&dst)?;
- let url = git::url::parse(repo_url.to_str().unwrap().into())?;
+ let url = gix::url::parse(repo_url.to_str().unwrap().into())?;
println!("Url: {:?}", url.to_bstring());
- let mut prepare_clone = git::prepare_clone(url, &dst)?;
+ let mut prepare_clone = gix::prepare_clone(url, &dst)?;
println!("Cloning {repo_url:?} into {dst:?}...");
let (mut prepare_checkout, _) =
- prepare_clone.fetch_then_checkout(git::progress::Discard, &git::interrupt::IS_INTERRUPTED)?;
+ prepare_clone.fetch_then_checkout(gix::progress::Discard, &gix::interrupt::IS_INTERRUPTED)?;
println!(
"Checking out into {:?} ...",
prepare_checkout.repo().work_dir().expect("should be there")
);
- let (repo, _) = prepare_checkout.main_worktree(git::progress::Discard, &git::interrupt::IS_INTERRUPTED)?;
+ let (repo, _) = prepare_checkout.main_worktree(gix::progress::Discard, &gix::interrupt::IS_INTERRUPTED)?;
println!("Repo cloned into {:?}", repo.work_dir().expect("directory pre-created"));
let remote = repo
- .find_default_remote(git::remote::Direction::Fetch)
+ .find_default_remote(gix::remote::Direction::Fetch)
.expect("always present after clone")?;
println!(
"Default remote: {} -> {}",
remote.name().expect("default remote is always named").as_bstr(),
remote
- .url(git::remote::Direction::Fetch)
+ .url(gix::remote::Direction::Fetch)
.expect("should be the remote URL")
.to_bstring(),
);
diff --git a/git-repository/examples/init-repo-and-commit.rs b/gix/examples/init-repo-and-commit.rs
similarity index 89%
rename from git-repository/examples/init-repo-and-commit.rs
rename to gix/examples/init-repo-and-commit.rs
index 1b0817b57dc..aad2db75908 100644
--- a/git-repository/examples/init-repo-and-commit.rs
+++ b/gix/examples/init-repo-and-commit.rs
@@ -2,8 +2,8 @@
// adds initial commit with empty tree
use anyhow::Context;
-use git::objs::tree;
-use git_repository as git;
+
+use gix::objs::tree;
fn main() -> anyhow::Result<()> {
// Note use of args_os:
@@ -13,11 +13,11 @@ fn main() -> anyhow::Result<()> {
let git_dir = std::env::args_os()
.nth(1)
.context("First argument needs to be the directory to initialize the repository in")?;
- let mut repo = git::init_bare(git_dir)?;
+ let mut repo = gix::init_bare(git_dir)?;
println!("Repo (bare): {:?}", repo.git_dir());
- let mut tree = git::objs::Tree::empty();
+ let mut tree = gix::objs::Tree::empty();
let empty_tree_id = repo.write_object(&tree)?.detach();
let mut config = repo.config_snapshot_mut();
@@ -25,7 +25,7 @@ fn main() -> anyhow::Result<()> {
config.set_raw_value("author", None, "email", "maria@example.com")?;
{
let repo = config.commit_auto_rollback()?;
- let initial_commit_id = repo.commit("HEAD", "initial commit", empty_tree_id, git::commit::NO_PARENT_IDS)?;
+ let initial_commit_id = repo.commit("HEAD", "initial commit", empty_tree_id, gix::commit::NO_PARENT_IDS)?;
println!("initial commit id with empty tree: {:?}", initial_commit_id);
diff --git a/git-repository/examples/interrupt-handler-allows-graceful-shutdown.rs b/gix/examples/interrupt-handler-allows-graceful-shutdown.rs
similarity index 93%
rename from git-repository/examples/interrupt-handler-allows-graceful-shutdown.rs
rename to gix/examples/interrupt-handler-allows-graceful-shutdown.rs
index b2d89087e08..e75a50beea5 100644
--- a/git-repository/examples/interrupt-handler-allows-graceful-shutdown.rs
+++ b/gix/examples/interrupt-handler-allows-graceful-shutdown.rs
@@ -3,7 +3,7 @@ use std::path::Path;
use git_tempfile::{AutoRemove, ContainingDirectory};
fn main() -> anyhow::Result<()> {
- git_repository::interrupt::init_handler(|| {})?;
+ gix::interrupt::init_handler(|| {})?;
eprintln!("About to emit the first term signal");
let tempfile_path = Path::new("example-file.tmp");
let _keep_tempfile = git_tempfile::mark_at(tempfile_path, ContainingDirectory::Exists, AutoRemove::Tempfile)?;
diff --git a/git-repository/examples/reversible-interrupt-handlers.rs b/gix/examples/reversible-interrupt-handlers.rs
similarity index 70%
rename from git-repository/examples/reversible-interrupt-handlers.rs
rename to gix/examples/reversible-interrupt-handlers.rs
index c2854fe46d6..fcd02a2a38e 100644
--- a/git-repository/examples/reversible-interrupt-handlers.rs
+++ b/gix/examples/reversible-interrupt-handlers.rs
@@ -1,6 +1,6 @@
fn main() -> anyhow::Result<()> {
{
- let _deregister_on_drop = git_repository::interrupt::init_handler(|| {})?.auto_deregister();
+ let _deregister_on_drop = gix::interrupt::init_handler(|| {})?.auto_deregister();
}
eprintln!("About to emit the first term signal, which acts just like a normal one");
signal_hook::low_level::raise(signal_hook::consts::SIGTERM)?;
diff --git a/git-repository/examples/stats.rs b/gix/examples/stats.rs
similarity index 94%
rename from git-repository/examples/stats.rs
rename to gix/examples/stats.rs
index b0f2b981f03..8c41a40fcef 100644
--- a/git-repository/examples/stats.rs
+++ b/gix/examples/stats.rs
@@ -1,8 +1,7 @@
-use git_repository as git;
-use git_repository::Reference;
+use gix::Reference;
fn main() -> Result<(), Box> {
- let mut repo = git::discover(".")?;
+ let mut repo = gix::discover(".")?;
println!("Repo: {}", repo.work_dir().unwrap_or_else(|| repo.git_dir()).display());
let mut max_commit_size = 0;
let mut avg_commit_size = 0;
@@ -72,7 +71,6 @@ fn main() -> Result<(), Box> {
mod visit {
use git_hash::oid;
use git_object::{bstr::BStr, tree::EntryRef};
- use git_repository as git;
use git_traverse::tree::visit::Action;
pub(crate) struct Tree {
@@ -82,11 +80,11 @@ mod visit {
pub num_blobs_exec: usize,
pub num_submodules: usize,
pub num_bytes: u64,
- pub repo: git::Repository,
+ pub repo: gix::Repository,
}
impl Tree {
- pub fn new(repo: git::Repository) -> Self {
+ pub fn new(repo: gix::Repository) -> Self {
Tree {
num_trees: 0,
num_links: 0,
@@ -119,7 +117,7 @@ mod visit {
}
fn visit_nontree(&mut self, entry: &EntryRef<'_>) -> Action {
- use git::objs::tree::EntryMode::*;
+ use gix::objs::tree::EntryMode::*;
match entry.mode {
Commit => self.num_submodules += 1,
Blob => {
diff --git a/git-repository/src/assets/baseline-init/HEAD b/gix/src/assets/baseline-init/HEAD
similarity index 100%
rename from git-repository/src/assets/baseline-init/HEAD
rename to gix/src/assets/baseline-init/HEAD
diff --git a/git-repository/src/assets/baseline-init/description b/gix/src/assets/baseline-init/description
similarity index 100%
rename from git-repository/src/assets/baseline-init/description
rename to gix/src/assets/baseline-init/description
diff --git a/git-repository/src/assets/baseline-init/hooks/applypatch-msg.sample b/gix/src/assets/baseline-init/hooks/applypatch-msg.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/applypatch-msg.sample
rename to gix/src/assets/baseline-init/hooks/applypatch-msg.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/commit-msg.sample b/gix/src/assets/baseline-init/hooks/commit-msg.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/commit-msg.sample
rename to gix/src/assets/baseline-init/hooks/commit-msg.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/fsmonitor-watchman.sample b/gix/src/assets/baseline-init/hooks/fsmonitor-watchman.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/fsmonitor-watchman.sample
rename to gix/src/assets/baseline-init/hooks/fsmonitor-watchman.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/post-update.sample b/gix/src/assets/baseline-init/hooks/post-update.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/post-update.sample
rename to gix/src/assets/baseline-init/hooks/post-update.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/pre-applypatch.sample b/gix/src/assets/baseline-init/hooks/pre-applypatch.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/pre-applypatch.sample
rename to gix/src/assets/baseline-init/hooks/pre-applypatch.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/pre-commit.sample b/gix/src/assets/baseline-init/hooks/pre-commit.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/pre-commit.sample
rename to gix/src/assets/baseline-init/hooks/pre-commit.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/pre-merge-commit.sample b/gix/src/assets/baseline-init/hooks/pre-merge-commit.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/pre-merge-commit.sample
rename to gix/src/assets/baseline-init/hooks/pre-merge-commit.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/pre-push.sample b/gix/src/assets/baseline-init/hooks/pre-push.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/pre-push.sample
rename to gix/src/assets/baseline-init/hooks/pre-push.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/pre-rebase.sample b/gix/src/assets/baseline-init/hooks/pre-rebase.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/pre-rebase.sample
rename to gix/src/assets/baseline-init/hooks/pre-rebase.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/pre-receive.sample b/gix/src/assets/baseline-init/hooks/pre-receive.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/pre-receive.sample
rename to gix/src/assets/baseline-init/hooks/pre-receive.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/prepare-commit-msg.sample b/gix/src/assets/baseline-init/hooks/prepare-commit-msg.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/prepare-commit-msg.sample
rename to gix/src/assets/baseline-init/hooks/prepare-commit-msg.sample
diff --git a/git-repository/src/assets/baseline-init/hooks/update.sample b/gix/src/assets/baseline-init/hooks/update.sample
similarity index 100%
rename from git-repository/src/assets/baseline-init/hooks/update.sample
rename to gix/src/assets/baseline-init/hooks/update.sample
diff --git a/git-repository/src/assets/baseline-init/info/exclude b/gix/src/assets/baseline-init/info/exclude
similarity index 100%
rename from git-repository/src/assets/baseline-init/info/exclude
rename to gix/src/assets/baseline-init/info/exclude
diff --git a/git-repository/src/clone/checkout.rs b/gix/src/clone/checkout.rs
similarity index 100%
rename from git-repository/src/clone/checkout.rs
rename to gix/src/clone/checkout.rs
diff --git a/git-repository/src/clone/fetch/mod.rs b/gix/src/clone/fetch/mod.rs
similarity index 100%
rename from git-repository/src/clone/fetch/mod.rs
rename to gix/src/clone/fetch/mod.rs
diff --git a/git-repository/src/clone/fetch/util.rs b/gix/src/clone/fetch/util.rs
similarity index 100%
rename from git-repository/src/clone/fetch/util.rs
rename to gix/src/clone/fetch/util.rs
diff --git a/git-repository/src/clone/mod.rs b/gix/src/clone/mod.rs
similarity index 100%
rename from git-repository/src/clone/mod.rs
rename to gix/src/clone/mod.rs
diff --git a/git-repository/src/commit.rs b/gix/src/commit.rs
similarity index 99%
rename from git-repository/src/commit.rs
rename to gix/src/commit.rs
index c5335dabc59..067f1cb801b 100644
--- a/git-repository/src/commit.rs
+++ b/gix/src/commit.rs
@@ -1,6 +1,6 @@
//!
-/// An empty array of a type usable with the `git::easy` API to help declaring no parents should be used
+/// An empty array of a type usable with the `gix::easy` API to help declaring no parents should be used
pub const NO_PARENT_IDS: [git_hash::ObjectId; 0] = [];
/// The error returned by [`commit(…)`][crate::Repository::commit()].
diff --git a/git-repository/src/config/cache/access.rs b/gix/src/config/cache/access.rs
similarity index 100%
rename from git-repository/src/config/cache/access.rs
rename to gix/src/config/cache/access.rs
diff --git a/git-repository/src/config/cache/incubate.rs b/gix/src/config/cache/incubate.rs
similarity index 100%
rename from git-repository/src/config/cache/incubate.rs
rename to gix/src/config/cache/incubate.rs
diff --git a/git-repository/src/config/cache/init.rs b/gix/src/config/cache/init.rs
similarity index 100%
rename from git-repository/src/config/cache/init.rs
rename to gix/src/config/cache/init.rs
diff --git a/git-repository/src/config/cache/mod.rs b/gix/src/config/cache/mod.rs
similarity index 100%
rename from git-repository/src/config/cache/mod.rs
rename to gix/src/config/cache/mod.rs
diff --git a/git-repository/src/config/cache/util.rs b/gix/src/config/cache/util.rs
similarity index 100%
rename from git-repository/src/config/cache/util.rs
rename to gix/src/config/cache/util.rs
diff --git a/git-repository/src/config/mod.rs b/gix/src/config/mod.rs
similarity index 100%
rename from git-repository/src/config/mod.rs
rename to gix/src/config/mod.rs
diff --git a/git-repository/src/config/overrides.rs b/gix/src/config/overrides.rs
similarity index 100%
rename from git-repository/src/config/overrides.rs
rename to gix/src/config/overrides.rs
diff --git a/git-repository/src/config/snapshot/_impls.rs b/gix/src/config/snapshot/_impls.rs
similarity index 100%
rename from git-repository/src/config/snapshot/_impls.rs
rename to gix/src/config/snapshot/_impls.rs
diff --git a/git-repository/src/config/snapshot/access.rs b/gix/src/config/snapshot/access.rs
similarity index 100%
rename from git-repository/src/config/snapshot/access.rs
rename to gix/src/config/snapshot/access.rs
diff --git a/git-repository/src/config/snapshot/credential_helpers.rs b/gix/src/config/snapshot/credential_helpers.rs
similarity index 100%
rename from git-repository/src/config/snapshot/credential_helpers.rs
rename to gix/src/config/snapshot/credential_helpers.rs
diff --git a/git-repository/src/config/snapshot/mod.rs b/gix/src/config/snapshot/mod.rs
similarity index 100%
rename from git-repository/src/config/snapshot/mod.rs
rename to gix/src/config/snapshot/mod.rs
diff --git a/git-repository/src/config/tree/keys.rs b/gix/src/config/tree/keys.rs
similarity index 100%
rename from git-repository/src/config/tree/keys.rs
rename to gix/src/config/tree/keys.rs
diff --git a/git-repository/src/config/tree/mod.rs b/gix/src/config/tree/mod.rs
similarity index 100%
rename from git-repository/src/config/tree/mod.rs
rename to gix/src/config/tree/mod.rs
diff --git a/git-repository/src/config/tree/sections/author.rs b/gix/src/config/tree/sections/author.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/author.rs
rename to gix/src/config/tree/sections/author.rs
diff --git a/git-repository/src/config/tree/sections/branch.rs b/gix/src/config/tree/sections/branch.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/branch.rs
rename to gix/src/config/tree/sections/branch.rs
diff --git a/git-repository/src/config/tree/sections/checkout.rs b/gix/src/config/tree/sections/checkout.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/checkout.rs
rename to gix/src/config/tree/sections/checkout.rs
diff --git a/git-repository/src/config/tree/sections/clone.rs b/gix/src/config/tree/sections/clone.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/clone.rs
rename to gix/src/config/tree/sections/clone.rs
diff --git a/git-repository/src/config/tree/sections/committer.rs b/gix/src/config/tree/sections/committer.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/committer.rs
rename to gix/src/config/tree/sections/committer.rs
diff --git a/git-repository/src/config/tree/sections/core.rs b/gix/src/config/tree/sections/core.rs
similarity index 99%
rename from git-repository/src/config/tree/sections/core.rs
rename to gix/src/config/tree/sections/core.rs
index 065d11120da..9f1b5ca8d94 100644
--- a/git-repository/src/config/tree/sections/core.rs
+++ b/gix/src/config/tree/sections/core.rs
@@ -38,7 +38,7 @@ impl Core {
///
/// Needs application to use [env::args_os][crate::env::args_os()] to conform all input paths before they are used.
pub const PRECOMPOSE_UNICODE: keys::Boolean = keys::Boolean::new_boolean("precomposeUnicode", &config::Tree::CORE)
- .with_note("application needs to conform all program input by using git::env::args_os()");
+ .with_note("application needs to conform all program input by using gix::env::args_os()");
/// The `core.repositoryFormatVersion` key.
pub const REPOSITORY_FORMAT_VERSION: keys::UnsignedInteger =
keys::UnsignedInteger::new_unsigned_integer("repositoryFormatVersion", &config::Tree::CORE);
diff --git a/git-repository/src/config/tree/sections/credential.rs b/gix/src/config/tree/sections/credential.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/credential.rs
rename to gix/src/config/tree/sections/credential.rs
diff --git a/git-repository/src/config/tree/sections/diff.rs b/gix/src/config/tree/sections/diff.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/diff.rs
rename to gix/src/config/tree/sections/diff.rs
diff --git a/git-repository/src/config/tree/sections/extensions.rs b/gix/src/config/tree/sections/extensions.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/extensions.rs
rename to gix/src/config/tree/sections/extensions.rs
diff --git a/git-repository/src/config/tree/sections/gitoxide.rs b/gix/src/config/tree/sections/gitoxide.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/gitoxide.rs
rename to gix/src/config/tree/sections/gitoxide.rs
diff --git a/git-repository/src/config/tree/sections/http.rs b/gix/src/config/tree/sections/http.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/http.rs
rename to gix/src/config/tree/sections/http.rs
diff --git a/git-repository/src/config/tree/sections/init.rs b/gix/src/config/tree/sections/init.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/init.rs
rename to gix/src/config/tree/sections/init.rs
diff --git a/git-repository/src/config/tree/sections/mod.rs b/gix/src/config/tree/sections/mod.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/mod.rs
rename to gix/src/config/tree/sections/mod.rs
diff --git a/git-repository/src/config/tree/sections/pack.rs b/gix/src/config/tree/sections/pack.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/pack.rs
rename to gix/src/config/tree/sections/pack.rs
diff --git a/git-repository/src/config/tree/sections/protocol.rs b/gix/src/config/tree/sections/protocol.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/protocol.rs
rename to gix/src/config/tree/sections/protocol.rs
diff --git a/git-repository/src/config/tree/sections/remote.rs b/gix/src/config/tree/sections/remote.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/remote.rs
rename to gix/src/config/tree/sections/remote.rs
diff --git a/git-repository/src/config/tree/sections/safe.rs b/gix/src/config/tree/sections/safe.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/safe.rs
rename to gix/src/config/tree/sections/safe.rs
diff --git a/git-repository/src/config/tree/sections/ssh.rs b/gix/src/config/tree/sections/ssh.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/ssh.rs
rename to gix/src/config/tree/sections/ssh.rs
diff --git a/git-repository/src/config/tree/sections/url.rs b/gix/src/config/tree/sections/url.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/url.rs
rename to gix/src/config/tree/sections/url.rs
diff --git a/git-repository/src/config/tree/sections/user.rs b/gix/src/config/tree/sections/user.rs
similarity index 100%
rename from git-repository/src/config/tree/sections/user.rs
rename to gix/src/config/tree/sections/user.rs
diff --git a/git-repository/src/config/tree/traits.rs b/gix/src/config/tree/traits.rs
similarity index 100%
rename from git-repository/src/config/tree/traits.rs
rename to gix/src/config/tree/traits.rs
diff --git a/git-repository/src/create.rs b/gix/src/create.rs
similarity index 100%
rename from git-repository/src/create.rs
rename to gix/src/create.rs
diff --git a/git-repository/src/discover.rs b/gix/src/discover.rs
similarity index 100%
rename from git-repository/src/discover.rs
rename to gix/src/discover.rs
diff --git a/git-repository/src/env.rs b/gix/src/env.rs
similarity index 98%
rename from git-repository/src/env.rs
rename to gix/src/env.rs
index ecbf805a02f..53be060df1b 100644
--- a/git-repository/src/env.rs
+++ b/gix/src/env.rs
@@ -43,7 +43,7 @@ pub fn os_str_to_bstring(input: &OsStr) -> Option {
///
/// ### Usage
///
-/// The caller may define a function that specifies the result type as `Result` to collect
+/// The caller may define a function that specifies the result type as `Result` to collect
/// errors into a well-known error type which provides an API for simple queries.
pub mod collate {
diff --git a/git-repository/src/ext/mod.rs b/gix/src/ext/mod.rs
similarity index 100%
rename from git-repository/src/ext/mod.rs
rename to gix/src/ext/mod.rs
diff --git a/git-repository/src/ext/object_id.rs b/gix/src/ext/object_id.rs
similarity index 100%
rename from git-repository/src/ext/object_id.rs
rename to gix/src/ext/object_id.rs
diff --git a/git-repository/src/ext/reference.rs b/gix/src/ext/reference.rs
similarity index 100%
rename from git-repository/src/ext/reference.rs
rename to gix/src/ext/reference.rs
diff --git a/git-repository/src/ext/rev_spec.rs b/gix/src/ext/rev_spec.rs
similarity index 100%
rename from git-repository/src/ext/rev_spec.rs
rename to gix/src/ext/rev_spec.rs
diff --git a/git-repository/src/ext/tree.rs b/gix/src/ext/tree.rs
similarity index 100%
rename from git-repository/src/ext/tree.rs
rename to gix/src/ext/tree.rs
diff --git a/git-repository/src/head/log.rs b/gix/src/head/log.rs
similarity index 100%
rename from git-repository/src/head/log.rs
rename to gix/src/head/log.rs
diff --git a/git-repository/src/head/mod.rs b/gix/src/head/mod.rs
similarity index 100%
rename from git-repository/src/head/mod.rs
rename to gix/src/head/mod.rs
diff --git a/git-repository/src/head/peel.rs b/gix/src/head/peel.rs
similarity index 100%
rename from git-repository/src/head/peel.rs
rename to gix/src/head/peel.rs
diff --git a/git-repository/src/id.rs b/gix/src/id.rs
similarity index 100%
rename from git-repository/src/id.rs
rename to gix/src/id.rs
diff --git a/git-repository/src/init.rs b/gix/src/init.rs
similarity index 100%
rename from git-repository/src/init.rs
rename to gix/src/init.rs
diff --git a/git-repository/src/interrupt.rs b/gix/src/interrupt.rs
similarity index 100%
rename from git-repository/src/interrupt.rs
rename to gix/src/interrupt.rs
diff --git a/git-repository/src/kind.rs b/gix/src/kind.rs
similarity index 100%
rename from git-repository/src/kind.rs
rename to gix/src/kind.rs
diff --git a/gix/src/lib.rs b/gix/src/lib.rs
index 3a6cd994a53..9330bfa74e9 100644
--- a/gix/src/lib.rs
+++ b/gix/src/lib.rs
@@ -1,2 +1,313 @@
-#![deny(rust_2018_idioms)]
-#![forbid(unsafe_code)]
+//! This crate provides the [`Repository`] abstraction which serves as a hub into all the functionality of git.
+//!
+//! It's powerful and won't sacrifice performance while still increasing convenience compared to using the sub-crates
+//! individually. Sometimes it may hide complexity under the assumption that the performance difference doesn't matter
+//! for all but the fewest tools out there, which would be using the underlying crates directly or file an issue.
+//!
+//! # The prelude and extensions
+//!
+//! With `use git_repository::prelude::*` you should be ready to go as it pulls in various extension traits to make functionality
+//! available on objects that may use it.
+//!
+//! The method signatures are still complex and may require various arguments for configuration and cache control.
+//!
+//! Most extensions to existing objects provide an `obj_with_extension.attach(&repo).an_easier_version_of_a_method()` for simpler
+//! call signatures.
+//!
+//! ## ThreadSafe Mode
+//!
+//! By default, the [`Repository`] isn't `Sync` and thus can't be used in certain contexts which require the `Sync` trait.
+//!
+//! To help with this, convert it with [`.into_sync()`][Repository::into_sync()] into a [`ThreadSafeRepository`].
+//!
+//! ## Object-Access Performance
+//!
+//! Accessing objects quickly is the bread-and-butter of working with git, right after accessing references. Hence it's vital
+//! to understand which cache levels exist and how to leverage them.
+//!
+//! When accessing an object, the first cache that's queried is a memory-capped LRU object cache, mapping their id to data and kind.
+//! It has to be specifically enabled a [`Repository`].
+//! On miss, the object is looked up and if a pack is hit, there is a small fixed-size cache for delta-base objects.
+//!
+//! In scenarios where the same objects are accessed multiple times, the object cache can be useful and is to be configured specifically
+//! using the [`object_cache_size(…)`][crate::Repository::object_cache_size()] method.
+//!
+//! Use the `cache-efficiency-debug` cargo feature to learn how efficient the cache actually is - it's easy to end up with lowered
+//! performance if the cache is not hit in 50% of the time.
+//!
+//! ### Terminology
+//!
+//! #### WorkingTree and WorkTree
+//!
+//! When reading the documentation of the canonical git-worktree program one gets the impression work tree and working tree are used
+//! interchangeably. We use the term _work tree_ only and try to do so consistently as its shorter and assumed to be the same.
+//!
+//! # Cargo-features
+//!
+//! To make using _sub-crates_ easier these are re-exported into the root of this crate. Here we list how to access nested plumbing
+//! crates which are otherwise harder to discover:
+//!
+//! **`git_repository::`**
+//! * [`odb`]
+//! * [`pack`][odb::pack]
+//! * [`protocol`]
+//! * [`transport`][protocol::transport]
+//! * [`packetline`][protocol::transport::packetline]
+//!
+//!
+//! ## Feature Flags
+#![cfg_attr(
+ feature = "document-features",
+ cfg_attr(doc, doc = ::document_features::document_features!())
+)]
+#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
+#![deny(missing_docs, rust_2018_idioms, unsafe_code)]
+
+// Re-exports to make this a potential one-stop shop crate avoiding people from having to reference various crates themselves.
+// This also means that their major version changes affect our major version, but that's alright as we directly expose their
+// APIs/instances anyway.
+pub use git_actor as actor;
+pub use git_attributes as attrs;
+pub use git_credentials as credentials;
+pub use git_date as date;
+pub use git_features as features;
+use git_features::threading::OwnShared;
+pub use git_features::{parallel, progress::Progress, threading};
+pub use git_glob as glob;
+pub use git_hash as hash;
+#[doc(inline)]
+pub use git_index as index;
+pub use git_lock as lock;
+pub use git_object as objs;
+pub use git_object::bstr;
+pub use git_odb as odb;
+pub use git_prompt as prompt;
+#[cfg(all(feature = "git-protocol"))]
+pub use git_protocol as protocol;
+pub use git_ref as refs;
+pub use git_refspec as refspec;
+pub use git_sec as sec;
+pub use git_tempfile as tempfile;
+pub use git_traverse as traverse;
+pub use git_url as url;
+#[doc(inline)]
+pub use git_url::Url;
+pub use hash::{oid, ObjectId};
+
+pub mod interrupt;
+
+mod ext;
+///
+pub mod prelude {
+ pub use git_features::parallel::reduce::Finalize;
+ pub use git_odb::{Find, FindExt, Header, HeaderExt, Write};
+
+ pub use crate::ext::*;
+}
+
+///
+pub mod path;
+
+/// The standard type for a store to handle git references.
+pub type RefStore = git_ref::file::Store;
+/// A handle for finding objects in an object database, abstracting away caches for thread-local use.
+pub type OdbHandle = git_odb::Handle;
+/// A way to access git configuration
+pub(crate) type Config = OwnShared>;
+
+///
+mod types;
+pub use types::{
+ Commit, Head, Id, Kind, Object, ObjectDetached, Reference, Remote, Repository, Tag, ThreadSafeRepository, Tree,
+ Worktree,
+};
+
+///
+pub mod clone;
+pub mod commit;
+pub mod head;
+pub mod id;
+pub mod object;
+pub mod reference;
+mod repository;
+pub mod tag;
+
+///
+pub mod progress {
+ pub use git_features::progress::*;
+ pub use prodash::tree;
+}
+
+///
+pub mod diff {
+ pub use git_diff::*;
+ ///
+ pub mod rename {
+ /// Determine how to do rename tracking.
+ #[derive(Debug, Copy, Clone, Eq, PartialEq)]
+ pub enum Tracking {
+ /// Do not track renames at all, the fastest option.
+ Disabled,
+ /// Track renames.
+ Renames,
+ /// Track renames and copies.
+ ///
+ /// This is the most expensive option.
+ RenamesAndCopies,
+ }
+ }
+}
+
+/// See [ThreadSafeRepository::discover()], but returns a [`Repository`] instead.
+#[allow(clippy::result_large_err)]
+pub fn discover(directory: impl AsRef) -> Result {
+ ThreadSafeRepository::discover(directory).map(Into::into)
+}
+
+/// See [ThreadSafeRepository::init()], but returns a [`Repository`] instead.
+#[allow(clippy::result_large_err)]
+pub fn init(directory: impl AsRef) -> Result {
+ ThreadSafeRepository::init(directory, create::Kind::WithWorktree, create::Options::default()).map(Into::into)
+}
+
+/// See [ThreadSafeRepository::init()], but returns a [`Repository`] instead.
+#[allow(clippy::result_large_err)]
+pub fn init_bare(directory: impl AsRef) -> Result {
+ ThreadSafeRepository::init(directory, create::Kind::Bare, create::Options::default()).map(Into::into)
+}
+
+/// Create a platform for configuring a bare clone from `url` to the local `path`, using default options for opening it (but
+/// amended with using configuration from the git installation to ensure all authentication options are honored).
+///
+/// See [`clone::PrepareFetch::new()] for a function to take full control over all options.
+#[allow(clippy::result_large_err)]
+pub fn prepare_clone_bare(
+ url: Url,
+ path: impl AsRef,
+) -> Result
+where
+ Url: std::convert::TryInto,
+ git_url::parse::Error: From,
+{
+ clone::PrepareFetch::new(
+ url,
+ path,
+ create::Kind::Bare,
+ create::Options::default(),
+ open_opts_with_git_binary_config(),
+ )
+}
+
+/// Create a platform for configuring a clone with main working tree from `url` to the local `path`, using default options for opening it
+/// (but amended with using configuration from the git installation to ensure all authentication options are honored).
+///
+/// See [`clone::PrepareFetch::new()] for a function to take full control over all options.
+#[allow(clippy::result_large_err)]
+pub fn prepare_clone(url: Url, path: impl AsRef) -> Result
+where
+ Url: std::convert::TryInto,
+ git_url::parse::Error: From,
+{
+ clone::PrepareFetch::new(
+ url,
+ path,
+ create::Kind::WithWorktree,
+ create::Options::default(),
+ open_opts_with_git_binary_config(),
+ )
+}
+
+fn open_opts_with_git_binary_config() -> open::Options {
+ use git_sec::trust::DefaultForLevel;
+ let mut opts = open::Options::default_for_level(git_sec::Trust::Full);
+ opts.permissions.config.git_binary = true;
+ opts
+}
+
+/// See [ThreadSafeRepository::open()], but returns a [`Repository`] instead.
+#[allow(clippy::result_large_err)]
+pub fn open(directory: impl Into) -> Result {
+ ThreadSafeRepository::open(directory).map(Into::into)
+}
+
+/// See [ThreadSafeRepository::open_opts()], but returns a [`Repository`] instead.
+#[allow(clippy::result_large_err)]
+pub fn open_opts(directory: impl Into, options: open::Options) -> Result {
+ ThreadSafeRepository::open_opts(directory, options).map(Into::into)
+}
+
+///
+pub mod permission {
+ ///
+ pub mod env_var {
+ ///
+ pub mod resource {
+ ///
+ pub type Error = git_sec::permission::Error;
+ }
+ }
+}
+///
+pub mod permissions {
+ pub use crate::repository::permissions::{Config, Environment};
+}
+pub use repository::permissions::Permissions;
+
+///
+pub mod create;
+
+///
+pub mod open;
+
+///
+pub mod config;
+
+///
+pub mod mailmap;
+
+///
+pub mod worktree;
+
+pub mod revision;
+
+///
+pub mod remote;
+
+///
+pub mod init;
+
+/// Not to be confused with 'status'.
+pub mod state {
+ /// Tell what operation is currently in progress.
+ #[derive(Debug, PartialEq, Eq)]
+ pub enum InProgress {
+ /// A mailbox is being applied.
+ ApplyMailbox,
+ /// A rebase is happening while a mailbox is being applied.
+ // TODO: test
+ ApplyMailboxRebase,
+ /// A git bisect operation has not yet been concluded.
+ Bisect,
+ /// A cherry pick operation.
+ CherryPick,
+ /// A cherry pick with multiple commits pending.
+ CherryPickSequence,
+ /// A merge operation.
+ Merge,
+ /// A rebase operation.
+ Rebase,
+ /// An interactive rebase operation.
+ RebaseInteractive,
+ /// A revert operation.
+ Revert,
+ /// A revert operation with multiple commits pending.
+ RevertSequence,
+ }
+}
+
+///
+pub mod discover;
+
+pub mod env;
+
+mod kind;
diff --git a/git-repository/src/mailmap.rs b/gix/src/mailmap.rs
similarity index 100%
rename from git-repository/src/mailmap.rs
rename to gix/src/mailmap.rs
diff --git a/git-repository/src/object/blob.rs b/gix/src/object/blob.rs
similarity index 100%
rename from git-repository/src/object/blob.rs
rename to gix/src/object/blob.rs
diff --git a/git-repository/src/object/commit.rs b/gix/src/object/commit.rs
similarity index 100%
rename from git-repository/src/object/commit.rs
rename to gix/src/object/commit.rs
diff --git a/git-repository/src/object/errors.rs b/gix/src/object/errors.rs
similarity index 100%
rename from git-repository/src/object/errors.rs
rename to gix/src/object/errors.rs
diff --git a/git-repository/src/object/impls.rs b/gix/src/object/impls.rs
similarity index 100%
rename from git-repository/src/object/impls.rs
rename to gix/src/object/impls.rs
diff --git a/git-repository/src/object/mod.rs b/gix/src/object/mod.rs
similarity index 100%
rename from git-repository/src/object/mod.rs
rename to gix/src/object/mod.rs
diff --git a/git-repository/src/object/peel.rs b/gix/src/object/peel.rs
similarity index 100%
rename from git-repository/src/object/peel.rs
rename to gix/src/object/peel.rs
diff --git a/git-repository/src/object/tag.rs b/gix/src/object/tag.rs
similarity index 100%
rename from git-repository/src/object/tag.rs
rename to gix/src/object/tag.rs
diff --git a/git-repository/src/object/tree/diff/change.rs b/gix/src/object/tree/diff/change.rs
similarity index 100%
rename from git-repository/src/object/tree/diff/change.rs
rename to gix/src/object/tree/diff/change.rs
diff --git a/git-repository/src/object/tree/diff/for_each.rs b/gix/src/object/tree/diff/for_each.rs
similarity index 100%
rename from git-repository/src/object/tree/diff/for_each.rs
rename to gix/src/object/tree/diff/for_each.rs
diff --git a/git-repository/src/object/tree/diff/mod.rs b/gix/src/object/tree/diff/mod.rs
similarity index 100%
rename from git-repository/src/object/tree/diff/mod.rs
rename to gix/src/object/tree/diff/mod.rs
diff --git a/git-repository/src/object/tree/diff/renames.rs b/gix/src/object/tree/diff/renames.rs
similarity index 100%
rename from git-repository/src/object/tree/diff/renames.rs
rename to gix/src/object/tree/diff/renames.rs
diff --git a/git-repository/src/object/tree/iter.rs b/gix/src/object/tree/iter.rs
similarity index 100%
rename from git-repository/src/object/tree/iter.rs
rename to gix/src/object/tree/iter.rs
diff --git a/git-repository/src/object/tree/mod.rs b/gix/src/object/tree/mod.rs
similarity index 100%
rename from git-repository/src/object/tree/mod.rs
rename to gix/src/object/tree/mod.rs
diff --git a/git-repository/src/object/tree/traverse.rs b/gix/src/object/tree/traverse.rs
similarity index 100%
rename from git-repository/src/object/tree/traverse.rs
rename to gix/src/object/tree/traverse.rs
diff --git a/git-repository/src/open/mod.rs b/gix/src/open/mod.rs
similarity index 100%
rename from git-repository/src/open/mod.rs
rename to gix/src/open/mod.rs
diff --git a/git-repository/src/open/options.rs b/gix/src/open/options.rs
similarity index 100%
rename from git-repository/src/open/options.rs
rename to gix/src/open/options.rs
diff --git a/git-repository/src/open/repository.rs b/gix/src/open/repository.rs
similarity index 100%
rename from git-repository/src/open/repository.rs
rename to gix/src/open/repository.rs
diff --git a/git-repository/src/path.rs b/gix/src/path.rs
similarity index 100%
rename from git-repository/src/path.rs
rename to gix/src/path.rs
diff --git a/git-repository/src/reference/edits.rs b/gix/src/reference/edits.rs
similarity index 100%
rename from git-repository/src/reference/edits.rs
rename to gix/src/reference/edits.rs
diff --git a/git-repository/src/reference/errors.rs b/gix/src/reference/errors.rs
similarity index 100%
rename from git-repository/src/reference/errors.rs
rename to gix/src/reference/errors.rs
diff --git a/git-repository/src/reference/iter.rs b/gix/src/reference/iter.rs
similarity index 100%
rename from git-repository/src/reference/iter.rs
rename to gix/src/reference/iter.rs
diff --git a/git-repository/src/reference/log.rs b/gix/src/reference/log.rs
similarity index 100%
rename from git-repository/src/reference/log.rs
rename to gix/src/reference/log.rs
diff --git a/git-repository/src/reference/mod.rs b/gix/src/reference/mod.rs
similarity index 100%
rename from git-repository/src/reference/mod.rs
rename to gix/src/reference/mod.rs
diff --git a/git-repository/src/reference/remote.rs b/gix/src/reference/remote.rs
similarity index 100%
rename from git-repository/src/reference/remote.rs
rename to gix/src/reference/remote.rs
diff --git a/git-repository/src/remote/access.rs b/gix/src/remote/access.rs
similarity index 100%
rename from git-repository/src/remote/access.rs
rename to gix/src/remote/access.rs
diff --git a/git-repository/src/remote/build.rs b/gix/src/remote/build.rs
similarity index 100%
rename from git-repository/src/remote/build.rs
rename to gix/src/remote/build.rs
diff --git a/git-repository/src/remote/connect.rs b/gix/src/remote/connect.rs
similarity index 100%
rename from git-repository/src/remote/connect.rs
rename to gix/src/remote/connect.rs
diff --git a/git-repository/src/remote/connection/access.rs b/gix/src/remote/connection/access.rs
similarity index 100%
rename from git-repository/src/remote/connection/access.rs
rename to gix/src/remote/connection/access.rs
diff --git a/git-repository/src/remote/connection/fetch/config.rs b/gix/src/remote/connection/fetch/config.rs
similarity index 100%
rename from git-repository/src/remote/connection/fetch/config.rs
rename to gix/src/remote/connection/fetch/config.rs
diff --git a/git-repository/src/remote/connection/fetch/error.rs b/gix/src/remote/connection/fetch/error.rs
similarity index 100%
rename from git-repository/src/remote/connection/fetch/error.rs
rename to gix/src/remote/connection/fetch/error.rs
diff --git a/git-repository/src/remote/connection/fetch/mod.rs b/gix/src/remote/connection/fetch/mod.rs
similarity index 100%
rename from git-repository/src/remote/connection/fetch/mod.rs
rename to gix/src/remote/connection/fetch/mod.rs
diff --git a/git-repository/src/remote/connection/fetch/negotiate.rs b/gix/src/remote/connection/fetch/negotiate.rs
similarity index 100%
rename from git-repository/src/remote/connection/fetch/negotiate.rs
rename to gix/src/remote/connection/fetch/negotiate.rs
diff --git a/git-repository/src/remote/connection/fetch/receive_pack.rs b/gix/src/remote/connection/fetch/receive_pack.rs
similarity index 100%
rename from git-repository/src/remote/connection/fetch/receive_pack.rs
rename to gix/src/remote/connection/fetch/receive_pack.rs
diff --git a/git-repository/src/remote/connection/fetch/update_refs/mod.rs b/gix/src/remote/connection/fetch/update_refs/mod.rs
similarity index 100%
rename from git-repository/src/remote/connection/fetch/update_refs/mod.rs
rename to gix/src/remote/connection/fetch/update_refs/mod.rs
diff --git a/git-repository/src/remote/connection/fetch/update_refs/tests.rs b/gix/src/remote/connection/fetch/update_refs/tests.rs
similarity index 97%
rename from git-repository/src/remote/connection/fetch/update_refs/tests.rs
rename to gix/src/remote/connection/fetch/update_refs/tests.rs
index 4dcb08085a9..77903283c20 100644
--- a/git-repository/src/remote/connection/fetch/update_refs/tests.rs
+++ b/gix/src/remote/connection/fetch/update_refs/tests.rs
@@ -13,10 +13,10 @@ mod update {
use git_testtools::Result;
use super::hex_to_id;
- use crate as git;
+ use crate as gix;
fn base_repo_path() -> String {
- git::path::realpath(
+ gix::path::realpath(
git_testtools::scripted_fixture_read_only("make_remote_repos.sh")
.unwrap()
.join("base"),
@@ -26,19 +26,19 @@ mod update {
.into_owned()
}
- fn repo(name: &str) -> git::Repository {
+ fn repo(name: &str) -> gix::Repository {
let dir =
git_testtools::scripted_fixture_read_only_with_args("make_fetch_repos.sh", [base_repo_path()]).unwrap();
- git::open_opts(dir.join(name), restricted()).unwrap()
+ gix::open_opts(dir.join(name), restricted()).unwrap()
}
- fn repo_rw(name: &str) -> (git::Repository, git_testtools::tempfile::TempDir) {
+ fn repo_rw(name: &str) -> (gix::Repository, git_testtools::tempfile::TempDir) {
let dir = git_testtools::scripted_fixture_writable_with_args(
"make_fetch_repos.sh",
[base_repo_path()],
git_testtools::Creation::ExecuteScript,
)
.unwrap();
- let repo = git::open_opts(dir.path().join(name), restricted()).unwrap();
+ let repo = gix::open_opts(dir.path().join(name), restricted()).unwrap();
(repo, dir)
}
use git_ref::{transaction::Change, TargetRef};
@@ -185,7 +185,7 @@ mod update {
[base_repo_path()],
)?)?;
let repo = root.join("worktree-root");
- let repo = git::open_opts(repo, restricted())?;
+ let repo = gix::open_opts(repo, restricted())?;
for (branch, path_from_root) in [
("main", "worktree-root"),
("wt-a-nested", "prev/wt-a-nested"),
@@ -548,7 +548,7 @@ mod update {
}
}
- fn mapping_from_spec(spec: &str, repo: &git::Repository) -> (Vec, Vec) {
+ fn mapping_from_spec(spec: &str, repo: &gix::Repository) -> (Vec, Vec) {
let spec = git_refspec::parse(spec.into(), git_refspec::parse::Operation::Fetch).unwrap();
let group = git_refspec::MatchGroup::from_fetch_specs(Some(spec));
let references = repo.references().unwrap();
@@ -573,7 +573,7 @@ mod update {
(mappings, vec![spec.to_owned()])
}
- fn into_remote_ref(mut r: git::Reference<'_>) -> git_protocol::handshake::Ref {
+ fn into_remote_ref(mut r: gix::Reference<'_>) -> git_protocol::handshake::Ref {
let full_ref_name = r.name().as_bstr().into();
match r.target() {
TargetRef::Peeled(id) => git_protocol::handshake::Ref::Direct {
diff --git a/git-repository/src/remote/connection/fetch/update_refs/update.rs b/gix/src/remote/connection/fetch/update_refs/update.rs
similarity index 100%
rename from git-repository/src/remote/connection/fetch/update_refs/update.rs
rename to gix/src/remote/connection/fetch/update_refs/update.rs
diff --git a/git-repository/src/remote/connection/mod.rs b/gix/src/remote/connection/mod.rs
similarity index 100%
rename from git-repository/src/remote/connection/mod.rs
rename to gix/src/remote/connection/mod.rs
diff --git a/git-repository/src/remote/connection/ref_map.rs b/gix/src/remote/connection/ref_map.rs
similarity index 100%
rename from git-repository/src/remote/connection/ref_map.rs
rename to gix/src/remote/connection/ref_map.rs
diff --git a/git-repository/src/remote/errors.rs b/gix/src/remote/errors.rs
similarity index 100%
rename from git-repository/src/remote/errors.rs
rename to gix/src/remote/errors.rs
diff --git a/git-repository/src/remote/fetch.rs b/gix/src/remote/fetch.rs
similarity index 100%
rename from git-repository/src/remote/fetch.rs
rename to gix/src/remote/fetch.rs
diff --git a/git-repository/src/remote/init.rs b/gix/src/remote/init.rs
similarity index 100%
rename from git-repository/src/remote/init.rs
rename to gix/src/remote/init.rs
diff --git a/git-repository/src/remote/mod.rs b/gix/src/remote/mod.rs
similarity index 100%
rename from git-repository/src/remote/mod.rs
rename to gix/src/remote/mod.rs
diff --git a/git-repository/src/remote/name.rs b/gix/src/remote/name.rs
similarity index 100%
rename from git-repository/src/remote/name.rs
rename to gix/src/remote/name.rs
diff --git a/git-repository/src/remote/save.rs b/gix/src/remote/save.rs
similarity index 100%
rename from git-repository/src/remote/save.rs
rename to gix/src/remote/save.rs
diff --git a/git-repository/src/remote/url/mod.rs b/gix/src/remote/url/mod.rs
similarity index 100%
rename from git-repository/src/remote/url/mod.rs
rename to gix/src/remote/url/mod.rs
diff --git a/git-repository/src/remote/url/rewrite.rs b/gix/src/remote/url/rewrite.rs
similarity index 100%
rename from git-repository/src/remote/url/rewrite.rs
rename to gix/src/remote/url/rewrite.rs
diff --git a/git-repository/src/remote/url/scheme_permission.rs b/gix/src/remote/url/scheme_permission.rs
similarity index 100%
rename from git-repository/src/remote/url/scheme_permission.rs
rename to gix/src/remote/url/scheme_permission.rs
diff --git a/git-repository/src/repository/cache.rs b/gix/src/repository/cache.rs
similarity index 100%
rename from git-repository/src/repository/cache.rs
rename to gix/src/repository/cache.rs
diff --git a/git-repository/src/repository/config/mod.rs b/gix/src/repository/config/mod.rs
similarity index 100%
rename from git-repository/src/repository/config/mod.rs
rename to gix/src/repository/config/mod.rs
diff --git a/git-repository/src/repository/config/transport.rs b/gix/src/repository/config/transport.rs
similarity index 100%
rename from git-repository/src/repository/config/transport.rs
rename to gix/src/repository/config/transport.rs
diff --git a/git-repository/src/repository/identity.rs b/gix/src/repository/identity.rs
similarity index 100%
rename from git-repository/src/repository/identity.rs
rename to gix/src/repository/identity.rs
diff --git a/git-repository/src/repository/impls.rs b/gix/src/repository/impls.rs
similarity index 100%
rename from git-repository/src/repository/impls.rs
rename to gix/src/repository/impls.rs
diff --git a/git-repository/src/repository/init.rs b/gix/src/repository/init.rs
similarity index 100%
rename from git-repository/src/repository/init.rs
rename to gix/src/repository/init.rs
diff --git a/git-repository/src/repository/location.rs b/gix/src/repository/location.rs
similarity index 100%
rename from git-repository/src/repository/location.rs
rename to gix/src/repository/location.rs
diff --git a/git-repository/src/repository/mod.rs b/gix/src/repository/mod.rs
similarity index 100%
rename from git-repository/src/repository/mod.rs
rename to gix/src/repository/mod.rs
diff --git a/git-repository/src/repository/object.rs b/gix/src/repository/object.rs
similarity index 100%
rename from git-repository/src/repository/object.rs
rename to gix/src/repository/object.rs
diff --git a/git-repository/src/repository/permissions.rs b/gix/src/repository/permissions.rs
similarity index 100%
rename from git-repository/src/repository/permissions.rs
rename to gix/src/repository/permissions.rs
diff --git a/git-repository/src/repository/reference.rs b/gix/src/repository/reference.rs
similarity index 100%
rename from git-repository/src/repository/reference.rs
rename to gix/src/repository/reference.rs
diff --git a/git-repository/src/repository/remote.rs b/gix/src/repository/remote.rs
similarity index 100%
rename from git-repository/src/repository/remote.rs
rename to gix/src/repository/remote.rs
diff --git a/git-repository/src/repository/revision.rs b/gix/src/repository/revision.rs
similarity index 100%
rename from git-repository/src/repository/revision.rs
rename to gix/src/repository/revision.rs
diff --git a/git-repository/src/repository/snapshots.rs b/gix/src/repository/snapshots.rs
similarity index 100%
rename from git-repository/src/repository/snapshots.rs
rename to gix/src/repository/snapshots.rs
diff --git a/git-repository/src/repository/state.rs b/gix/src/repository/state.rs
similarity index 100%
rename from git-repository/src/repository/state.rs
rename to gix/src/repository/state.rs
diff --git a/git-repository/src/repository/thread_safe.rs b/gix/src/repository/thread_safe.rs
similarity index 100%
rename from git-repository/src/repository/thread_safe.rs
rename to gix/src/repository/thread_safe.rs
diff --git a/git-repository/src/repository/worktree.rs b/gix/src/repository/worktree.rs
similarity index 100%
rename from git-repository/src/repository/worktree.rs
rename to gix/src/repository/worktree.rs
diff --git a/git-repository/src/revision/mod.rs b/gix/src/revision/mod.rs
similarity index 100%
rename from git-repository/src/revision/mod.rs
rename to gix/src/revision/mod.rs
diff --git a/git-repository/src/revision/spec/mod.rs b/gix/src/revision/spec/mod.rs
similarity index 100%
rename from git-repository/src/revision/spec/mod.rs
rename to gix/src/revision/spec/mod.rs
diff --git a/git-repository/src/revision/spec/parse/delegate/mod.rs b/gix/src/revision/spec/parse/delegate/mod.rs
similarity index 100%
rename from git-repository/src/revision/spec/parse/delegate/mod.rs
rename to gix/src/revision/spec/parse/delegate/mod.rs
diff --git a/git-repository/src/revision/spec/parse/delegate/navigate.rs b/gix/src/revision/spec/parse/delegate/navigate.rs
similarity index 100%
rename from git-repository/src/revision/spec/parse/delegate/navigate.rs
rename to gix/src/revision/spec/parse/delegate/navigate.rs
diff --git a/git-repository/src/revision/spec/parse/delegate/revision.rs b/gix/src/revision/spec/parse/delegate/revision.rs
similarity index 100%
rename from git-repository/src/revision/spec/parse/delegate/revision.rs
rename to gix/src/revision/spec/parse/delegate/revision.rs
diff --git a/git-repository/src/revision/spec/parse/error.rs b/gix/src/revision/spec/parse/error.rs
similarity index 100%
rename from git-repository/src/revision/spec/parse/error.rs
rename to gix/src/revision/spec/parse/error.rs
diff --git a/git-repository/src/revision/spec/parse/mod.rs b/gix/src/revision/spec/parse/mod.rs
similarity index 100%
rename from git-repository/src/revision/spec/parse/mod.rs
rename to gix/src/revision/spec/parse/mod.rs
diff --git a/git-repository/src/revision/spec/parse/types.rs b/gix/src/revision/spec/parse/types.rs
similarity index 100%
rename from git-repository/src/revision/spec/parse/types.rs
rename to gix/src/revision/spec/parse/types.rs
diff --git a/git-repository/src/revision/walk.rs b/gix/src/revision/walk.rs
similarity index 100%
rename from git-repository/src/revision/walk.rs
rename to gix/src/revision/walk.rs
diff --git a/git-repository/src/tag.rs b/gix/src/tag.rs
similarity index 100%
rename from git-repository/src/tag.rs
rename to gix/src/tag.rs
diff --git a/git-repository/src/types.rs b/gix/src/types.rs
similarity index 100%
rename from git-repository/src/types.rs
rename to gix/src/types.rs
diff --git a/git-repository/src/worktree/mod.rs b/gix/src/worktree/mod.rs
similarity index 100%
rename from git-repository/src/worktree/mod.rs
rename to gix/src/worktree/mod.rs
diff --git a/git-repository/src/worktree/proxy.rs b/gix/src/worktree/proxy.rs
similarity index 100%
rename from git-repository/src/worktree/proxy.rs
rename to gix/src/worktree/proxy.rs
diff --git a/git-repository/tests/clone/mod.rs b/gix/tests/clone/mod.rs
similarity index 88%
rename from git-repository/tests/clone/mod.rs
rename to gix/tests/clone/mod.rs
index 7da392b1fe5..bad2492d28e 100644
--- a/git-repository/tests/clone/mod.rs
+++ b/gix/tests/clone/mod.rs
@@ -1,13 +1,11 @@
-use git_repository as git;
-
use crate::{remote, util::restricted};
#[cfg(feature = "blocking-network-client")]
mod blocking_io {
use git_object::bstr::ByteSlice;
use git_ref::TargetRef;
- use git_repository as git;
- use git_repository::remote::fetch::SpecIndex;
+
+ use gix::remote::fetch::SpecIndex;
use crate::{remote, util::restricted};
@@ -16,13 +14,13 @@ mod blocking_io {
let tmp = git_testtools::tempfile::TempDir::new()?;
let called_configure_remote = std::sync::Arc::new(std::sync::atomic::AtomicBool::default());
let remote_name = "special";
- let desired_fetch_tags = git::remote::fetch::Tags::Included;
- let mut prepare = git::clone::PrepareFetch::new(
+ let desired_fetch_tags = gix::remote::fetch::Tags::Included;
+ let mut prepare = gix::clone::PrepareFetch::new(
remote::repo("base").path(),
tmp.path(),
- git::create::Kind::Bare,
+ gix::create::Kind::Bare,
Default::default(),
- git::open::Options::isolated().config_overrides([
+ gix::open::Options::isolated().config_overrides([
"init.defaultBranch=unused-as-overridden-by-remote",
"core.logAllRefUpdates",
"user.name=a",
@@ -35,12 +33,12 @@ mod blocking_io {
move |r| {
called_configure_remote.store(true, std::sync::atomic::Ordering::Relaxed);
let r = r
- .with_refspecs(Some("+refs/tags/b-tag:refs/tags/b-tag"), git::remote::Direction::Fetch)?
+ .with_refspecs(Some("+refs/tags/b-tag:refs/tags/b-tag"), gix::remote::Direction::Fetch)?
.with_fetch_tags(desired_fetch_tags);
Ok(r)
}
});
- let (repo, out) = prepare.fetch_only(git::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
+ let (repo, out) = prepare.fetch_only(gix::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
drop(prepare);
assert!(
@@ -49,7 +47,7 @@ mod blocking_io {
);
assert_eq!(repo.remote_names().len(), 1, "only ever one remote");
let remote = repo.find_remote(remote_name)?;
- let num_refspecs = remote.refspecs(git::remote::Direction::Fetch).len();
+ let num_refspecs = remote.refspecs(gix::remote::Direction::Fetch).len();
assert_eq!(
num_refspecs, 2,
"our added spec was stored as well, but no implied specs due to the `Tags::All` setting"
@@ -60,9 +58,9 @@ mod blocking_io {
"fetch-tags are persisted via the 'tagOpt` key"
);
assert!(
- git::path::from_bstr(
+ gix::path::from_bstr(
remote
- .url(git::remote::Direction::Fetch)
+ .url(gix::remote::Direction::Fetch)
.expect("present")
.path
.as_ref()
@@ -106,7 +104,7 @@ mod blocking_io {
);
match out.status {
- git_repository::remote::fetch::Status::Change { update_refs, .. } => {
+ gix::remote::fetch::Status::Change { update_refs, .. } => {
for edit in &update_refs.edits {
use git_odb::Find;
match edit.change.new_value().expect("always set/no deletion") {
@@ -142,7 +140,7 @@ mod blocking_io {
.filter_map(|(idx, update)| {
matches!(
update.mode,
- git::remote::fetch::refs::update::Mode::ImplicitTagNotSentByRemote
+ gix::remote::fetch::refs::update::Mode::ImplicitTagNotSentByRemote
)
.then(|| idx)
})
@@ -238,16 +236,16 @@ mod blocking_io {
#[test]
fn fetch_and_checkout() -> crate::Result {
let tmp = git_testtools::tempfile::TempDir::new()?;
- let mut prepare = git::clone::PrepareFetch::new(
+ let mut prepare = gix::clone::PrepareFetch::new(
remote::repo("base").path(),
tmp.path(),
- git::create::Kind::WithWorktree,
+ gix::create::Kind::WithWorktree,
Default::default(),
restricted(),
)?;
let (mut checkout, _out) =
- prepare.fetch_then_checkout(git::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
- let (repo, _) = checkout.main_worktree(git::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
+ prepare.fetch_then_checkout(gix::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
+ let (repo, _) = checkout.main_worktree(gix::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
let index = repo.index()?;
assert_eq!(index.entries().len(), 1, "All entries are known as per HEAD tree");
@@ -263,17 +261,17 @@ mod blocking_io {
#[test]
fn fetch_and_checkout_empty_remote_repo() -> crate::Result {
let tmp = git_testtools::tempfile::TempDir::new()?;
- let mut prepare = git::clone::PrepareFetch::new(
+ let mut prepare = gix::clone::PrepareFetch::new(
git_testtools::scripted_fixture_read_only("make_empty_repo.sh")?,
tmp.path(),
- git::create::Kind::WithWorktree,
+ gix::create::Kind::WithWorktree,
Default::default(),
restricted(),
)?;
let (mut checkout, out) = prepare
- .fetch_then_checkout(git::progress::Discard, &std::sync::atomic::AtomicBool::default())
+ .fetch_then_checkout(gix::progress::Discard, &std::sync::atomic::AtomicBool::default())
.unwrap();
- let (repo, _) = checkout.main_worktree(git::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
+ let (repo, _) = checkout.main_worktree(gix::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
assert!(!repo.index_path().is_file(), "newly initialized repos have no index");
let head = repo.head()?;
@@ -312,17 +310,17 @@ mod blocking_io {
#[test]
fn fetch_only_without_configuration() -> crate::Result {
let tmp = git_testtools::tempfile::TempDir::new()?;
- let (repo, out) = git::clone::PrepareFetch::new(
+ let (repo, out) = gix::clone::PrepareFetch::new(
remote::repo("base").path(),
tmp.path(),
- git::create::Kind::Bare,
+ gix::create::Kind::Bare,
Default::default(),
restricted(),
)?
- .fetch_only(git::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
+ .fetch_only(gix::progress::Discard, &std::sync::atomic::AtomicBool::default())?;
assert!(repo.find_remote("origin").is_ok(), "default remote name is 'origin'");
match out.status {
- git_repository::remote::fetch::Status::Change { write_pack_bundle, .. } => {
+ gix::remote::fetch::Status::Change { write_pack_bundle, .. } => {
assert!(
write_pack_bundle.keep_path.is_none(),
"keep files aren't kept if refs are written"
@@ -337,10 +335,10 @@ mod blocking_io {
#[test]
fn clone_and_early_persist_without_receive() -> crate::Result {
let tmp = git_testtools::tempfile::TempDir::new()?;
- let repo = git::clone::PrepareFetch::new(
+ let repo = gix::clone::PrepareFetch::new(
remote::repo("base").path(),
tmp.path(),
- git::create::Kind::Bare,
+ gix::create::Kind::Bare,
Default::default(),
restricted(),
)?
@@ -353,10 +351,10 @@ fn clone_and_early_persist_without_receive() -> crate::Result {
fn clone_and_destination_must_be_empty() -> crate::Result {
let tmp = git_testtools::tempfile::TempDir::new()?;
std::fs::write(tmp.path().join("file"), b"hello")?;
- match git::clone::PrepareFetch::new(
+ match gix::clone::PrepareFetch::new(
remote::repo("base").path(),
tmp.path(),
- git::create::Kind::Bare,
+ gix::create::Kind::Bare,
Default::default(),
restricted(),
) {
@@ -372,10 +370,10 @@ fn clone_and_destination_must_be_empty() -> crate::Result {
fn clone_bare_into_empty_directory_and_early_drop() -> crate::Result {
let tmp = git_testtools::tempfile::TempDir::new()?;
// this breaks isolation, but shouldn't be affecting the test. If so, use isolation options for opening the repo.
- let prep = git::clone::PrepareFetch::new(
+ let prep = gix::clone::PrepareFetch::new(
remote::repo("base").path(),
tmp.path(),
- git::create::Kind::Bare,
+ gix::create::Kind::Bare,
Default::default(),
restricted(),
)?;
@@ -390,10 +388,10 @@ fn clone_bare_into_empty_directory_and_early_drop() -> crate::Result {
#[test]
fn clone_into_empty_directory_and_early_drop() -> crate::Result {
let tmp = git_testtools::tempfile::TempDir::new()?;
- let prep = git::clone::PrepareFetch::new(
+ let prep = gix::clone::PrepareFetch::new(
remote::repo("base").path(),
tmp.path(),
- git::create::Kind::WithWorktree,
+ gix::create::Kind::WithWorktree,
Default::default(),
restricted(),
)?;
diff --git a/git-repository/tests/commit/mod.rs b/gix/tests/commit/mod.rs
similarity index 95%
rename from git-repository/tests/commit/mod.rs
rename to gix/tests/commit/mod.rs
index 44b483d9e1e..efa45d8b44a 100644
--- a/git-repository/tests/commit/mod.rs
+++ b/gix/tests/commit/mod.rs
@@ -1,5 +1,5 @@
mod describe {
- use git_repository::commit::describe::SelectRef::{AllRefs, AllTags, AnnotatedTags};
+ use gix::commit::describe::SelectRef::{AllRefs, AllTags, AnnotatedTags};
use crate::named_repo;
diff --git a/git-repository/tests/config/mod.rs b/gix/tests/config/mod.rs
similarity index 100%
rename from git-repository/tests/config/mod.rs
rename to gix/tests/config/mod.rs
diff --git a/git-repository/tests/config/tree.rs b/gix/tests/config/tree.rs
similarity index 93%
rename from git-repository/tests/config/tree.rs
rename to gix/tests/config/tree.rs
index c592df7abd3..5cc166cab5d 100644
--- a/git-repository/tests/config/tree.rs
+++ b/gix/tests/config/tree.rs
@@ -10,28 +10,28 @@ mod keys {
use std::borrow::Cow;
use git_object::bstr::ByteSlice;
- use git_repository as git;
- use git_repository::config::tree::{Key, Section};
+
+ use gix::config::tree::{Key, Section};
use crate::config::tree::bcow;
#[test]
fn string() -> crate::Result {
assert_eq!(
- git::config::tree::Http::USER_AGENT.try_into_string(bcow("agent"))?,
+ gix::config::tree::Http::USER_AGENT.try_into_string(bcow("agent"))?,
"agent"
);
- assert!(git::config::tree::Http::USER_AGENT.validate("agent".into()).is_ok());
+ assert!(gix::config::tree::Http::USER_AGENT.validate("agent".into()).is_ok());
let invalid = b"\xF0\x80\x80".as_bstr();
assert_eq!(
- git::config::tree::Http::USER_AGENT
+ gix::config::tree::Http::USER_AGENT
.try_into_string(Cow::Borrowed(invalid))
.unwrap_err()
.to_string(),
"The utf-8 string at \"http.userAgent=���\" could not be decoded"
);
- assert!(git::config::tree::Http::USER_AGENT.validate(invalid).is_err());
+ assert!(gix::config::tree::Http::USER_AGENT.validate(invalid).is_err());
Ok(())
}
@@ -39,21 +39,21 @@ mod keys {
#[test]
fn any() {
assert!(
- !git::config::Tree.sections().is_empty(),
+ !gix::config::Tree.sections().is_empty(),
"the root has at least one section"
);
- assert_eq!(git::config::Tree::AUTHOR.name(), "author");
- assert_eq!(git::config::tree::Author.keys().len(), 2);
- assert_eq!(git::config::tree::Author::NAME.name(), "name");
- assert_eq!(git::config::tree::Author::EMAIL.name(), "email");
+ assert_eq!(gix::config::Tree::AUTHOR.name(), "author");
+ assert_eq!(gix::config::tree::Author.keys().len(), 2);
+ assert_eq!(gix::config::tree::Author::NAME.name(), "name");
+ assert_eq!(gix::config::tree::Author::EMAIL.name(), "email");
assert_eq!(
- git::config::tree::Author::NAME
+ gix::config::tree::Author::NAME
.validated_assignment("user".into())
.unwrap(),
"author.name=user"
);
assert_eq!(
- git::config::tree::Author::NAME
+ gix::config::tree::Author::NAME
.validated_assignment("user".into())
.unwrap(),
"author.name=user"
@@ -62,17 +62,17 @@ mod keys {
#[test]
fn remote_name() {
- assert!(git::config::tree::Remote::PUSH_DEFAULT
+ assert!(gix::config::tree::Remote::PUSH_DEFAULT
.validate("origin".into())
.is_ok());
- assert!(git::config::tree::Remote::PUSH_DEFAULT
+ assert!(gix::config::tree::Remote::PUSH_DEFAULT
.validate("https://github.com/byron/gitoxide".into())
.is_ok());
}
}
mod branch {
- use git_repository::config::tree::{branch, Branch, Key};
+ use gix::config::tree::{branch, Branch, Key};
use crate::config::tree::bcow;
@@ -95,7 +95,7 @@ mod ssh {
#[cfg(feature = "blocking-network-client")]
fn variant() -> crate::Result {
use git_protocol::transport::client::ssh::ProgramKind;
- use git_repository::config::tree::Ssh;
+ use gix::config::tree::Ssh;
use crate::config::tree::bcow;
for (actual, expected) in [
@@ -120,8 +120,8 @@ mod ssh {
mod diff {
use git_diff::blob::Algorithm;
- use git_repository::config::tree::{Diff, Key};
- use git_repository::diff::rename::Tracking;
+ use gix::config::tree::{Diff, Key};
+ use gix::diff::rename::Tracking;
use crate::config::tree::bcow;
@@ -192,7 +192,7 @@ mod core {
use std::time::Duration;
use git_lock::acquire::Fail;
- use git_repository::{
+ use gix::{
config::tree::{Core, Key},
revision::spec::parse::ObjectKindHint,
};
@@ -351,7 +351,7 @@ mod core {
}
mod extensions {
- use git_repository::config::tree::{Extensions, Key};
+ use gix::config::tree::{Extensions, Key};
use crate::config::tree::bcow;
@@ -380,7 +380,7 @@ mod extensions {
}
mod checkout {
- use git_repository::config::tree::{Checkout, Key};
+ use gix::config::tree::{Checkout, Key};
fn int(value: i64) -> Result {
Ok(value)
@@ -400,7 +400,7 @@ mod checkout {
}
mod pack {
- use git_repository::config::tree::{Key, Pack};
+ use gix::config::tree::{Key, Pack};
#[test]
fn index_version() -> crate::Result {
@@ -429,7 +429,7 @@ mod pack {
#[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
mod protocol {
- use git_repository::{
+ use gix::{
config::tree::{protocol, Key, Protocol},
remote::url::scheme_permission::Allow,
};
@@ -468,7 +468,7 @@ mod protocol {
mod gitoxide {
mod http {
- use git_repository::config::tree::{gitoxide, Key};
+ use gix::config::tree::{gitoxide, Key};
use std::time::Duration;
#[test]
@@ -481,7 +481,7 @@ mod gitoxide {
}
}
mod allow {
- use git_repository::config::tree::{gitoxide, Key};
+ use gix::config::tree::{gitoxide, Key};
#[test]
fn protocol_from_user() {
@@ -494,7 +494,7 @@ mod gitoxide {
}
}
mod commit {
- use git_repository::config::tree::{gitoxide, Key};
+ use gix::config::tree::{gitoxide, Key};
#[test]
fn author_and_committer_date() {
@@ -513,7 +513,7 @@ mod gitoxide {
}
}
mod author {
- use git_repository::config::tree::{gitoxide, Key};
+ use gix::config::tree::{gitoxide, Key};
#[test]
fn name_and_email_fallback() {
@@ -532,7 +532,7 @@ mod gitoxide {
}
}
mod committer {
- use git_repository::config::tree::{gitoxide, Key};
+ use gix::config::tree::{gitoxide, Key};
#[test]
fn name_and_email_fallback() {
@@ -560,7 +560,7 @@ mod http {
use std::borrow::Cow;
use git_object::bstr::ByteSlice;
- use git_repository::config::tree::{Http, Key};
+ use gix::config::tree::{Http, Key};
use crate::config::tree::bcow;
@@ -702,7 +702,7 @@ mod http {
}
mod remote {
- use git_repository::{
+ use gix::{
config::tree::{Key, Remote},
remote,
};
diff --git a/git-repository/tests/fixtures/generated-archives/.gitignore b/gix/tests/fixtures/generated-archives/.gitignore
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/.gitignore
rename to gix/tests/fixtures/generated-archives/.gitignore
diff --git a/git-repository/tests/fixtures/generated-archives/make_am_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_am_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_am_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_am_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_basic_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_basic_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_basic_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_basic_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_bisect_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_bisect_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_bisect_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_bisect_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_cherry_pick_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_cherry_pick_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_cherry_pick_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_cherry_pick_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_cherry_pick_sequence_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_cherry_pick_sequence_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_cherry_pick_sequence_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_cherry_pick_sequence_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_commit_describe_multiple_tags.tar.xz b/gix/tests/fixtures/generated-archives/make_commit_describe_multiple_tags.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_commit_describe_multiple_tags.tar.xz
rename to gix/tests/fixtures/generated-archives/make_commit_describe_multiple_tags.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_config_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_config_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_config_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_config_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_config_repos.tar.xz b/gix/tests/fixtures/generated-archives/make_config_repos.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_config_repos.tar.xz
rename to gix/tests/fixtures/generated-archives/make_config_repos.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_diff_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_diff_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_diff_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_diff_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_empty_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_empty_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_empty_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_empty_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_merge_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_merge_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_merge_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_merge_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_rebase_i_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_rebase_i_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_rebase_i_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_rebase_i_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_references_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_references_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_references_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_references_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_remote_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_remote_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_remote_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_remote_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_repo_with_fork_and_dates.tar.xz b/gix/tests/fixtures/generated-archives/make_repo_with_fork_and_dates.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_repo_with_fork_and_dates.tar.xz
rename to gix/tests/fixtures/generated-archives/make_repo_with_fork_and_dates.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_rev_spec_parse_repos.tar.xz b/gix/tests/fixtures/generated-archives/make_rev_spec_parse_repos.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_rev_spec_parse_repos.tar.xz
rename to gix/tests/fixtures/generated-archives/make_rev_spec_parse_repos.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_revert_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_revert_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_revert_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_revert_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_revert_sequence_repo.tar.xz b/gix/tests/fixtures/generated-archives/make_revert_sequence_repo.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_revert_sequence_repo.tar.xz
rename to gix/tests/fixtures/generated-archives/make_revert_sequence_repo.tar.xz
diff --git a/git-repository/tests/fixtures/generated-archives/make_submodules.tar.xz b/gix/tests/fixtures/generated-archives/make_submodules.tar.xz
similarity index 100%
rename from git-repository/tests/fixtures/generated-archives/make_submodules.tar.xz
rename to gix/tests/fixtures/generated-archives/make_submodules.tar.xz
diff --git a/git-repository/tests/fixtures/make_am_repo.sh b/gix/tests/fixtures/make_am_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_am_repo.sh
rename to gix/tests/fixtures/make_am_repo.sh
diff --git a/git-repository/tests/fixtures/make_basic_repo.sh b/gix/tests/fixtures/make_basic_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_basic_repo.sh
rename to gix/tests/fixtures/make_basic_repo.sh
diff --git a/git-repository/tests/fixtures/make_bisect_repo.sh b/gix/tests/fixtures/make_bisect_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_bisect_repo.sh
rename to gix/tests/fixtures/make_bisect_repo.sh
diff --git a/git-repository/tests/fixtures/make_cherry_pick_repo.sh b/gix/tests/fixtures/make_cherry_pick_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_cherry_pick_repo.sh
rename to gix/tests/fixtures/make_cherry_pick_repo.sh
diff --git a/git-repository/tests/fixtures/make_cherry_pick_sequence_repo.sh b/gix/tests/fixtures/make_cherry_pick_sequence_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_cherry_pick_sequence_repo.sh
rename to gix/tests/fixtures/make_cherry_pick_sequence_repo.sh
diff --git a/git-repository/tests/fixtures/make_commit_describe_multiple_tags.sh b/gix/tests/fixtures/make_commit_describe_multiple_tags.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_commit_describe_multiple_tags.sh
rename to gix/tests/fixtures/make_commit_describe_multiple_tags.sh
diff --git a/git-repository/tests/fixtures/make_config_repo.sh b/gix/tests/fixtures/make_config_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_config_repo.sh
rename to gix/tests/fixtures/make_config_repo.sh
diff --git a/git-repository/tests/fixtures/make_config_repos.sh b/gix/tests/fixtures/make_config_repos.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_config_repos.sh
rename to gix/tests/fixtures/make_config_repos.sh
diff --git a/git-repository/tests/fixtures/make_core_worktree_repo.sh b/gix/tests/fixtures/make_core_worktree_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_core_worktree_repo.sh
rename to gix/tests/fixtures/make_core_worktree_repo.sh
diff --git a/git-repository/tests/fixtures/make_diff_repo.sh b/gix/tests/fixtures/make_diff_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_diff_repo.sh
rename to gix/tests/fixtures/make_diff_repo.sh
diff --git a/git-repository/tests/fixtures/make_empty_repo.sh b/gix/tests/fixtures/make_empty_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_empty_repo.sh
rename to gix/tests/fixtures/make_empty_repo.sh
diff --git a/git-repository/tests/fixtures/make_fetch_repos.sh b/gix/tests/fixtures/make_fetch_repos.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_fetch_repos.sh
rename to gix/tests/fixtures/make_fetch_repos.sh
diff --git a/git-repository/tests/fixtures/make_merge_repo.sh b/gix/tests/fixtures/make_merge_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_merge_repo.sh
rename to gix/tests/fixtures/make_merge_repo.sh
diff --git a/git-repository/tests/fixtures/make_rebase_i_repo.sh b/gix/tests/fixtures/make_rebase_i_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_rebase_i_repo.sh
rename to gix/tests/fixtures/make_rebase_i_repo.sh
diff --git a/git-repository/tests/fixtures/make_references_repo.sh b/gix/tests/fixtures/make_references_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_references_repo.sh
rename to gix/tests/fixtures/make_references_repo.sh
diff --git a/git-repository/tests/fixtures/make_remote_repo.sh b/gix/tests/fixtures/make_remote_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_remote_repo.sh
rename to gix/tests/fixtures/make_remote_repo.sh
diff --git a/git-repository/tests/fixtures/make_remote_repos.sh b/gix/tests/fixtures/make_remote_repos.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_remote_repos.sh
rename to gix/tests/fixtures/make_remote_repos.sh
diff --git a/git-repository/tests/fixtures/make_repo_with_fork_and_dates.sh b/gix/tests/fixtures/make_repo_with_fork_and_dates.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_repo_with_fork_and_dates.sh
rename to gix/tests/fixtures/make_repo_with_fork_and_dates.sh
diff --git a/git-repository/tests/fixtures/make_rev_spec_parse_repos.sh b/gix/tests/fixtures/make_rev_spec_parse_repos.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_rev_spec_parse_repos.sh
rename to gix/tests/fixtures/make_rev_spec_parse_repos.sh
diff --git a/git-repository/tests/fixtures/make_revert_repo.sh b/gix/tests/fixtures/make_revert_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_revert_repo.sh
rename to gix/tests/fixtures/make_revert_repo.sh
diff --git a/git-repository/tests/fixtures/make_revert_sequence_repo.sh b/gix/tests/fixtures/make_revert_sequence_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_revert_sequence_repo.sh
rename to gix/tests/fixtures/make_revert_sequence_repo.sh
diff --git a/git-repository/tests/fixtures/make_signatures_repo.sh b/gix/tests/fixtures/make_signatures_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_signatures_repo.sh
rename to gix/tests/fixtures/make_signatures_repo.sh
diff --git a/git-repository/tests/fixtures/make_submodules.sh b/gix/tests/fixtures/make_submodules.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_submodules.sh
rename to gix/tests/fixtures/make_submodules.sh
diff --git a/git-repository/tests/fixtures/make_worktree_repo.sh b/gix/tests/fixtures/make_worktree_repo.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_worktree_repo.sh
rename to gix/tests/fixtures/make_worktree_repo.sh
diff --git a/git-repository/tests/fixtures/make_worktree_repo_with_configs.sh b/gix/tests/fixtures/make_worktree_repo_with_configs.sh
similarity index 100%
rename from git-repository/tests/fixtures/make_worktree_repo_with_configs.sh
rename to gix/tests/fixtures/make_worktree_repo_with_configs.sh
diff --git a/git-repository/tests/git-with-regex.rs b/gix/tests/git-with-regex.rs
similarity index 100%
rename from git-repository/tests/git-with-regex.rs
rename to gix/tests/git-with-regex.rs
diff --git a/git-repository/tests/git.rs b/gix/tests/git.rs
similarity index 100%
rename from git-repository/tests/git.rs
rename to gix/tests/git.rs
diff --git a/git-repository/tests/head/mod.rs b/gix/tests/head/mod.rs
similarity index 73%
rename from git-repository/tests/head/mod.rs
rename to gix/tests/head/mod.rs
index c8e2fa6a940..b8508a4c70f 100644
--- a/git-repository/tests/head/mod.rs
+++ b/gix/tests/head/mod.rs
@@ -1,5 +1,4 @@
mod into_remote {
- use git_repository as git;
use crate::remote;
@@ -7,7 +6,7 @@ mod into_remote {
fn unborn_is_none() -> crate::Result {
let repo = remote::repo("url-rewriting");
assert_eq!(
- repo.head()?.into_remote(git::remote::Direction::Fetch).transpose()?,
+ repo.head()?.into_remote(gix::remote::Direction::Fetch).transpose()?,
None
);
Ok(())
@@ -17,7 +16,7 @@ mod into_remote {
fn detached_is_none() -> crate::Result {
let repo = remote::repo("detached-head");
assert_eq!(
- repo.head()?.into_remote(git::remote::Direction::Fetch).transpose()?,
+ repo.head()?.into_remote(gix::remote::Direction::Fetch).transpose()?,
None
);
Ok(())
diff --git a/git-repository/tests/id/mod.rs b/gix/tests/id/mod.rs
similarity index 88%
rename from git-repository/tests/id/mod.rs
rename to gix/tests/id/mod.rs
index cc070450271..ecf864345d0 100644
--- a/git-repository/tests/id/mod.rs
+++ b/gix/tests/id/mod.rs
@@ -1,8 +1,8 @@
use std::cmp::Ordering;
use git_object::bstr::BString;
-use git_repository as git;
-use git_repository::{
+
+use gix::{
config::tree::{Core, Key},
prelude::ObjectIdExt,
};
@@ -21,9 +21,9 @@ fn prefix() -> crate::Result {
assert_eq!(prefix.cmp_oid(&id), Ordering::Equal);
assert_eq!(prefix.hex_len(), 7, "preconfigured via core.abbrev default value");
- let repo = git::open_opts(
+ let repo = gix::open_opts(
work_dir,
- git::open::Options::isolated().config_overrides(Core::ABBREV.validated_assignment("5".into())),
+ gix::open::Options::isolated().config_overrides(Core::ABBREV.validated_assignment("5".into())),
)
.unwrap();
let id = id.detach().attach(&repo);
@@ -32,9 +32,9 @@ fn prefix() -> crate::Result {
assert_eq!(prefix.hex_len(), 5, "preconfigured via core.abbrev");
assert!(
- git::open_opts(
+ gix::open_opts(
work_dir,
- git::open::Options::isolated().config_overrides(Some(BString::from("core.abbrev=invalid")))
+ gix::open::Options::isolated().config_overrides(Some(BString::from("core.abbrev=invalid")))
)
.is_ok(),
"By default gitoxide acts like `libgit2` here and we prefer to be lenient when possible"
@@ -42,14 +42,14 @@ fn prefix() -> crate::Result {
assert!(
matches!(
- git::open_opts(
+ gix::open_opts(
work_dir,
- git::open::Options::isolated()
+ gix::open::Options::isolated()
.strict_config(true)
.config_overrides(Some(BString::from("core.abbrev=invalid")))
)
.unwrap_err(),
- git::open::Error::Config(git::config::Error::CoreAbbrev(_))
+ gix::open::Error::Config(gix::config::Error::CoreAbbrev(_))
),
"an empty core.abbrev fails the open operation in strict config mode, emulating git behaviour"
);
diff --git a/git-repository/tests/init/mod.rs b/gix/tests/init/mod.rs
similarity index 74%
rename from git-repository/tests/init/mod.rs
rename to gix/tests/init/mod.rs
index d81503da73f..feb2095d10d 100644
--- a/git-repository/tests/init/mod.rs
+++ b/gix/tests/init/mod.rs
@@ -5,8 +5,8 @@ mod bare {
fn init_into_non_existing_directory_creates_it() -> crate::Result {
let tmp = tempfile::tempdir()?;
let git_dir = tmp.path().join("bare.git");
- let repo = git_repository::init_bare(&git_dir)?;
- assert_eq!(repo.kind(), git_repository::Kind::Bare);
+ let repo = gix::init_bare(&git_dir)?;
+ assert_eq!(repo.kind(), gix::Kind::Bare);
assert!(
repo.work_dir().is_none(),
"a worktree isn't present in bare repositories"
@@ -16,15 +16,15 @@ mod bare {
git_dir,
"the repository is placed into the given directory without added sub-directories"
);
- assert_eq!(git_repository::open(repo.git_dir())?, repo);
+ assert_eq!(gix::open(repo.git_dir())?, repo);
Ok(())
}
#[test]
fn init_into_empty_directory_uses_it_directly() -> crate::Result {
let tmp = tempfile::tempdir()?;
- let repo = git_repository::init_bare(tmp.path())?;
- assert_eq!(repo.kind(), git_repository::Kind::Bare);
+ let repo = gix::init_bare(tmp.path())?;
+ assert_eq!(repo.kind(), gix::Kind::Bare);
assert!(
repo.work_dir().is_none(),
"a worktree isn't present in bare repositories"
@@ -34,7 +34,7 @@ mod bare {
tmp.path(),
"the repository is placed into the directory itself"
);
- assert_eq!(git_repository::open(repo.git_dir())?, repo);
+ assert_eq!(gix::open(repo.git_dir())?, repo);
Ok(())
}
@@ -43,7 +43,7 @@ mod bare {
let tmp = tempfile::tempdir()?;
std::fs::write(tmp.path().join("existing.txt"), b"I was here before you")?;
- assert!(git_repository::init_bare(tmp.path())
+ assert!(gix::init_bare(tmp.path())
.unwrap_err()
.to_string()
.starts_with("Refusing to initialize the non-empty directory as"));
@@ -52,17 +52,16 @@ mod bare {
}
mod non_bare {
- use git_repository as git;
use git_testtools::tempfile;
#[test]
fn init_bare_with_custom_branch_name() -> crate::Result {
let tmp = tempfile::tempdir()?;
- let repo: git::Repository = git::ThreadSafeRepository::init_opts(
+ let repo: gix::Repository = gix::ThreadSafeRepository::init_opts(
tmp.path(),
- git::create::Kind::Bare,
- git::create::Options::default(),
- git::open::Options::isolated().config_overrides([
+ gix::create::Kind::Bare,
+ gix::create::Options::default(),
+ gix::open::Options::isolated().config_overrides([
"user.name=a",
"user.email=b",
"init.defaultBranch=special",
@@ -78,16 +77,16 @@ mod non_bare {
#[test]
fn init_into_empty_directory_creates_a_dot_git_dir() -> crate::Result {
let tmp = tempfile::tempdir()?;
- let repo = git::init(tmp.path())?;
- assert_eq!(repo.kind(), git::Kind::WorkTree { is_linked: false });
+ let repo = gix::init(tmp.path())?;
+ assert_eq!(repo.kind(), gix::Kind::WorkTree { is_linked: false });
assert_eq!(repo.work_dir(), Some(tmp.path()), "there is a work tree by default");
assert_eq!(
repo.git_dir(),
tmp.path().join(".git"),
"there is a work tree by default"
);
- assert_eq!(git::open(repo.git_dir())?, repo);
- assert_eq!(git::open(repo.work_dir().as_ref().expect("non-bare repo"))?, repo);
+ assert_eq!(gix::open(repo.git_dir())?, repo);
+ assert_eq!(gix::open(repo.work_dir().as_ref().expect("non-bare repo"))?, repo);
Ok(())
}
@@ -96,14 +95,14 @@ mod non_bare {
let tmp = tempfile::tempdir()?;
std::fs::write(tmp.path().join("existing.txt"), b"I was here before you")?;
- let err = git::ThreadSafeRepository::init_opts(
+ let err = gix::ThreadSafeRepository::init_opts(
tmp.path(),
- git::create::Kind::WithWorktree,
- git::create::Options {
+ gix::create::Kind::WithWorktree,
+ gix::create::Options {
destination_must_be_empty: true,
..Default::default()
},
- git::open::Options::isolated(),
+ gix::open::Options::isolated(),
)
.unwrap_err();
assert!(err
@@ -117,7 +116,7 @@ mod non_bare {
let tmp = tempfile::tempdir()?;
std::fs::write(tmp.path().join("existing.txt"), b"I was here before you")?;
- let repo = git_repository::init(tmp.path())?;
+ let repo = gix::init(tmp.path())?;
assert_eq!(repo.work_dir().expect("present"), tmp.path());
assert_eq!(
repo.git_dir(),
diff --git a/git-repository/tests/object/blob.rs b/gix/tests/object/blob.rs
similarity index 100%
rename from git-repository/tests/object/blob.rs
rename to gix/tests/object/blob.rs
diff --git a/git-repository/tests/object/commit.rs b/gix/tests/object/commit.rs
similarity index 100%
rename from git-repository/tests/object/commit.rs
rename to gix/tests/object/commit.rs
diff --git a/git-repository/tests/object/mod.rs b/gix/tests/object/mod.rs
similarity index 73%
rename from git-repository/tests/object/mod.rs
rename to gix/tests/object/mod.rs
index 74bdd176a16..1d3c131feeb 100644
--- a/git-repository/tests/object/mod.rs
+++ b/gix/tests/object/mod.rs
@@ -5,7 +5,7 @@ mod tree;
#[test]
fn object_ref_size_in_memory() {
assert_eq!(
- std::mem::size_of::>(),
+ std::mem::size_of::>(),
56,
"the size of this structure should not changed unexpectedly"
)
@@ -14,7 +14,7 @@ fn object_ref_size_in_memory() {
#[test]
fn oid_size_in_memory() {
assert_eq!(
- std::mem::size_of::>(),
+ std::mem::size_of::>(),
32,
"the size of this structure should not changed unexpectedly"
)
diff --git a/git-repository/tests/object/tree/diff.rs b/gix/tests/object/tree/diff.rs
similarity index 93%
rename from git-repository/tests/object/tree/diff.rs
rename to gix/tests/object/tree/diff.rs
index 78b909eaf48..18bad6bfeac 100644
--- a/git-repository/tests/object/tree/diff.rs
+++ b/gix/tests/object/tree/diff.rs
@@ -1,8 +1,8 @@
use std::convert::Infallible;
use git_object::{bstr::ByteSlice, tree::EntryMode};
-use git_repository as git;
-use git_repository::object::{blob::diff::line::Change, tree::diff::change::Event};
+
+use gix::object::{blob::diff::line::Change, tree::diff::change::Event};
use crate::named_repo;
@@ -88,12 +88,12 @@ fn changes_against_tree_with_filename_tracking() -> crate::Result {
Ok(())
}
-fn tree_named<'repo>(repo: &'repo git::Repository, rev_spec: &str) -> git::Tree<'repo> {
+fn tree_named<'repo>(repo: &'repo gix::Repository, rev_spec: &str) -> gix::Tree<'repo> {
repo.rev_parse_single(rev_spec)
.unwrap()
.object()
.unwrap()
- .peel_to_kind(git::object::Kind::Tree)
+ .peel_to_kind(gix::object::Kind::Tree)
.unwrap()
.into_tree()
}
@@ -102,7 +102,7 @@ mod renames {
use crate::object::tree::diff::tree_named;
use crate::util::named_repo;
use git_ref::bstr::BStr;
- use git_repository::object::tree::diff::change::Event;
+ use gix::object::tree::diff::change::Event;
use std::convert::Infallible;
#[test]
diff --git a/git-repository/tests/object/tree/mod.rs b/gix/tests/object/tree/mod.rs
similarity index 100%
rename from git-repository/tests/object/tree/mod.rs
rename to gix/tests/object/tree/mod.rs
diff --git a/git-repository/tests/reference/mod.rs b/gix/tests/reference/mod.rs
similarity index 90%
rename from git-repository/tests/reference/mod.rs
rename to gix/tests/reference/mod.rs
index 3d2100789e7..bb71535867a 100644
--- a/git-repository/tests/reference/mod.rs
+++ b/gix/tests/reference/mod.rs
@@ -1,21 +1,20 @@
use crate::repo_rw;
mod log {
- use git_repository as git;
#[test]
fn message() {
assert_eq!(
- git::reference::log::message("commit", "the subject\n\nthe body".into(), 0),
+ gix::reference::log::message("commit", "the subject\n\nthe body".into(), 0),
"commit (initial): the subject"
);
assert_eq!(
- git::reference::log::message("other", "the subject".into(), 1),
+ gix::reference::log::message("other", "the subject".into(), 1),
"other: the subject"
);
assert_eq!(
- git::reference::log::message("rebase", "the subject".into(), 2),
+ gix::reference::log::message("rebase", "the subject".into(), 2),
"rebase (merge): the subject"
);
}
@@ -28,7 +27,7 @@ mod find {
use crate::util::hex_to_id;
- fn repo() -> crate::Result {
+ fn repo() -> crate::Result {
crate::repo("make_references_repo.sh").map(Into::into)
}
diff --git a/git-repository/tests/reference/remote.rs b/gix/tests/reference/remote.rs
similarity index 68%
rename from git-repository/tests/reference/remote.rs
rename to gix/tests/reference/remote.rs
index 7fe0e15137c..8e8a09392aa 100644
--- a/git-repository/tests/reference/remote.rs
+++ b/gix/tests/reference/remote.rs
@@ -1,5 +1,3 @@
-use git_repository as git;
-
use crate::remote;
#[test]
@@ -9,14 +7,14 @@ fn push_defaults_to_fetch() -> crate::Result {
let branch = head.clone().try_into_referent().expect("history");
assert_eq!(
branch
- .remote_name(git::remote::Direction::Push)
+ .remote_name(gix::remote::Direction::Push)
.expect("fallback to fetch"),
- branch.remote_name(git::remote::Direction::Fetch).expect("configured"),
+ branch.remote_name(gix::remote::Direction::Fetch).expect("configured"),
"push falls back to fetch"
);
assert_eq!(
branch
- .remote(git::remote::Direction::Push)
+ .remote(gix::remote::Direction::Push)
.expect("configured")?
.name()
.expect("set")
@@ -24,7 +22,7 @@ fn push_defaults_to_fetch() -> crate::Result {
"origin"
);
assert_eq!(
- head.into_remote(git::remote::Direction::Push)
+ head.into_remote(gix::remote::Direction::Push)
.expect("same with branch")?
.name()
.expect("set")
@@ -43,7 +41,7 @@ fn separate_push_and_fetch() -> crate::Result {
assert_eq!(
branch
- .remote_name(git::remote::Direction::Push)
+ .remote_name(gix::remote::Direction::Push)
.expect("set")
.as_symbol()
.unwrap(),
@@ -51,7 +49,7 @@ fn separate_push_and_fetch() -> crate::Result {
);
assert_eq!(
branch
- .remote_name(git::remote::Direction::Fetch)
+ .remote_name(gix::remote::Direction::Fetch)
.expect("set")
.as_symbol()
.unwrap(),
@@ -59,12 +57,12 @@ fn separate_push_and_fetch() -> crate::Result {
);
assert_ne!(
- branch.remote(git::remote::Direction::Push).transpose()?,
- branch.remote(git::remote::Direction::Fetch).transpose()?
+ branch.remote(gix::remote::Direction::Push).transpose()?,
+ branch.remote(gix::remote::Direction::Fetch).transpose()?
);
assert_ne!(
- head.clone().into_remote(git::remote::Direction::Push).transpose()?,
- head.into_remote(git::remote::Direction::Fetch).transpose()?
+ head.clone().into_remote(gix::remote::Direction::Push).transpose()?,
+ head.into_remote(gix::remote::Direction::Fetch).transpose()?
);
}
Ok(())
@@ -76,10 +74,10 @@ fn not_configured() -> crate::Result {
let head = repo.head()?;
let branch = head.clone().try_into_referent().expect("history");
- assert_eq!(branch.remote_name(git::remote::Direction::Push), None);
- assert_eq!(branch.remote_name(git::remote::Direction::Fetch), None);
- assert_eq!(branch.remote(git::remote::Direction::Fetch).transpose()?, None);
- assert_eq!(head.into_remote(git::remote::Direction::Fetch).transpose()?, None);
+ assert_eq!(branch.remote_name(gix::remote::Direction::Push), None);
+ assert_eq!(branch.remote_name(gix::remote::Direction::Fetch), None);
+ assert_eq!(branch.remote(gix::remote::Direction::Fetch).transpose()?, None);
+ assert_eq!(head.into_remote(gix::remote::Direction::Fetch).transpose()?, None);
Ok(())
}
@@ -92,14 +90,14 @@ fn dot_remote_behind_symbol() -> crate::Result {
assert_eq!(
branch
- .remote_name(git::remote::Direction::Push)
+ .remote_name(gix::remote::Direction::Push)
.expect("derived push")
.as_url(),
Some(".".into())
);
assert_eq!(
branch
- .remote_name(git::remote::Direction::Fetch)
+ .remote_name(gix::remote::Direction::Fetch)
.expect("fetch")
.as_url(),
Some(".".into())
@@ -107,12 +105,12 @@ fn dot_remote_behind_symbol() -> crate::Result {
{
let remote = branch
- .remote(git::remote::Direction::Push)
+ .remote(gix::remote::Direction::Push)
.transpose()?
.expect("present");
assert_eq!(remote.name(), None, "It's a url after all, anonymous");
- assert_eq!(remote.url(git::remote::Direction::Push).unwrap().path, ".");
- assert_eq!(remote.url(git::remote::Direction::Fetch).unwrap().path, ".");
+ assert_eq!(remote.url(gix::remote::Direction::Push).unwrap().path, ".");
+ assert_eq!(remote.url(gix::remote::Direction::Fetch).unwrap().path, ".");
}
Ok(())
@@ -125,7 +123,7 @@ fn url_as_remote_name() -> crate::Result {
assert_eq!(
branch
- .remote_name(git::remote::Direction::Push)
+ .remote_name(gix::remote::Direction::Push)
.expect("set")
.as_url()
.unwrap(),
@@ -134,7 +132,7 @@ fn url_as_remote_name() -> crate::Result {
);
assert_eq!(
branch
- .remote_name(git::remote::Direction::Fetch)
+ .remote_name(gix::remote::Direction::Fetch)
.expect("set")
.as_url()
.unwrap(),
@@ -142,30 +140,30 @@ fn url_as_remote_name() -> crate::Result {
);
{
let remote = branch
- .remote(git::remote::Direction::Push)
+ .remote(gix::remote::Direction::Push)
.transpose()?
.expect("present");
assert_eq!(remote.name(), None, "It's a url after all, anonymous");
- assert_eq!(remote.url(git::remote::Direction::Push).unwrap().path, "/push-path.git");
+ assert_eq!(remote.url(gix::remote::Direction::Push).unwrap().path, "/push-path.git");
assert_eq!(
- remote.url(git::remote::Direction::Fetch).unwrap().path,
+ remote.url(gix::remote::Direction::Fetch).unwrap().path,
"/push-path.git",
"this is an anonymous remote with just a single url configured"
);
}
{
let remote = branch
- .remote(git::remote::Direction::Fetch)
+ .remote(gix::remote::Direction::Fetch)
.transpose()?
.expect("present");
assert_eq!(remote.name(), None, "It's a url after all, anonymous");
assert_eq!(
- remote.url(git::remote::Direction::Fetch).unwrap().path,
+ remote.url(gix::remote::Direction::Fetch).unwrap().path,
"/fetch-path.git",
"anonymous remotes have a single url only"
);
assert_eq!(
- remote.url(git::remote::Direction::Push).unwrap().path,
+ remote.url(gix::remote::Direction::Push).unwrap().path,
"/fetch-path.git"
);
}
diff --git a/git-repository/tests/remote/connect.rs b/gix/tests/remote/connect.rs
similarity index 73%
rename from git-repository/tests/remote/connect.rs
rename to gix/tests/remote/connect.rs
index 265682804c2..ceea85bcd39 100644
--- a/git-repository/tests/remote/connect.rs
+++ b/gix/tests/remote/connect.rs
@@ -2,8 +2,8 @@
mod blocking_io {
mod protocol_allow {
use git_features::progress;
- use git_repository as git;
- use git_repository::remote::Direction::Fetch;
+
+ use gix::remote::Direction::Fetch;
use serial_test::serial;
use crate::remote;
@@ -15,9 +15,9 @@ mod blocking_io {
let remote = repo.find_remote("origin").unwrap();
assert!(matches!(
remote.connect(Fetch, progress::Discard).err(),
- Some(git::remote::connect::Error::ProtocolDenied {
+ Some(gix::remote::connect::Error::ProtocolDenied {
url: _,
- scheme: git::url::Scheme::File
+ scheme: gix::url::Scheme::File
})
));
}
@@ -28,14 +28,14 @@ mod blocking_io {
fn user() -> crate::Result {
for (env_value, should_allow) in [(None, true), (Some("0"), false), (Some("1"), true)] {
let _env = env_value.map(|value| git_testtools::Env::new().set("GIT_PROTOCOL_FROM_USER", value));
- let repo = git::open_opts(
+ let repo = gix::open_opts(
remote::repo("protocol_file_user").git_dir(),
- git::open::Options::isolated().permissions(git::Permissions {
- env: git::permissions::Environment {
+ gix::open::Options::isolated().permissions(gix::Permissions {
+ env: gix::permissions::Environment {
git_prefix: git_sec::Permission::Allow,
- ..git::permissions::Environment::all()
+ ..gix::permissions::Environment::all()
},
- ..git::Permissions::isolated()
+ ..gix::Permissions::isolated()
}),
)?;
let remote = repo.find_remote("origin")?;
diff --git a/git-repository/tests/remote/fetch.rs b/gix/tests/remote/fetch.rs
similarity index 90%
rename from git-repository/tests/remote/fetch.rs
rename to gix/tests/remote/fetch.rs
index 0bc99171fd8..549c2d8731e 100644
--- a/git-repository/tests/remote/fetch.rs
+++ b/gix/tests/remote/fetch.rs
@@ -4,8 +4,8 @@ mod blocking_and_async_io {
use git_features::progress;
use git_protocol::maybe_async;
- use git_repository as git;
- use git_repository::remote::{fetch, Direction::Fetch};
+
+ use gix::remote::{fetch, Direction::Fetch};
use crate::{
remote::{into_daemon_remote_if_async, spawn_git_daemon_if_async},
@@ -13,7 +13,7 @@ mod blocking_and_async_io {
};
pub(crate) fn base_repo_path() -> String {
- git::path::realpath(
+ gix::path::realpath(
git_testtools::scripted_fixture_read_only("make_remote_repos.sh")
.unwrap()
.join("base"),
@@ -32,24 +32,24 @@ mod blocking_and_async_io {
#[allow(clippy::result_large_err)]
pub(crate) fn try_repo_rw(
name: &str,
- ) -> Result<(git::Repository, git_testtools::tempfile::TempDir), git::open::Error> {
+ ) -> Result<(gix::Repository, git_testtools::tempfile::TempDir), gix::open::Error> {
let dir = git_testtools::scripted_fixture_writable_with_args(
"make_fetch_repos.sh",
[base_repo_path()],
git_testtools::Creation::ExecuteScript,
)
.unwrap();
- let repo = git::open_opts(dir.path().join(name), crate::restricted())?;
+ let repo = gix::open_opts(dir.path().join(name), crate::restricted())?;
Ok((repo, dir))
}
- pub(crate) fn repo_rw(name: &str) -> (git::Repository, git_testtools::tempfile::TempDir) {
+ pub(crate) fn repo_rw(name: &str) -> (gix::Repository, git_testtools::tempfile::TempDir) {
try_repo_rw(name).unwrap()
}
#[test]
#[cfg(feature = "blocking-network-client")]
- fn collate_fetch_error() -> Result<(), git::env::collate::fetch::Error> {
+ fn collate_fetch_error() -> Result<(), gix::env::collate::fetch::Error> {
let (repo, _tmp) = try_repo_rw("two-origins")?;
let remote = repo
.head()?
@@ -58,7 +58,7 @@ mod blocking_and_async_io {
.with_fetch_tags(fetch::Tags::Included);
remote
- .connect(Fetch, git::progress::Discard)?
+ .connect(Fetch, gix::progress::Discard)?
.prepare_fetch(Default::default())?
.receive(&AtomicBool::default())?;
@@ -66,7 +66,7 @@ mod blocking_and_async_io {
repo.path()
.join("HEAD")
.metadata()
- .map_err(git::env::collate::fetch::Error::Other)?
+ .map_err(gix::env::collate::fetch::Error::Other)?
.is_file(),
"just to show off the 'Other' error type"
);
@@ -96,7 +96,7 @@ mod blocking_and_async_io {
remote.replace_refspecs(Some("HEAD:refs/remotes/origin/does-not-yet-exist"), Fetch)?;
let res = remote
- .connect(Fetch, git::progress::Discard)
+ .connect(Fetch, gix::progress::Discard)
.await?
.prepare_fetch(Default::default())
.await?
@@ -126,19 +126,19 @@ mod blocking_and_async_io {
let daemon = spawn_git_daemon_if_async(repo_path("clone-as-base-with-changes"))?;
for (fetch_tags, expected_data_hash, num_objects_offset, expected_ref_edits) in [
(
- git::remote::fetch::Tags::None,
+ gix::remote::fetch::Tags::None,
"de303ef102bd5705a40a0c42ae2972eb1a668455",
0,
0,
),
(
- git::remote::fetch::Tags::Included,
+ gix::remote::fetch::Tags::Included,
"edc8cc8a25e64e73aacea469fc765564dd2c3f65",
1,
7,
),
(
- git::remote::fetch::Tags::All,
+ gix::remote::fetch::Tags::All,
"edc8cc8a25e64e73aacea469fc765564dd2c3f65",
1,
7,
@@ -153,8 +153,8 @@ mod blocking_and_async_io {
);
remote.replace_refspecs(Some("HEAD"), Fetch)?;
- let res: git::remote::fetch::Outcome = remote
- .connect(Fetch, git::progress::Discard)
+ let res: gix::remote::fetch::Outcome = remote
+ .connect(Fetch, gix::progress::Discard)
.await?
.prepare_fetch(Default::default())
.await?
@@ -162,7 +162,7 @@ mod blocking_and_async_io {
.await?;
match res.status {
- git::remote::fetch::Status::Change { write_pack_bundle, update_refs } => {
+ gix::remote::fetch::Status::Change { write_pack_bundle, update_refs } => {
assert_eq!(write_pack_bundle.index.data_hash, hex_to_id(expected_data_hash), );
assert_eq!(write_pack_bundle.index.num_objects, 3 + num_objects_offset, "{fetch_tags:?}");
assert!(write_pack_bundle.data_path.as_deref().map_or(false, |p| p.is_file()));
@@ -188,8 +188,8 @@ mod blocking_and_async_io {
})?;
for version in [
None,
- Some(git::protocol::transport::Protocol::V2),
- Some(git::protocol::transport::Protocol::V1),
+ Some(gix::protocol::transport::Protocol::V2),
+ Some(gix::protocol::transport::Protocol::V1),
] {
let (mut repo, _tmp) = repo_rw("two-origins");
if let Some(version) = version {
@@ -221,7 +221,7 @@ mod blocking_and_async_io {
.await?;
assert!(matches!(
outcome.status,
- git::remote::fetch::Status::NoPackReceived { .. }
+ gix::remote::fetch::Status::NoPackReceived { .. }
));
}
@@ -229,11 +229,11 @@ mod blocking_and_async_io {
for dry_run in [true, false] {
let remote = into_daemon_remote_if_async(
repo.find_remote("changes-on-top-of-origin")?
- .with_fetch_tags(git::remote::fetch::Tags::None),
+ .with_fetch_tags(gix::remote::fetch::Tags::None),
daemon.as_ref(),
"clone-as-base-with-changes",
);
- let outcome: git::remote::fetch::Outcome = remote
+ let outcome: gix::remote::fetch::Outcome = remote
.connect(Fetch, progress::Discard)
.await?
.prepare_fetch(Default::default())
@@ -246,12 +246,12 @@ mod blocking_and_async_io {
write_pack_bundle,
update_refs,
} => {
- assert_eq!(write_pack_bundle.pack_version, git::odb::pack::data::Version::V2);
+ assert_eq!(write_pack_bundle.pack_version, gix::odb::pack::data::Version::V2);
assert_eq!(write_pack_bundle.object_hash, repo.object_hash());
assert_eq!(write_pack_bundle.index.num_objects, 4, "{dry_run}: this value is 4 when git does it with 'consecutive' negotiation style, but could be 33 if completely naive.");
assert_eq!(
write_pack_bundle.index.index_version,
- git::odb::pack::index::Version::V2
+ gix::odb::pack::index::Version::V2
);
assert_eq!(
write_pack_bundle.index.index_hash,
diff --git a/git-repository/tests/remote/mod.rs b/gix/tests/remote/mod.rs
similarity index 87%
rename from git-repository/tests/remote/mod.rs
rename to gix/tests/remote/mod.rs
index 85355725deb..1357ceb33e7 100644
--- a/git-repository/tests/remote/mod.rs
+++ b/gix/tests/remote/mod.rs
@@ -1,6 +1,5 @@
use std::{borrow::Cow, path::PathBuf};
-use git_repository as git;
use git_testtools::scripted_fixture_read_only;
pub(crate) fn repo_path(name: &str) -> PathBuf {
@@ -8,8 +7,8 @@ pub(crate) fn repo_path(name: &str) -> PathBuf {
dir.join(name)
}
-pub(crate) fn repo(name: &str) -> git::Repository {
- git::open_opts(repo_path(name), git::open::Options::isolated()).unwrap()
+pub(crate) fn repo(name: &str) -> gix::Repository {
+ gix::open_opts(repo_path(name), gix::open::Options::isolated()).unwrap()
}
/// Spawn a git-daemon hosting all directories in or below `base_dir` if we are in async mode - currently only TCP is
@@ -34,10 +33,10 @@ pub(crate) fn spawn_git_daemon_if_async(
/// Turn `remote` into a remote that interacts with the git `daemon`, all else being the same, by creating a new stand-in remote.
#[cfg(any(feature = "blocking-network-client", feature = "async-network-client-async-std"))]
pub(crate) fn into_daemon_remote_if_async<'repo, 'a>(
- remote: git::Remote<'repo>,
+ remote: gix::Remote<'repo>,
_daemon: Option<&git_testtools::GitDaemon>,
_repo_name: impl Into>,
-) -> git::Remote<'repo> {
+) -> gix::Remote<'repo> {
#[cfg(feature = "blocking-network-client")]
{
remote
@@ -53,7 +52,7 @@ pub(crate) fn into_daemon_remote_if_async<'repo, 'a>(
))
.expect("valid url to create remote at")
.with_fetch_tags(remote.fetch_tags());
- for direction in [git::remote::Direction::Fetch, git::remote::Direction::Push] {
+ for direction in [gix::remote::Direction::Fetch, gix::remote::Direction::Push] {
new_remote
.replace_refspecs(
remote.refspecs(direction).iter().map(|s| s.to_ref().to_bstring()),
@@ -74,9 +73,9 @@ pub(crate) mod fetch;
mod ref_map;
mod save;
mod name {
- use git_repository as git;
+
#[test]
fn empty_is_invalid() {
- assert!(git::remote::name::validated("").is_err());
+ assert!(gix::remote::name::validated("").is_err());
}
}
diff --git a/git-repository/tests/remote/ref_map.rs b/gix/tests/remote/ref_map.rs
similarity index 74%
rename from git-repository/tests/remote/ref_map.rs
rename to gix/tests/remote/ref_map.rs
index 1e770b9dba0..03ac7d64944 100644
--- a/git-repository/tests/remote/ref_map.rs
+++ b/gix/tests/remote/ref_map.rs
@@ -2,8 +2,8 @@
mod blocking_and_async_io {
use git_features::progress;
use git_protocol::maybe_async;
- use git_repository as git;
- use git_repository::remote::Direction::Fetch;
+
+ use gix::remote::Direction::Fetch;
use crate::{
remote,
@@ -17,40 +17,40 @@ mod blocking_and_async_io {
async fn all() -> crate::Result {
let daemon = spawn_git_daemon_if_async(remote::repo_path("base"))?;
for (fetch_tags, version, expected_remote_refs, expected_mappings) in [
- (git::remote::fetch::Tags::None, None, 11, 11),
+ (gix::remote::fetch::Tags::None, None, 11, 11),
(
- git::remote::fetch::Tags::None,
- Some(git::protocol::transport::Protocol::V2),
+ gix::remote::fetch::Tags::None,
+ Some(gix::protocol::transport::Protocol::V2),
11,
11,
),
(
- git::remote::fetch::Tags::Included,
- Some(git::protocol::transport::Protocol::V2),
+ gix::remote::fetch::Tags::Included,
+ Some(gix::protocol::transport::Protocol::V2),
17,
17,
),
(
- git::remote::fetch::Tags::All,
- Some(git::protocol::transport::Protocol::V2),
+ gix::remote::fetch::Tags::All,
+ Some(gix::protocol::transport::Protocol::V2),
17,
17,
),
(
- git::remote::fetch::Tags::None,
- Some(git::protocol::transport::Protocol::V1),
+ gix::remote::fetch::Tags::None,
+ Some(gix::protocol::transport::Protocol::V1),
18,
11,
),
(
- git::remote::fetch::Tags::Included,
- Some(git::protocol::transport::Protocol::V1),
+ gix::remote::fetch::Tags::Included,
+ Some(gix::protocol::transport::Protocol::V1),
18,
17,
),
(
- git::remote::fetch::Tags::All,
- Some(git::protocol::transport::Protocol::V1),
+ gix::remote::fetch::Tags::All,
+ Some(gix::protocol::transport::Protocol::V1),
18,
17,
),
diff --git a/git-repository/tests/remote/save.rs b/gix/tests/remote/save.rs
similarity index 91%
rename from git-repository/tests/remote/save.rs
rename to gix/tests/remote/save.rs
index 11c06da0f23..7f5c915afa0 100644
--- a/git-repository/tests/remote/save.rs
+++ b/gix/tests/remote/save.rs
@@ -1,5 +1,4 @@
mod save_to {
- use git_repository as git;
use crate::{remote, remote::save::uniformize};
@@ -8,7 +7,7 @@ mod save_to {
let repo = remote::repo("clone");
let remote = repo.find_remote("origin")?;
- let mut config = git::config::File::default();
+ let mut config = gix::config::File::default();
remote.save_to(&mut config)?;
let actual = uniformize(config.to_string());
assert!(
@@ -45,8 +44,6 @@ mod save_to {
mod save_as_to {
use std::convert::TryInto;
- use git_repository as git;
-
use crate::{basic_repo, remote::save::uniformize};
#[test]
@@ -54,8 +51,8 @@ mod save_as_to {
let repo = basic_repo()?;
let remote = repo.remote_at("https://example.com/path")?;
assert!(matches!(
- remote.save_to(&mut git::config::File::default()).unwrap_err(),
- git::remote::save::Error::NameMissing { .. }
+ remote.save_to(&mut gix::config::File::default()).unwrap_err(),
+ gix::remote::save::Error::NameMissing { .. }
));
Ok(())
}
@@ -66,20 +63,20 @@ mod save_as_to {
let mut remote = repo
.remote_at("https://example.com/path")?
.push_url("https://ein.hub/path")?
- .with_fetch_tags(git::remote::fetch::Tags::All)
+ .with_fetch_tags(gix::remote::fetch::Tags::All)
.with_refspecs(
[
"+refs/heads/*:refs/remotes/any/*",
"refs/heads/special:refs/heads/special-upstream",
],
- git::remote::Direction::Fetch,
+ gix::remote::Direction::Fetch,
)?
.with_refspecs(
[
"refs/heads/main:refs/heads/main", // similar to 'simple' for `push.default`
":", // similar to 'matching'
],
- git::remote::Direction::Push,
+ gix::remote::Direction::Push,
)?;
let remote_name = "origin";
assert!(
@@ -87,7 +84,7 @@ mod save_as_to {
"there is no remote of that name"
);
assert_eq!(remote.name(), None);
- let mut config = git::config::File::default();
+ let mut config = gix::config::File::default();
remote.save_as_to(remote_name, &mut config)?;
let expected = "[remote \"origin\"]\n\turl = https://example.com/path\n\tpushurl = https://ein.hub/path\n\ttagOpt = --tags\n\tfetch = +refs/heads/*:refs/remotes/any/*\n\tfetch = refs/heads/special:refs/heads/special-upstream\n\tpush = refs/heads/main:refs/heads/main\n\tpush = :\n";
assert_eq!(uniformize(config.to_string()), expected);
diff --git a/git-repository/tests/repository/config/config_snapshot/credential_helpers.rs b/gix/tests/repository/config/config_snapshot/credential_helpers.rs
similarity index 98%
rename from git-repository/tests/repository/config/config_snapshot/credential_helpers.rs
rename to gix/tests/repository/config/config_snapshot/credential_helpers.rs
index f6fdc5623eb..5dc69e0ccf3 100644
--- a/git-repository/tests/repository/config/config_snapshot/credential_helpers.rs
+++ b/gix/tests/repository/config/config_snapshot/credential_helpers.rs
@@ -52,10 +52,9 @@ mod baseline {
.unwrap()
});
- use git_repository as git;
pub fn works_but_we_dont_parse_invalid_url(url: &str) {
assert!(
- git::url::parse(url.into()).is_err(),
+ gix::url::parse(url.into()).is_err(),
"{:?} should not be parseable",
url
);
@@ -70,7 +69,7 @@ mod baseline {
let repo = remote::repo("credential-helpers");
let (cascade, mut action, prompt_options) = repo
.config_snapshot()
- .credential_helpers(git::url::parse(url.into()).expect("valid input URL"))
+ .credential_helpers(gix::url::parse(url.into()).expect("valid input URL"))
.unwrap();
assert_ne!(
diff --git a/git-repository/tests/repository/config/config_snapshot/mod.rs b/gix/tests/repository/config/config_snapshot/mod.rs
similarity index 95%
rename from git-repository/tests/repository/config/config_snapshot/mod.rs
rename to gix/tests/repository/config/config_snapshot/mod.rs
index 9803cd58ae4..c01be6d7d97 100644
--- a/git-repository/tests/repository/config/config_snapshot/mod.rs
+++ b/gix/tests/repository/config/config_snapshot/mod.rs
@@ -2,7 +2,7 @@ use crate::named_repo;
#[test]
fn commit_auto_rollback() -> crate::Result {
- let mut repo: git_repository::Repository = named_repo("make_basic_repo.sh")?;
+ let mut repo: gix::Repository = named_repo("make_basic_repo.sh")?;
assert_eq!(repo.head_id()?.shorten()?.to_string(), "3189cd3");
{
@@ -30,7 +30,7 @@ fn commit_auto_rollback() -> crate::Result {
#[test]
fn snapshot_mut_commit_and_forget() -> crate::Result {
- let mut repo: git_repository::Repository = named_repo("make_basic_repo.sh")?;
+ let mut repo: gix::Repository = named_repo("make_basic_repo.sh")?;
let repo = {
let mut repo = repo.config_snapshot_mut();
repo.set_raw_value("core", None, "abbrev", "4")?;
diff --git a/git-repository/tests/repository/config/identity.rs b/gix/tests/repository/config/identity.rs
similarity index 94%
rename from git-repository/tests/repository/config/identity.rs
rename to gix/tests/repository/config/identity.rs
index 9919aa5f6cb..aeebb85ce9c 100644
--- a/git-repository/tests/repository/config/identity.rs
+++ b/gix/tests/repository/config/identity.rs
@@ -1,8 +1,8 @@
use std::path::Path;
-use git_repository as git;
use git_sec::Permission;
use git_testtools::Env;
+
use serial_test::serial;
use crate::named_repo;
@@ -28,13 +28,13 @@ fn author_and_committer_and_fallback() -> crate::Result {
.set("GIT_CONFIG_COUNT", "1")
.set("GIT_CONFIG_KEY_0", "include.path")
.set("GIT_CONFIG_VALUE_0", work_dir.join("c.config").display().to_string());
- let repo = git::open_opts(
+ let repo = gix::open_opts(
repo.git_dir(),
- repo.open_options().clone().with(trust).permissions(git::Permissions {
- env: git::permissions::Environment {
+ repo.open_options().clone().with(trust).permissions(gix::Permissions {
+ env: gix::permissions::Environment {
xdg_config_home: Permission::Deny,
home: Permission::Deny,
- ..git::permissions::Environment::all()
+ ..gix::permissions::Environment::all()
},
..Default::default()
}),
@@ -143,17 +143,17 @@ fn author_from_different_config_sections() -> crate::Result {
.set("GIT_COMMITTER_DATE", "1980-02-26 18:30:00 +0000")
.set("EMAIL", "general@email-unused");
- let repo = git::open_opts(
+ let repo = gix::open_opts(
repo.git_dir(),
repo.open_options()
.clone()
.config_overrides(None::<&str>)
.with(git_sec::Trust::Full)
- .permissions(git::Permissions {
- env: git::permissions::Environment {
+ .permissions(gix::Permissions {
+ env: gix::permissions::Environment {
xdg_config_home: Permission::Deny,
home: Permission::Deny,
- ..git::permissions::Environment::all()
+ ..gix::permissions::Environment::all()
},
..Default::default()
}),
diff --git a/git-repository/tests/repository/config/mod.rs b/gix/tests/repository/config/mod.rs
similarity index 77%
rename from git-repository/tests/repository/config/mod.rs
rename to gix/tests/repository/config/mod.rs
index 384c1663244..11b911884a4 100644
--- a/git-repository/tests/repository/config/mod.rs
+++ b/gix/tests/repository/config/mod.rs
@@ -6,8 +6,6 @@ mod remote;
mod ssh_options {
use std::ffi::OsStr;
- use git_repository as git;
-
use crate::repository::config::repo;
#[test]
@@ -15,7 +13,7 @@ mod ssh_options {
let repo = repo("ssh-all-options");
let opts = repo.ssh_connect_options()?;
assert_eq!(opts.command.as_deref(), Some(OsStr::new("ssh -VVV")));
- assert_eq!(opts.kind, Some(git::protocol::transport::client::ssh::ProgramKind::Ssh));
+ assert_eq!(opts.kind, Some(gix::protocol::transport::client::ssh::ProgramKind::Ssh));
assert!(!opts.disallow_shell, "we can use the shell by default");
Ok(())
}
@@ -27,7 +25,7 @@ mod ssh_options {
assert_eq!(opts.command.as_deref(), Some(OsStr::new("ssh --fallback")));
assert_eq!(
opts.kind,
- Some(git::protocol::transport::client::ssh::ProgramKind::Putty)
+ Some(gix::protocol::transport::client::ssh::ProgramKind::Putty)
);
assert!(
opts.disallow_shell,
@@ -41,14 +39,13 @@ mod ssh_options {
mod transport_options;
#[cfg(feature = "blocking-network-client")]
-use git_repository as git;
#[cfg(feature = "blocking-network-client")]
-pub fn repo(name: &str) -> git::Repository {
+pub fn repo(name: &str) -> gix::Repository {
repo_opts(name, |opts| opts.strict_config(true))
}
#[cfg(feature = "blocking-network-client")]
-pub fn repo_opts(name: &str, modify: impl FnOnce(git::open::Options) -> git::open::Options) -> git::Repository {
+pub fn repo_opts(name: &str, modify: impl FnOnce(gix::open::Options) -> gix::open::Options) -> gix::Repository {
let dir = git_testtools::scripted_fixture_read_only("make_config_repos.sh").unwrap();
- git::open_opts(dir.join(name), modify(git::open::Options::isolated())).unwrap()
+ gix::open_opts(dir.join(name), modify(gix::open::Options::isolated())).unwrap()
}
diff --git a/git-repository/tests/repository/config/remote.rs b/gix/tests/repository/config/remote.rs
similarity index 79%
rename from git-repository/tests/repository/config/remote.rs
rename to gix/tests/repository/config/remote.rs
index 8462a2bbf2a..a2a37bf5dbe 100644
--- a/git-repository/tests/repository/config/remote.rs
+++ b/gix/tests/repository/config/remote.rs
@@ -1,7 +1,5 @@
use std::iter::FromIterator;
-use git_repository as git;
-
use crate::{named_repo, remote, remote::cow_str, Result};
#[test]
@@ -9,8 +7,8 @@ fn remote_and_branch_names() {
let repo = remote::repo("base");
assert_eq!(repo.remote_names().len(), 0, "there are no remotes");
assert_eq!(repo.branch_names().len(), 0, "there are no configured branches");
- assert_eq!(repo.remote_default_name(git::remote::Direction::Fetch), None);
- assert_eq!(repo.remote_default_name(git::remote::Direction::Push), None);
+ assert_eq!(repo.remote_default_name(gix::remote::Direction::Fetch), None);
+ assert_eq!(repo.remote_default_name(gix::remote::Direction::Push), None);
let repo = remote::repo("clone");
assert_eq!(
@@ -18,11 +16,11 @@ fn remote_and_branch_names() {
vec!["myself", "origin"]
);
assert_eq!(
- repo.remote_default_name(git::remote::Direction::Fetch),
+ repo.remote_default_name(gix::remote::Direction::Fetch),
Some(cow_str("origin"))
);
assert_eq!(
- repo.remote_default_name(git::remote::Direction::Push),
+ repo.remote_default_name(gix::remote::Direction::Push),
Some(cow_str("origin"))
);
assert_eq!(Vec::from_iter(repo.branch_names()), vec!["main"]);
@@ -33,13 +31,13 @@ fn remote_default_name() {
let repo = remote::repo("push-default");
assert_eq!(
- repo.remote_default_name(git::remote::Direction::Push),
+ repo.remote_default_name(gix::remote::Direction::Push),
Some(cow_str("myself")),
"overridden via remote.pushDefault"
);
assert_eq!(
- repo.remote_default_name(git::remote::Direction::Fetch),
+ repo.remote_default_name(gix::remote::Direction::Fetch),
None,
"none if name origin, and there are multiple"
);
diff --git a/git-repository/tests/repository/config/transport_options.rs b/gix/tests/repository/config/transport_options.rs
similarity index 99%
rename from git-repository/tests/repository/config/transport_options.rs
rename to gix/tests/repository/config/transport_options.rs
index 1441248c192..3890b2dd8bb 100644
--- a/git-repository/tests/repository/config/transport_options.rs
+++ b/gix/tests/repository/config/transport_options.rs
@@ -3,7 +3,6 @@
feature = "blocking-http-transport-curl"
))]
mod http {
- use git_repository as git;
use git_transport::client::http::options::{
FollowRedirects, HttpVersion, ProxyAuthMethod, SslVersion, SslVersionRangeInclusive,
};
@@ -11,7 +10,7 @@ mod http {
use crate::repository::config::{repo, repo_opts};
fn http_options(
- repo: &git::Repository,
+ repo: &gix::Repository,
remote_name: Option<&str>,
url: &str,
) -> git_transport::client::http::Options {
diff --git a/git-repository/tests/repository/mod.rs b/gix/tests/repository/mod.rs
similarity index 93%
rename from git-repository/tests/repository/mod.rs
rename to gix/tests/repository/mod.rs
index b1053d26e10..079dbca69a1 100644
--- a/git-repository/tests/repository/mod.rs
+++ b/gix/tests/repository/mod.rs
@@ -1,4 +1,4 @@
-use git_repository::Repository;
+use gix::Repository;
mod config;
mod object;
diff --git a/git-repository/tests/repository/object.rs b/gix/tests/repository/object.rs
similarity index 88%
rename from git-repository/tests/repository/object.rs
rename to gix/tests/repository/object.rs
index a627d7377bb..a70e2dc12a2 100644
--- a/git-repository/tests/repository/object.rs
+++ b/gix/tests/repository/object.rs
@@ -1,4 +1,3 @@
-use git_repository as git;
use git_testtools::tempfile;
mod write_object {
@@ -7,10 +6,10 @@ mod write_object {
#[test]
fn empty_tree() -> crate::Result {
let (_tmp, repo) = empty_bare_repo()?;
- let oid = repo.write_object(&git_repository::objs::TreeRef::empty())?;
+ let oid = repo.write_object(&gix::objs::TreeRef::empty())?;
assert_eq!(
oid,
- git_repository::hash::ObjectId::empty_tree(repo.object_hash()),
+ gix::hash::ObjectId::empty_tree(repo.object_hash()),
"it produces a well-known empty tree id"
);
Ok(())
@@ -57,7 +56,6 @@ mod write_blob {
mod find {
use git_pack::Find;
- use git_repository as git;
use crate::basic_repo;
@@ -95,7 +93,7 @@ mod find {
#[test]
fn empty_tree_can_always_be_found() -> crate::Result {
let repo = basic_repo()?;
- let empty_tree = git::hash::ObjectId::empty_tree(repo.object_hash());
+ let empty_tree = gix::hash::ObjectId::empty_tree(repo.object_hash());
assert_eq!(repo.find_object(empty_tree)?.into_tree().iter().count(), 0);
assert_eq!(
repo.try_find_object(empty_tree)?
@@ -146,23 +144,22 @@ mod tag {
}
mod commit_as {
- use git_repository as git;
use git_testtools::tempfile;
#[test]
fn specify_committer_and_author() -> crate::Result {
let tmp = tempfile::tempdir()?;
- let repo = git::open_opts(git::init(&tmp)?.path(), crate::restricted())?;
+ let repo = gix::open_opts(gix::init(&tmp)?.path(), crate::restricted())?;
let empty_tree = repo.empty_tree();
- let committer = git::actor::Signature {
+ let committer = gix::actor::Signature {
name: "c".into(),
email: "c@example.com".into(),
- time: git::actor::Time::new(1, 1800),
+ time: gix::actor::Time::new(1, 1800),
};
- let author = git::actor::Signature {
+ let author = gix::actor::Signature {
name: "a".into(),
email: "a@example.com".into(),
- time: git::actor::Time::new(3, 3600),
+ time: gix::actor::Time::new(3, 3600),
};
let commit_id = repo.commit_as(
@@ -171,7 +168,7 @@ mod commit_as {
"HEAD",
"initial",
empty_tree.id,
- git::commit::NO_PARENT_IDS,
+ gix::commit::NO_PARENT_IDS,
)?;
let commit = commit_id.object()?.into_commit();
@@ -182,7 +179,6 @@ mod commit_as {
}
mod commit {
- use git_repository as git;
use git_testtools::tempfile;
use crate::{freeze_time, restricted_and_git, util::hex_to_id};
@@ -190,14 +186,14 @@ mod commit {
#[test]
fn parent_in_initial_commit_causes_failure() -> crate::Result {
let tmp = tempfile::tempdir()?;
- let repo = git::ThreadSafeRepository::init_opts(
+ let repo = gix::ThreadSafeRepository::init_opts(
&tmp,
- git::create::Kind::WithWorktree,
+ gix::create::Kind::WithWorktree,
Default::default(),
crate::restricted(),
)?
.to_thread_local();
- let empty_tree_id = repo.write_object(&git::objs::Tree::empty())?.detach();
+ let empty_tree_id = repo.write_object(&gix::objs::Tree::empty())?.detach();
let err = repo
.commit("HEAD", "initial", empty_tree_id, [empty_tree_id])
.unwrap_err();
@@ -214,9 +210,9 @@ mod commit {
fn single_line_initial_commit_empty_tree_ref_nonexisting() -> crate::Result {
let _env = freeze_time();
let tmp = tempfile::tempdir()?;
- let repo = git::open_opts(git::init(&tmp)?.path(), restricted_and_git())?;
- let empty_tree_id = repo.write_object(&git::objs::Tree::empty())?;
- let commit_id = repo.commit("HEAD", "initial", empty_tree_id, git::commit::NO_PARENT_IDS)?;
+ let repo = gix::open_opts(gix::init(&tmp)?.path(), restricted_and_git())?;
+ let empty_tree_id = repo.write_object(&gix::objs::Tree::empty())?;
+ let commit_id = repo.commit("HEAD", "initial", empty_tree_id, gix::commit::NO_PARENT_IDS)?;
assert_eq!(
commit_id,
hex_to_id("3a774843723a713a8d361b4d4d98ad4092ef05bd"),
@@ -308,13 +304,13 @@ mod commit {
}
}
-fn empty_bare_repo() -> crate::Result<(tempfile::TempDir, git::Repository)> {
+fn empty_bare_repo() -> crate::Result<(tempfile::TempDir, gix::Repository)> {
let tmp = tempfile::tempdir()?;
- let repo = git::ThreadSafeRepository::init_opts(
+ let repo = gix::ThreadSafeRepository::init_opts(
tmp.path(),
- git::create::Kind::Bare,
- git::create::Options::default(),
- git::open::Options::isolated(),
+ gix::create::Kind::Bare,
+ gix::create::Options::default(),
+ gix::open::Options::isolated(),
)?
.into();
Ok((tmp, repo))
diff --git a/git-repository/tests/repository/open.rs b/gix/tests/repository/open.rs
similarity index 93%
rename from git-repository/tests/repository/open.rs
rename to gix/tests/repository/open.rs
index 1d405f1217d..3074a23e5f8 100644
--- a/git-repository/tests/repository/open.rs
+++ b/gix/tests/repository/open.rs
@@ -1,11 +1,10 @@
mod missing_config_file {
- use git_repository as git;
use crate::util::named_subrepo_opts;
#[test]
fn bare() -> crate::Result {
- let repo = named_subrepo_opts("make_config_repos.sh", "bare-no-config", git::open::Options::isolated())?;
+ let repo = named_subrepo_opts("make_config_repos.sh", "bare-no-config", gix::open::Options::isolated())?;
assert!(
repo.is_bare(),
"without config, we can't really know what the repo is actually but can guess by not having a worktree"
@@ -20,7 +19,7 @@ mod missing_config_file {
let repo = named_subrepo_opts(
"make_config_repos.sh",
"worktree-no-config",
- git::open::Options::isolated(),
+ gix::open::Options::isolated(),
)?;
assert!(repo.work_dir().is_some());
assert!(repo.worktree().is_some());
@@ -33,27 +32,25 @@ mod missing_config_file {
}
mod not_a_repository {
- use git_repository as git;
#[test]
fn shows_proper_error() -> crate::Result {
for name in ["empty-dir", "with-files"] {
let name = format!("not-a-repo-{name}");
let repo_path = git_testtools::scripted_fixture_read_only("make_config_repos.sh")?.join(name);
- let err = git::open_opts(&repo_path, git::open::Options::isolated()).unwrap_err();
- assert!(matches!(err, git::open::Error::NotARepository { path, .. } if path == repo_path));
+ let err = gix::open_opts(&repo_path, gix::open::Options::isolated()).unwrap_err();
+ assert!(matches!(err, gix::open::Error::NotARepository { path, .. } if path == repo_path));
}
Ok(())
}
}
mod open_path_as_is {
- use git_repository as git;
use crate::util::{named_subrepo_opts, repo_opts};
- fn open_path_as_is() -> git::open::Options {
- git::open::Options::isolated().open_path_as_is(true)
+ fn open_path_as_is() -> gix::open::Options {
+ gix::open::Options::isolated().open_path_as_is(true)
}
#[test]
@@ -65,7 +62,7 @@ mod open_path_as_is {
#[test]
fn worktrees_cannot_be_opened() -> crate::Result {
let err = repo_opts("make_basic_repo.sh", open_path_as_is()).unwrap_err();
- assert!(matches!(err, git::open::Error::NotARepository { .. }));
+ assert!(matches!(err, gix::open::Error::NotARepository { .. }));
Ok(())
}
@@ -79,8 +76,6 @@ mod open_path_as_is {
mod submodules {
use std::path::Path;
- use git_repository as git;
-
#[test]
fn by_their_worktree_checkout_and_git_modules_dir() {
let dir = git_testtools::scripted_fixture_read_only("make_submodules.sh").unwrap();
@@ -96,22 +91,22 @@ mod submodules {
submodule_m1_gitdir.clone(),
] {
let repo = discover_repo(discover_dir).unwrap();
- // assert_eq!(repo.kind(), git::Kind::Submodule);
+ // assert_eq!(repo.kind(), gix::Kind::Submodule);
assert_eq!(repo.work_dir().expect("non-bare"), dir.join(&submodule_m1_workdir));
assert_eq!(repo.git_dir(), dir.join(&submodule_m1_gitdir));
- let repo = git::open_opts(repo.work_dir().expect("non-bare"), git::open::Options::isolated()).unwrap();
- assert_eq!(repo.kind(), git::Kind::Submodule);
+ let repo = gix::open_opts(repo.work_dir().expect("non-bare"), gix::open::Options::isolated()).unwrap();
+ assert_eq!(repo.kind(), gix::Kind::Submodule);
assert_eq!(repo.work_dir().expect("non-bare"), dir.join(&submodule_m1_workdir));
assert_eq!(repo.git_dir(), dir.join(&submodule_m1_gitdir));
}
}
}
- fn discover_repo(name: impl AsRef) -> crate::Result {
+ fn discover_repo(name: impl AsRef) -> crate::Result {
let dir = git_testtools::scripted_fixture_read_only("make_submodules.sh")?;
let repo_dir = dir.join(name);
- Ok(git::ThreadSafeRepository::discover_opts(
+ Ok(gix::ThreadSafeRepository::discover_opts(
repo_dir,
Default::default(),
git_sec::trust::Mapping {
@@ -124,13 +119,12 @@ mod submodules {
}
mod object_caches {
- use git_repository as git;
use crate::util::named_subrepo_opts;
#[test]
fn default_git_and_custom_caches() -> crate::Result {
- let opts = git::open::Options::isolated();
+ let opts = gix::open::Options::isolated();
let repo = named_subrepo_opts("make_config_repos.sh", "object-caches", opts)?;
assert!(repo.objects.has_object_cache());
assert!(repo.objects.has_pack_cache());
@@ -139,7 +133,7 @@ mod object_caches {
#[test]
fn disabled() -> crate::Result {
- let opts = git::open::Options::isolated();
+ let opts = gix::open::Options::isolated();
let repo = named_subrepo_opts("make_config_repos.sh", "disabled-object-caches", opts)?;
assert!(!repo.objects.has_object_cache());
assert!(!repo.objects.has_pack_cache());
@@ -151,9 +145,9 @@ mod with_overrides {
use std::borrow::Cow;
use git_object::bstr::BStr;
- use git_repository as git;
use git_sec::Permission;
use git_testtools::Env;
+
use serial_test::serial;
use crate::util::named_subrepo_opts;
@@ -192,7 +186,7 @@ mod with_overrides {
.set("GIT_SSH_VARIANT", "ssh-variant-env")
.set("GIT_SSH_COMMAND", "ssh-command-env")
.set("GIT_SSH", "ssh-command-fallback-env");
- let mut opts = git::open::Options::isolated()
+ let mut opts = gix::open::Options::isolated()
.cli_overrides([
"http.userAgent=agent-from-cli",
"http.lowSpeedLimit=3",
@@ -377,7 +371,7 @@ mod with_overrides {
}
mod worktree {
- use git_repository::open;
+ use gix::open;
#[test]
fn with_worktree_configs() -> git_testtools::Result {
diff --git a/git-repository/tests/repository/reference.rs b/gix/tests/repository/reference.rs
similarity index 94%
rename from git-repository/tests/repository/reference.rs
rename to gix/tests/repository/reference.rs
index 6841f9b73cd..3ded8f65fbe 100644
--- a/git-repository/tests/repository/reference.rs
+++ b/gix/tests/repository/reference.rs
@@ -1,9 +1,9 @@
mod set_namespace {
- use git_repository as git;
- use git_repository::refs::transaction::PreviousValue;
use git_testtools::tempfile;
- fn easy_repo_rw() -> crate::Result<(git::Repository, tempfile::TempDir)> {
+ use gix::refs::transaction::PreviousValue;
+
+ fn easy_repo_rw() -> crate::Result<(gix::Repository, tempfile::TempDir)> {
crate::repo_rw("make_references_repo.sh")
}
@@ -26,13 +26,13 @@ mod set_namespace {
repo.tag_reference(
"new-tag",
- git::ObjectId::empty_tree(git::hash::Kind::Sha1),
+ gix::ObjectId::empty_tree(gix::hash::Kind::Sha1),
PreviousValue::MustNotExist,
)?;
repo.reference(
"refs/heads/new-branch",
- git::ObjectId::empty_tree(git::hash::Kind::Sha1),
+ gix::ObjectId::empty_tree(gix::hash::Kind::Sha1),
PreviousValue::MustNotExist,
"message",
)?;
@@ -82,11 +82,10 @@ mod set_namespace {
}
mod iter_references {
- use git_repository as git;
use crate::util::hex_to_id;
- fn repo() -> crate::Result {
+ fn repo() -> crate::Result {
crate::repo("make_references_repo.sh").map(|r| r.to_thread_local())
}
@@ -189,7 +188,6 @@ mod iter_references {
mod head {
use git_ref::transaction::PreviousValue;
- use git_repository as git;
use crate::util::hex_to_id;
@@ -198,7 +196,7 @@ mod head {
let repo = crate::basic_repo()?;
let head = repo.head()?;
match &head.kind {
- git::head::Kind::Symbolic(r) => {
+ gix::head::Kind::Symbolic(r) => {
assert_eq!(
r.target.try_id().map(ToOwned::to_owned),
Some(hex_to_id("3189cd3cb0af8586c39a838aa3e54fd72a872a41"))
diff --git a/git-repository/tests/repository/remote.rs b/gix/tests/repository/remote.rs
similarity index 92%
rename from git-repository/tests/repository/remote.rs
rename to gix/tests/repository/remote.rs
index 1b64e36d597..a3094b2ca44 100644
--- a/git-repository/tests/repository/remote.rs
+++ b/gix/tests/repository/remote.rs
@@ -1,5 +1,5 @@
mod remote_at {
- use git_repository::remote::Direction;
+ use gix::remote::Direction;
use crate::remote;
@@ -104,8 +104,8 @@ mod find_remote {
use std::io::BufRead;
use git_object::bstr::BString;
- use git_repository as git;
- use git_repository::{remote::Direction, Repository};
+
+ use gix::{remote::Direction, Repository};
use crate::remote;
@@ -113,9 +113,9 @@ mod find_remote {
fn tags_option() -> crate::Result {
let repo = remote::repo("clone-no-tags");
for (remote_name, expected) in [
- ("origin", git::remote::fetch::Tags::None),
- ("myself-no-tags", git::remote::fetch::Tags::None),
- ("myself-with-tags", git::remote::fetch::Tags::All),
+ ("origin", gix::remote::fetch::Tags::None),
+ ("myself-no-tags", gix::remote::fetch::Tags::None),
+ ("myself-with-tags", gix::remote::fetch::Tags::All),
] {
let remote = repo.find_remote(remote_name)?;
assert_eq!(remote.fetch_tags(), expected, "specifically set in this repo");
@@ -139,11 +139,11 @@ mod find_remote {
assert_eq!(
remote.fetch_tags(),
- git::remote::fetch::Tags::Included,
+ gix::remote::fetch::Tags::Included,
"the default value as it's not specified"
);
- let url = git::url::parse(url.into())?;
+ let url = gix::url::parse(url.into())?;
assert_eq!(remote.url(Direction::Fetch).expect("present"), &url);
assert_eq!(
@@ -160,7 +160,7 @@ mod find_remote {
assert!(count > 0, "should have seen more than one commit");
assert!(matches!(
repo.find_remote("unknown").unwrap_err(),
- git::remote::find::existing::Error::NotFound { .. }
+ gix::remote::find::existing::Error::NotFound { .. }
));
Ok(())
}
@@ -268,20 +268,20 @@ mod find_remote {
}
fn fetchspec(spec: &str) -> git_refspec::RefSpec {
- git::refspec::parse(spec.into(), git::refspec::parse::Operation::Fetch)
+ gix::refspec::parse(spec.into(), gix::refspec::parse::Operation::Fetch)
.unwrap()
.to_owned()
}
fn pushspec(spec: &str) -> git_refspec::RefSpec {
- git::refspec::parse(spec.into(), git::refspec::parse::Operation::Push)
+ gix::refspec::parse(spec.into(), gix::refspec::parse::Operation::Push)
.unwrap()
.to_owned()
}
fn base_dir(repo: &Repository) -> String {
- git_path::to_unix_separators_on_windows(git::path::into_bstr(
- git::path::realpath(repo.work_dir().unwrap())
+ git_path::to_unix_separators_on_windows(gix::path::into_bstr(
+ gix::path::realpath(repo.work_dir().unwrap())
.unwrap()
.parent()
.unwrap()
@@ -293,7 +293,6 @@ mod find_remote {
}
mod find_default_remote {
- use git_repository as git;
use crate::remote;
@@ -301,7 +300,7 @@ mod find_default_remote {
fn works_on_detached_heads() -> crate::Result {
let repo = remote::repo("detached-head");
assert_eq!(
- repo.find_default_remote(git::remote::Direction::Fetch)
+ repo.find_default_remote(gix::remote::Direction::Fetch)
.transpose()?
.expect("present")
.name()
diff --git a/git-repository/tests/repository/state.rs b/gix/tests/repository/state.rs
similarity index 72%
rename from git-repository/tests/repository/state.rs
rename to gix/tests/repository/state.rs
index 98a9cf65ba6..400a361d2ab 100644
--- a/git-repository/tests/repository/state.rs
+++ b/gix/tests/repository/state.rs
@@ -1,5 +1,3 @@
-use git_repository as git;
-
use crate::{named_repo, Result};
#[test]
@@ -7,7 +5,7 @@ fn apply_mailbox() -> Result {
let repo = named_repo("make_am_repo.sh")?;
assert_eq!(repo.head_name()?.unwrap().shorten(), "main");
- assert_eq!(repo.state(), Some(git::state::InProgress::ApplyMailbox));
+ assert_eq!(repo.state(), Some(gix::state::InProgress::ApplyMailbox));
Ok(())
}
@@ -16,7 +14,7 @@ fn bisect() -> Result {
let repo = named_repo("make_bisect_repo.sh")?;
assert_eq!(repo.head_name()?.unwrap().shorten(), "main");
- assert_eq!(repo.state(), Some(git::state::InProgress::Bisect));
+ assert_eq!(repo.state(), Some(gix::state::InProgress::Bisect));
Ok(())
}
@@ -26,7 +24,7 @@ fn cherry_pick() -> Result {
let repo = named_repo("make_cherry_pick_repo.sh")?;
assert_eq!(repo.head_name()?.unwrap().shorten(), "main");
- assert_eq!(repo.state(), Some(git::state::InProgress::CherryPick));
+ assert_eq!(repo.state(), Some(gix::state::InProgress::CherryPick));
Ok(())
}
@@ -35,7 +33,7 @@ fn cherry_pick_sequence() -> Result {
let repo = named_repo("make_cherry_pick_sequence_repo.sh")?;
assert_eq!(repo.head_name()?.unwrap().shorten(), "main");
- assert_eq!(repo.state(), Some(git::state::InProgress::CherryPickSequence));
+ assert_eq!(repo.state(), Some(gix::state::InProgress::CherryPickSequence));
Ok(())
}
@@ -45,7 +43,7 @@ fn merge() -> Result {
let repo = named_repo("make_merge_repo.sh")?;
assert_eq!(repo.head_name()?.unwrap().shorten(), "main");
- assert_eq!(repo.state(), Some(git::state::InProgress::Merge));
+ assert_eq!(repo.state(), Some(gix::state::InProgress::Merge));
Ok(())
}
@@ -55,7 +53,7 @@ fn rebase_interactive() -> Result {
let repo = named_repo("make_rebase_i_repo.sh")?;
assert!(repo.head()?.is_detached());
- assert_eq!(repo.state(), Some(git::state::InProgress::RebaseInteractive));
+ assert_eq!(repo.state(), Some(gix::state::InProgress::RebaseInteractive));
Ok(())
}
@@ -65,7 +63,7 @@ fn revert() -> Result {
let repo = named_repo("make_revert_repo.sh")?;
assert_eq!(repo.head_name()?.unwrap().shorten(), "main");
- assert_eq!(repo.state(), Some(git::state::InProgress::Revert));
+ assert_eq!(repo.state(), Some(gix::state::InProgress::Revert));
Ok(())
}
@@ -75,7 +73,7 @@ fn revert_sequence() -> Result {
let repo = named_repo("make_revert_sequence_repo.sh")?;
assert_eq!(repo.head_name()?.unwrap().shorten(), "main");
- assert_eq!(repo.state(), Some(git::state::InProgress::RevertSequence));
+ assert_eq!(repo.state(), Some(gix::state::InProgress::RevertSequence));
Ok(())
}
diff --git a/git-repository/tests/repository/worktree.rs b/gix/tests/repository/worktree.rs
similarity index 95%
rename from git-repository/tests/repository/worktree.rs
rename to gix/tests/repository/worktree.rs
index 215ffc031c4..d0f8084475c 100644
--- a/git-repository/tests/repository/worktree.rs
+++ b/gix/tests/repository/worktree.rs
@@ -1,11 +1,8 @@
use git_ref::bstr;
-use git_repository as git;
mod with_core_worktree_config {
use std::io::BufRead;
- use git_repository as git;
-
use crate::repository::worktree::Baseline;
#[test]
@@ -99,9 +96,9 @@ mod with_core_worktree_config {
Ok(())
}
- fn repo(name: &str) -> git::Repository {
+ fn repo(name: &str) -> gix::Repository {
let dir = git_testtools::scripted_fixture_read_only("make_core_worktree_repo.sh").unwrap();
- git::open_opts(dir.join(name), crate::restricted()).unwrap()
+ gix::open_opts(dir.join(name), crate::restricted()).unwrap()
}
fn count_deleted(git_dir: &std::path::Path) -> usize {
@@ -122,7 +119,7 @@ mod baseline {
use std::path::{Path, PathBuf};
use git_object::bstr::BStr;
- use git_repository::bstr::{BString, ByteSlice};
+ use gix::bstr::{BString, ByteSlice};
use super::Baseline;
@@ -198,7 +195,7 @@ fn from_bare_parent_repo() {
return;
}
let dir = git_testtools::scripted_fixture_read_only_with_args("make_worktree_repo.sh", ["bare"]).unwrap();
- let repo = git::open(dir.join("repo.git")).unwrap();
+ let repo = gix::open(dir.join("repo.git")).unwrap();
run_assertions(repo, true /* bare */);
}
@@ -209,12 +206,12 @@ fn from_nonbare_parent_repo() {
return;
}
let dir = git_testtools::scripted_fixture_read_only("make_worktree_repo.sh").unwrap();
- let repo = git::open(dir.join("repo")).unwrap();
+ let repo = gix::open(dir.join("repo")).unwrap();
run_assertions(repo, false /* bare */);
}
-fn run_assertions(main_repo: git::Repository, should_be_bare: bool) {
+fn run_assertions(main_repo: gix::Repository, should_be_bare: bool) {
assert_eq!(main_repo.is_bare(), should_be_bare);
let mut baseline = Baseline::collect(
main_repo
@@ -277,7 +274,7 @@ fn run_assertions(main_repo: git::Repository, should_be_bare: bool) {
let repo = if base.is_dir() {
let repo = actual.into_repo().unwrap();
assert_eq!(
- &git::open(base).unwrap(),
+ &gix::open(base).unwrap(),
&repo,
"repos are considered the same no matter if opened from worktree or from git dir"
);
@@ -286,7 +283,7 @@ fn run_assertions(main_repo: git::Repository, should_be_bare: bool) {
assert!(
matches!(
actual.clone().into_repo(),
- Err(git::worktree::proxy::into_repo::Error::MissingWorktree { .. })
+ Err(gix::worktree::proxy::into_repo::Error::MissingWorktree { .. })
),
"missing bases are detected"
);
diff --git a/git-repository/tests/revision/mod.rs b/gix/tests/revision/mod.rs
similarity index 100%
rename from git-repository/tests/revision/mod.rs
rename to gix/tests/revision/mod.rs
diff --git a/git-repository/tests/revision/spec/from_bytes/ambiguous.rs b/gix/tests/revision/spec/from_bytes/ambiguous.rs
similarity index 99%
rename from git-repository/tests/revision/spec/from_bytes/ambiguous.rs
rename to gix/tests/revision/spec/from_bytes/ambiguous.rs
index 0a34de57201..aea28a80a3c 100644
--- a/git-repository/tests/revision/spec/from_bytes/ambiguous.rs
+++ b/gix/tests/revision/spec/from_bytes/ambiguous.rs
@@ -1,4 +1,4 @@
-use git_repository::{
+use gix::{
prelude::{ObjectIdExt, RevSpecExt},
revision::{
spec::parse::{Options, RefsHint},
diff --git a/git-repository/tests/revision/spec/from_bytes/mod.rs b/gix/tests/revision/spec/from_bytes/mod.rs
similarity index 95%
rename from git-repository/tests/revision/spec/from_bytes/mod.rs
rename to gix/tests/revision/spec/from_bytes/mod.rs
index 34b7553ff20..8fde68aa957 100644
--- a/git-repository/tests/revision/spec/from_bytes/mod.rs
+++ b/gix/tests/revision/spec/from_bytes/mod.rs
@@ -1,4 +1,4 @@
-use git_repository::{prelude::ObjectIdExt, revision::Spec};
+use gix::{prelude::ObjectIdExt, revision::Spec};
pub use util::*;
use crate::util::hex_to_id;
@@ -13,7 +13,7 @@ mod traverse;
mod peel;
mod sibling_branch {
- use git_repository::revision::spec::parse::Error;
+ use gix::revision::spec::parse::Error;
use crate::revision::spec::from_bytes::{parse_spec_no_baseline, repo};
@@ -33,7 +33,7 @@ mod sibling_branch {
}
mod index {
- use git_repository::{prelude::ObjectIdExt, revision::Spec};
+ use gix::{prelude::ObjectIdExt, revision::Spec};
use crate::{
revision::spec::from_bytes::{parse_spec, repo},
diff --git a/git-repository/tests/revision/spec/from_bytes/peel.rs b/gix/tests/revision/spec/from_bytes/peel.rs
similarity index 92%
rename from git-repository/tests/revision/spec/from_bytes/peel.rs
rename to gix/tests/revision/spec/from_bytes/peel.rs
index 1dccbae4d88..415ba39017c 100644
--- a/git-repository/tests/revision/spec/from_bytes/peel.rs
+++ b/gix/tests/revision/spec/from_bytes/peel.rs
@@ -1,4 +1,4 @@
-use git_repository::{prelude::ObjectIdExt, revision::Spec};
+use gix::{prelude::ObjectIdExt, revision::Spec};
use crate::{
revision::spec::from_bytes::{parse_spec, repo},
diff --git a/git-repository/tests/revision/spec/from_bytes/reflog.rs b/gix/tests/revision/spec/from_bytes/reflog.rs
similarity index 99%
rename from git-repository/tests/revision/spec/from_bytes/reflog.rs
rename to gix/tests/revision/spec/from_bytes/reflog.rs
index 0125191bd8d..d74f4dd9f59 100644
--- a/git-repository/tests/revision/spec/from_bytes/reflog.rs
+++ b/gix/tests/revision/spec/from_bytes/reflog.rs
@@ -1,4 +1,4 @@
-use git_repository::{
+use gix::{
prelude::ObjectIdExt,
revision::{spec::parse::Error, Spec},
};
diff --git a/git-repository/tests/revision/spec/from_bytes/regex.rs b/gix/tests/revision/spec/from_bytes/regex.rs
similarity index 96%
rename from git-repository/tests/revision/spec/from_bytes/regex.rs
rename to gix/tests/revision/spec/from_bytes/regex.rs
index 43b8bc9e2c1..a5739b0275f 100644
--- a/git-repository/tests/revision/spec/from_bytes/regex.rs
+++ b/gix/tests/revision/spec/from_bytes/regex.rs
@@ -1,4 +1,4 @@
-use git_repository::prelude::ObjectIdExt;
+use gix::prelude::ObjectIdExt;
use crate::{
revision::spec::from_bytes::{parse_spec_no_baseline, repo},
@@ -6,7 +6,7 @@ use crate::{
};
mod with_known_revision {
- use git_repository::revision::Spec;
+ use gix::revision::Spec;
use super::*;
use crate::revision::spec::from_bytes::parse_spec;
@@ -57,7 +57,7 @@ mod with_known_revision {
}
mod find_youngest_matching_commit {
- use git_repository::revision::Spec;
+ use gix::revision::Spec;
use super::*;
use crate::revision::spec::from_bytes::parse_spec;
diff --git a/git-repository/tests/revision/spec/from_bytes/traverse.rs b/gix/tests/revision/spec/from_bytes/traverse.rs
similarity index 97%
rename from git-repository/tests/revision/spec/from_bytes/traverse.rs
rename to gix/tests/revision/spec/from_bytes/traverse.rs
index 13f45a82735..ed3ebb71618 100644
--- a/git-repository/tests/revision/spec/from_bytes/traverse.rs
+++ b/gix/tests/revision/spec/from_bytes/traverse.rs
@@ -1,4 +1,4 @@
-use git_repository::{prelude::ObjectIdExt, revision::Spec};
+use gix::{prelude::ObjectIdExt, revision::Spec};
use crate::{
revision::spec::from_bytes::{parse_spec, parse_spec_no_baseline, repo},
diff --git a/git-repository/tests/revision/spec/from_bytes/util.rs b/gix/tests/revision/spec/from_bytes/util.rs
similarity index 84%
rename from git-repository/tests/revision/spec/from_bytes/util.rs
rename to gix/tests/revision/spec/from_bytes/util.rs
index 8733517fe03..51c93c0b02f 100644
--- a/git-repository/tests/revision/spec/from_bytes/util.rs
+++ b/gix/tests/revision/spec/from_bytes/util.rs
@@ -2,7 +2,6 @@ use std::{collections::HashMap, path::PathBuf, str::FromStr};
use git_object::{bstr, bstr::BStr};
use git_ref::bstr::{BString, ByteSlice};
-use git_repository as git;
use git_revision::spec::Kind;
use git_testtools::once_cell::sync::Lazy;
@@ -61,7 +60,7 @@ static BASELINE: Lazy match git::ObjectId::from_str(exit_code_or_hash) {
+ Err(_) => match gix::ObjectId::from_str(exit_code_or_hash) {
Ok(hash) => hash,
Err(_) => break, // for now bail out, we can't parse multi-line results yet
},
@@ -114,8 +113,8 @@ static BASELINE: Lazy(
spec: &str,
- repo: &'a git::Repository,
-) -> Result, git_repository::revision::spec::parse::Error> {
+ repo: &'a gix::Repository,
+) -> Result, gix::revision::spec::parse::Error> {
parse_spec_no_baseline_opts(spec, repo, Default::default())
}
@@ -129,43 +128,43 @@ enum BaselineExpectation {
/// Git can't do that, but we can
pub fn parse_spec_better_than_baseline<'a>(
spec: &str,
- repo: &'a git::Repository,
-) -> Result, git_repository::revision::spec::parse::Error> {
- let res = git::revision::Spec::from_bstr(spec, repo, Default::default());
+ repo: &'a gix::Repository,
+) -> Result, gix::revision::spec::parse::Error> {
+ let res = gix::revision::Spec::from_bstr(spec, repo, Default::default());
compare_with_baseline(&res, repo, spec, BaselineExpectation::GitFailsWeSucceed);
res
}
pub fn parse_spec_no_baseline_opts<'a>(
spec: &str,
- repo: &'a git::Repository,
- opts: git_repository::revision::spec::parse::Options,
-) -> Result, git_repository::revision::spec::parse::Error> {
- git::revision::Spec::from_bstr(spec, repo, opts)
+ repo: &'a gix::Repository,
+ opts: gix::revision::spec::parse::Options,
+) -> Result, gix::revision::spec::parse::Error> {
+ gix::revision::Spec::from_bstr(spec, repo, opts)
}
pub fn parse_spec_opts<'a>(
spec: &str,
- repo: &'a git::Repository,
- opts: git_repository::revision::spec::parse::Options,
-) -> Result, git_repository::revision::spec::parse::Error> {
- let res = git::revision::Spec::from_bstr(spec, repo, opts);
+ repo: &'a gix::Repository,
+ opts: gix::revision::spec::parse::Options,
+) -> Result, gix::revision::spec::parse::Error> {
+ let res = gix::revision::Spec::from_bstr(spec, repo, opts);
compare_with_baseline(&res, repo, spec, BaselineExpectation::Same);
res
}
pub fn rev_parse<'a>(
spec: &str,
- repo: &'a git::Repository,
-) -> Result, git_repository::revision::spec::parse::Error> {
+ repo: &'a gix::Repository,
+) -> Result, gix::revision::spec::parse::Error> {
let res = repo.rev_parse(spec);
compare_with_baseline(&res, repo, spec, BaselineExpectation::Same);
res
}
fn compare_with_baseline(
- res: &Result, git_repository::revision::spec::parse::Error>,
- repo: &git::Repository,
+ res: &Result, gix::revision::spec::parse::Error>,
+ repo: &gix::Repository,
spec: &str,
expectation: BaselineExpectation,
) {
@@ -192,12 +191,12 @@ fn compare_with_baseline(
pub fn parse_spec<'a>(
spec: &str,
- repo: &'a git::Repository,
-) -> Result, git_repository::revision::spec::parse::Error> {
+ repo: &'a gix::Repository,
+) -> Result, gix::revision::spec::parse::Error> {
parse_spec_opts(spec, repo, Default::default())
}
-pub fn repo(name: &str) -> crate::Result {
+pub fn repo(name: &str) -> crate::Result {
let base = git_testtools::scripted_fixture_read_only(FIXTURE_NAME)?;
- Ok(git::open(base.join(name))?)
+ Ok(gix::open(base.join(name))?)
}
diff --git a/git-repository/tests/revision/spec/mod.rs b/gix/tests/revision/spec/mod.rs
similarity index 100%
rename from git-repository/tests/revision/spec/mod.rs
rename to gix/tests/revision/spec/mod.rs
diff --git a/git-repository/tests/util/mod.rs b/gix/tests/util/mod.rs
similarity index 93%
rename from git-repository/tests/util/mod.rs
rename to gix/tests/util/mod.rs
index faa271282a0..eeff1769671 100644
--- a/git-repository/tests/util/mod.rs
+++ b/gix/tests/util/mod.rs
@@ -1,6 +1,6 @@
#![allow(clippy::result_large_err)]
-use git_repository::{open, Repository, ThreadSafeRepository};
use git_testtools::tempfile;
+use gix::{open, Repository, ThreadSafeRepository};
pub type Result = std::result::Result>;
@@ -54,7 +54,7 @@ pub fn repo_rw(name: &str) -> Result<(Repository, tempfile::TempDir)> {
repo_rw_opts(name, restricted())
}
-pub fn repo_rw_opts(name: &str, opts: git_repository::open::Options) -> Result<(Repository, tempfile::TempDir)> {
+pub fn repo_rw_opts(name: &str, opts: gix::open::Options) -> Result<(Repository, tempfile::TempDir)> {
let repo_path = git_testtools::scripted_fixture_writable(name)?;
Ok((
ThreadSafeRepository::discover_opts(
diff --git a/src/plumbing/main.rs b/src/plumbing/main.rs
index 2743673ddce..dfbf82a4200 100644
--- a/src/plumbing/main.rs
+++ b/src/plumbing/main.rs
@@ -9,9 +9,9 @@ use std::{
use anyhow::{Context, Result};
use clap::Parser;
-use git_repository::bstr::io::BufReadExt;
use gitoxide_core as core;
use gitoxide_core::pack::verify;
+use gix::bstr::io::BufReadExt;
use crate::{
plumbing::{
@@ -51,14 +51,13 @@ pub mod async_util {
}
pub fn main() -> Result<()> {
- let args: Args = Args::parse_from(git_repository::env::args_os());
+ let args: Args = Args::parse_from(gix::env::args_os());
let thread_limit = args.threads;
let verbose = args.verbose;
let format = args.format;
let cmd = args.cmd;
let object_hash = args.object_hash;
let config = args.config;
- use git_repository as git;
let repository = args.repository;
enum Mode {
Strict,
@@ -69,8 +68,8 @@ pub fn main() -> Result<()> {
let repository = {
let config = config.clone();
- move |mode: Mode| -> Result {
- let mut mapping: git::sec::trust::Mapping = Default::default();
+ move |mode: Mode| -> Result {
+ let mut mapping: gix::sec::trust::Mapping = Default::default();
let strict_toggle = matches!(mode, Mode::Strict | Mode::StrictWithGitInstallConfig) || args.strict;
mapping.full = mapping.full.strict_config(strict_toggle);
mapping.reduced = mapping.reduced.strict_config(strict_toggle);
@@ -78,7 +77,7 @@ pub fn main() -> Result<()> {
mode,
Mode::StrictWithGitInstallConfig | Mode::LenientWithGitInstallConfig
);
- let to_match_settings = |mut opts: git::open::Options| {
+ let to_match_settings = |mut opts: gix::open::Options| {
opts.permissions.config.git_binary = git_installation;
if config.is_empty() {
opts
@@ -88,11 +87,11 @@ pub fn main() -> Result<()> {
};
mapping.full.modify(to_match_settings);
mapping.reduced.modify(to_match_settings);
- let mut repo = git::ThreadSafeRepository::discover_opts(repository, Default::default(), mapping)
- .map(git::Repository::from)?;
+ let mut repo = gix::ThreadSafeRepository::discover_opts(repository, Default::default(), mapping)
+ .map(gix::Repository::from)?;
if !config.is_empty() {
repo.config_snapshot_mut()
- .append_config(config.iter(), git::config::Source::Cli)
+ .append_config(config.iter(), gix::config::Source::Cli)
.context("Unable to parse command-line configuration")?;
}
Ok(repo)
@@ -114,7 +113,7 @@ pub fn main() -> Result<()> {
let auto_verbose = !progress && !args.no_verbose;
let should_interrupt = Arc::new(AtomicBool::new(false));
- git_repository::interrupt::init_handler({
+ gix::interrupt::init_handler({
let should_interrupt = Arc::clone(&should_interrupt);
move || should_interrupt.store(true, Ordering::SeqCst)
})?;
@@ -172,9 +171,9 @@ pub fn main() -> Result<()> {
Subcommands::Credential(cmd) => core::repository::credential(
repository(Mode::StrictWithGitInstallConfig)?,
match cmd {
- credential::Subcommands::Fill => git::credentials::program::main::Action::Get,
- credential::Subcommands::Approve => git::credentials::program::main::Action::Store,
- credential::Subcommands::Reject => git::credentials::program::main::Action::Erase,
+ credential::Subcommands::Fill => gix::credentials::program::main::Action::Get,
+ credential::Subcommands::Approve => gix::credentials::program::main::Action::Store,
+ credential::Subcommands::Reject => gix::credentials::program::main::Action::Erase,
},
),
#[cfg(any(feature = "gitoxide-core-async-client", feature = "gitoxide-core-blocking-client"))]
@@ -609,7 +608,7 @@ pub fn main() -> Result<()> {
format,
out,
object_hash,
- should_interrupt: &git_repository::interrupt::IS_INTERRUPTED,
+ should_interrupt: &gix::interrupt::IS_INTERRUPTED,
},
)
},
@@ -832,7 +831,7 @@ pub fn main() -> Result<()> {
progress_keep_open,
None,
move |_progress, out, _err| {
- use git::bstr::ByteSlice;
+ use gix::bstr::ByteSlice;
core::repository::exclude::query(
repository(Mode::Strict)?,
if pathspecs.is_empty() {
@@ -840,8 +839,8 @@ pub fn main() -> Result<()> {
stdin_or_bail()?
.byte_lines()
.filter_map(Result::ok)
- .filter_map(|line| git::path::Spec::from_bytes(line.as_bstr())),
- ) as Box>
+ .filter_map(|line| gix::path::Spec::from_bytes(line.as_bstr())),
+ ) as Box>
} else {
Box::new(pathspecs.into_iter())
},
diff --git a/src/plumbing/options/free.rs b/src/plumbing/options/free.rs
index 2be0878fb3c..b1c42918548 100644
--- a/src/plumbing/options/free.rs
+++ b/src/plumbing/options/free.rs
@@ -39,8 +39,8 @@ pub mod index {
#[derive(Debug, clap::Parser)]
pub struct Platform {
/// The object format to assume when reading files that don't inherently know about it, or when writing files.
- #[clap(long, default_value_t = git_repository::hash::Kind::default(), value_parser = crate::shared::AsHashKind)]
- pub object_hash: git_repository::hash::Kind,
+ #[clap(long, default_value_t = gix::hash::Kind::default(), value_parser = crate::shared::AsHashKind)]
+ pub object_hash: gix::hash::Kind,
/// The path to the index file.
#[clap(short = 'i', long, default_value = ".git/index")]
diff --git a/src/plumbing/options/mod.rs b/src/plumbing/options/mod.rs
index 7bd70f9dbfd..2f8617382b1 100644
--- a/src/plumbing/options/mod.rs
+++ b/src/plumbing/options/mod.rs
@@ -1,7 +1,7 @@
use std::path::PathBuf;
-use git_repository::bstr::BString;
use gitoxide_core as core;
+use gix::bstr::BString;
#[derive(Debug, clap::Parser)]
#[clap(name = "gix-plumbing", about = "The git underworld", version = clap::crate_version!())]
@@ -63,8 +63,8 @@ pub struct Args {
pub format: core::OutputFormat,
/// The object format to assume when reading files that don't inherently know about it, or when writing files.
- #[clap(long, default_value_t = git_repository::hash::Kind::default(), value_parser = crate::shared::AsHashKind)]
- pub object_hash: git_repository::hash::Kind,
+ #[clap(long, default_value_t = gix::hash::Kind::default(), value_parser = crate::shared::AsHashKind)]
+ pub object_hash: gix::hash::Kind,
#[clap(subcommand)]
pub cmd: Subcommands,
@@ -117,8 +117,8 @@ pub enum Subcommands {
}
pub mod config {
- use git::bstr::BString;
- use git_repository as git;
+
+ use gix::bstr::BString;
/// Print all entries in a configuration file or access other sub-commands
#[derive(Debug, clap::Parser)]
@@ -153,7 +153,7 @@ pub mod fetch {
/// Override the built-in and configured ref-specs with one or more of the given ones.
#[clap(value_parser = crate::shared::AsBString)]
- pub ref_spec: Vec,
+ pub ref_spec: Vec,
}
}
@@ -214,7 +214,7 @@ pub mod remote {
show_unmapped_remote_refs: bool,
/// Override the built-in and configured ref-specs with one or more of the given ones.
#[clap(value_parser = crate::shared::AsBString)]
- ref_spec: Vec,
+ ref_spec: Vec,
},
}
}
@@ -355,8 +355,6 @@ pub mod revision {
pub mod exclude {
use std::ffi::OsString;
- use git_repository as git;
-
use super::AsPathSpec;
#[derive(Debug, clap::Subcommand)]
@@ -375,7 +373,7 @@ pub mod exclude {
patterns: Vec,
/// The git path specifications to check for exclusion, or unset to read from stdin one per line.
#[clap(value_parser = AsPathSpec)]
- pathspecs: Vec,
+ pathspecs: Vec,
},
}
}
@@ -412,17 +410,16 @@ mod clap_util {
builder::{OsStringValueParser, TypedValueParser},
Arg, Command, Error,
};
- use git_repository as git;
#[derive(Clone)]
pub struct AsPathSpec;
impl TypedValueParser for AsPathSpec {
- type Value = git::path::Spec;
+ type Value = gix::path::Spec;
fn parse_ref(&self, cmd: &Command, arg: Option<&Arg>, value: &OsStr) -> Result {
OsStringValueParser::new()
- .try_map(|arg| git::path::Spec::try_from(arg.as_os_str()))
+ .try_map(|arg| gix::path::Spec::try_from(arg.as_os_str()))
.parse_ref(cmd, arg, value)
}
}
diff --git a/src/plumbing/progress.rs b/src/plumbing/progress.rs
index a18409a9368..dde6a10a091 100644
--- a/src/plumbing/progress.rs
+++ b/src/plumbing/progress.rs
@@ -4,7 +4,6 @@ use std::{
};
use crosstermion::crossterm::style::Stylize;
-use git_repository as git;
use owo_colors::OwoColorize;
use tabled::{Style, TableIteratorExt, Tabled};
@@ -455,15 +454,15 @@ static GIT_CONFIG: &[Record] = &[
pub fn show_progress() -> anyhow::Result<()> {
let sorted = {
let mut v: Vec<_> = GIT_CONFIG.into();
- v.extend(git::config::Tree.sections().iter().flat_map(|section| {
- fn to_record(key: &dyn git::config::tree::Key) -> Record {
+ v.extend(gix::config::Tree.sections().iter().flat_map(|section| {
+ fn to_record(key: &dyn gix::config::tree::Key) -> Record {
let config = key.logical_name();
let note = key.note().map(|note| match note {
- git::config::tree::Note::Deviation(n) | git::config::tree::Note::Informative(n) => n.to_string(),
+ gix::config::tree::Note::Deviation(n) | gix::config::tree::Note::Informative(n) => n.to_string(),
});
let link = key.link().map(|link| match link {
- git::config::tree::Link::FallbackKey(key) => format!("fallback is '{}'", key.logical_name()),
- git::config::tree::Link::EnvironmentOverride(name) => format!("overridden by '{name}'"),
+ gix::config::tree::Link::FallbackKey(key) => format!("fallback is '{}'", key.logical_name()),
+ gix::config::tree::Link::EnvironmentOverride(name) => format!("overridden by '{name}'"),
});
let deviation = match (note, link) {
(Some(n), Some(l)) => Some(format!("{n}. {l}")),
diff --git a/src/porcelain/main.rs b/src/porcelain/main.rs
index e48478dc6e4..71a2a742f07 100644
--- a/src/porcelain/main.rs
+++ b/src/porcelain/main.rs
@@ -13,9 +13,9 @@ use crate::{
};
pub fn main() -> Result<()> {
- let args: Args = Args::parse_from(git_repository::env::args_os());
+ let args: Args = Args::parse_from(gix::env::args_os());
let should_interrupt = Arc::new(AtomicBool::new(false));
- git_repository::interrupt::init_handler({
+ gix::interrupt::init_handler({
let should_interrupt = Arc::clone(&should_interrupt);
move || should_interrupt.store(true, Ordering::SeqCst)
})?;
diff --git a/src/porcelain/options.rs b/src/porcelain/options.rs
index f7b0648ed13..d295d11a2da 100644
--- a/src/porcelain/options.rs
+++ b/src/porcelain/options.rs
@@ -1,7 +1,6 @@
use std::path::PathBuf;
-use git::bstr::BString;
-use git_repository as git;
+use gix::bstr::BString;
#[derive(Debug, clap::Parser)]
#[clap(about = "The rusty git", version = clap::crate_version!())]
@@ -125,7 +124,6 @@ mod validator {
use std::{ffi::OsStr, path::PathBuf};
use anyhow::Context;
- use git_repository as git;
#[derive(Clone)]
pub struct IsRepo;
@@ -153,7 +151,7 @@ mod validator {
fn assure_is_repo(dir: &OsStr) -> anyhow::Result<()> {
let git_dir = PathBuf::from(dir).join(".git");
- let p = git::path::realpath(&git_dir)
+ let p = gix::path::realpath(&git_dir)
.with_context(|| format!("Could not canonicalize git repository at '{}'", git_dir.display()))?;
if p.extension().unwrap_or_default() == "git"
|| p.file_name().unwrap_or_default() == ".git"
diff --git a/src/shared.rs b/src/shared.rs
index f1d9a24a420..e03d3b3bd0f 100644
--- a/src/shared.rs
+++ b/src/shared.rs
@@ -177,7 +177,7 @@ pub mod pretty {
Event::UiDone => {
// We don't know why the UI is done, usually it's the user aborting.
// We need the computation to stop as well so let's wait for that to happen
- git_repository::interrupt::trigger();
+ gix::interrupt::trigger();
continue;
}
Event::ComputationDone(res, out) => {
@@ -240,9 +240,8 @@ mod clap {
use std::{ffi::OsStr, str::FromStr};
use clap::{builder, builder::PossibleValue, error::ErrorKind, Arg, Command, Error};
- use git_repository as git;
- use git_repository::bstr::BString;
use gitoxide_core as core;
+ use gix::bstr::BString;
#[derive(Clone)]
pub struct AsBString;
@@ -251,7 +250,7 @@ mod clap {
type Value = BString;
fn parse_ref(&self, _cmd: &Command, _arg: Option<&Arg>, value: &OsStr) -> Result {
- git::env::os_str_to_bstring(value).ok_or_else(|| Error::new(ErrorKind::InvalidUtf8))
+ gix::env::os_str_to_bstring(value).ok_or_else(|| Error::new(ErrorKind::InvalidUtf8))
}
}
@@ -276,11 +275,11 @@ mod clap {
pub struct AsHashKind;
impl builder::TypedValueParser for AsHashKind {
- type Value = git::hash::Kind;
+ type Value = gix::hash::Kind;
fn parse_ref(&self, cmd: &Command, arg: Option<&Arg>, value: &OsStr) -> Result {
builder::StringValueParser::new()
- .try_map(|arg| git::hash::Kind::from_str(&arg))
+ .try_map(|arg| gix::hash::Kind::from_str(&arg))
.parse_ref(cmd, arg, value)
}
diff --git a/tests/journey/gix.sh b/tests/journey/gix.sh
index 5d6510fd53f..da4bd606858 100644
--- a/tests/journey/gix.sh
+++ b/tests/journey/gix.sh
@@ -31,9 +31,9 @@ title "git-tempfile crate"
)
title "git-tempfile crate"
-(when "testing 'git-repository'"
- snapshot="$snapshot/git-repository"
- cd git-repository
+(when "testing 'gix'"
+ snapshot="$snapshot/gix"
+ cd gix
ABORTED=143
(when "running the example program to check order of signal handlers"