Skip to content

Commit c149116

Browse files
authored
Merge pull request #2106 from cruessler/add-open-with-environment-overrides
Add `gix::open_with_environment_overrides`
2 parents a4b0d2c + fb2766b commit c149116

File tree

5 files changed

+37
-6
lines changed

5 files changed

+37
-6
lines changed

gitoxide-core/src/repository/tag.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use gix::bstr::{BStr, BString, ByteSlice};
22

3+
use crate::OutputFormat;
4+
35
#[derive(Eq, PartialEq, PartialOrd, Ord)]
46
enum VersionPart {
57
String(BString),
@@ -41,7 +43,11 @@ impl Version {
4143
}
4244
}
4345

44-
pub fn list(repo: gix::Repository, out: &mut dyn std::io::Write) -> anyhow::Result<()> {
46+
pub fn list(repo: gix::Repository, out: &mut dyn std::io::Write, format: OutputFormat) -> anyhow::Result<()> {
47+
if format != OutputFormat::Human {
48+
anyhow::bail!("JSON output isn't supported");
49+
}
50+
4551
let platform = repo.references()?;
4652

4753
let mut tags: Vec<_> = platform

gix/src/discover.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ impl ThreadSafeRepository {
4949
/// Try to open a git repository directly from the environment.
5050
/// If that fails, discover upwards from `directory` until one is found,
5151
/// while applying discovery options from the environment.
52+
///
53+
/// For more, see [`ThreadSafeRepository::discover_with_environment_overrides_opts()`].
5254
pub fn discover_with_environment_overrides(directory: impl AsRef<Path>) -> Result<Self, Error> {
5355
Self::discover_with_environment_overrides_opts(directory, Default::default(), Default::default())
5456
}

gix/src/lib.rs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
//!
3030
//! By default, the [`Repository`] isn't `Sync` and thus can't be used in certain contexts which require the `Sync` trait.
3131
//!
32-
//! To help with this, convert it with [`.into_sync()`][Repository::into_sync()] into a [`ThreadSafeRepository`].
32+
//! To help with this, convert it with [`Repository::into_sync()`] into a [`ThreadSafeRepository`].
3333
//!
3434
//! ### Object-Access Performance
3535
//!
@@ -41,7 +41,7 @@
4141
//! On miss, the object is looked up and if a pack is hit, there is a small fixed-size cache for delta-base objects.
4242
//!
4343
//! In scenarios where the same objects are accessed multiple times, the object cache can be useful and is to be configured specifically
44-
//! using the [`object_cache_size(…)`][crate::Repository::object_cache_size()] method.
44+
//! using the [`Repository::object_cache_size()`] method.
4545
//!
4646
//! Use the `cache-efficiency-debug` cargo feature to learn how efficient the cache actually is - it's easy to end up with lowered
4747
//! performance if the cache is not hit in 50% of the time.
@@ -207,7 +207,10 @@ pub mod diff;
207207
#[cfg(feature = "merge")]
208208
pub mod merge;
209209

210-
/// See [`ThreadSafeRepository::discover()`], but returns a [`Repository`] instead.
210+
/// Try to open a git repository in `directory` and search upwards through its parents until one is found,
211+
/// using default trust options which matters in case the found repository isn't owned by the current user.
212+
///
213+
/// For details, see [`ThreadSafeRepository::discover()`].
211214
///
212215
/// # Note
213216
///
@@ -222,6 +225,24 @@ pub fn discover(directory: impl AsRef<std::path::Path>) -> Result<Repository, di
222225
ThreadSafeRepository::discover(directory).map(Into::into)
223226
}
224227

228+
/// Try to discover a git repository directly from the environment.
229+
///
230+
/// For details, see [`ThreadSafeRepository::discover_with_environment_overrides_opts()`].
231+
#[allow(clippy::result_large_err)]
232+
pub fn discover_with_environment_overrides(
233+
directory: impl AsRef<std::path::Path>,
234+
) -> Result<Repository, discover::Error> {
235+
ThreadSafeRepository::discover_with_environment_overrides(directory).map(Into::into)
236+
}
237+
238+
/// Try to open a git repository directly from the environment.
239+
///
240+
/// See [`ThreadSafeRepository::open_with_environment_overrides()`].
241+
#[allow(clippy::result_large_err)]
242+
pub fn open_with_environment_overrides(directory: impl Into<std::path::PathBuf>) -> Result<Repository, open::Error> {
243+
ThreadSafeRepository::open_with_environment_overrides(directory, Default::default()).map(Into::into)
244+
}
245+
225246
/// See [`ThreadSafeRepository::init()`], but returns a [`Repository`] instead.
226247
#[allow(clippy::result_large_err)]
227248
pub fn init(directory: impl AsRef<std::path::Path>) -> Result<Repository, init::Error> {

gix/src/types.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,9 @@ pub struct Reference<'r> {
145145

146146
/// A thread-local handle to interact with a repository from a single thread.
147147
///
148-
/// It is `Send` but **not** `Sync` - for the latter you can convert it `to_sync()`.
148+
/// It is `Send`, but **not** `Sync` - for the latter you can convert it using
149+
/// [`Repository::into_sync()`].
150+
///
149151
/// Note that it clones itself so that it is empty, requiring the user to configure each clone separately, specifically
150152
/// and explicitly. This is to have the fastest-possible default configuration available by default, but allow
151153
/// those who experiment with workloads to get speed boosts of 2x or more.

src/plumbing/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1312,7 +1312,7 @@ pub fn main() -> Result<()> {
13121312
progress,
13131313
progress_keep_open,
13141314
None,
1315-
move |_progress, out, _err| core::repository::tag::list(repository(Mode::Lenient)?, out),
1315+
move |_progress, out, _err| core::repository::tag::list(repository(Mode::Lenient)?, out, format),
13161316
),
13171317
},
13181318
Subcommands::Tree(cmd) => match cmd {

0 commit comments

Comments
 (0)