use std::fmt::Formatter; use std::path::PathBuf; use anyhow::{Context as AnyhowContext, Result}; use gix::bstr::BString; #[cfg(feature = "archive")] pub mod archive; pub mod branch; pub mod cat; pub use cat::function::cat; pub mod blame; pub mod commit; pub mod config; mod credential; pub use credential::function as credential; pub mod attributes; #[cfg(feature = "clean")] pub mod clean; pub mod diff; pub mod dirty; pub mod dirwalk; #[cfg(feature = "clean")] pub use clean::function::clean; #[cfg(feature = "blocking-client")] pub mod clone; pub mod exclude; #[cfg(feature = "blocking-client")] pub mod fetch; #[cfg(feature = "blocking-client")] pub use clone::function::clone; #[cfg(feature = "blocking-client")] pub use fetch::function::fetch; pub mod commitgraph; mod fsck; pub use fsck::function as fsck; pub mod index; pub mod log; pub mod mailmap; mod merge_base; pub use merge_base::merge_base; pub mod merge; pub mod odb; pub mod remote; pub mod revision; pub mod status; pub mod submodule; pub mod tag; pub mod tree; pub mod verify; pub mod worktree; pub fn init(directory: Option) -> Result { gix::create::into( directory.unwrap_or_default(), gix::create::Kind::WithWorktree, gix::create::Options::default(), ) .with_context(|| "Repository initialization failed") } pub enum PathsOrPatterns { Paths(Box>), Patterns(Vec), } struct HexId<'a>(gix::Id<'a>, bool); impl<'a> HexId<'a> { pub fn new(id: gix::Id<'a>, long_hex: bool) -> Self { HexId(id, long_hex) } } impl std::fmt::Display for HexId<'_> { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { let HexId(id, long_hex) = self; if *long_hex { id.fmt(f) } else { id.shorten_or_id().fmt(f) } } }