use std::path::PathBuf;
use crate::{bstr::BString, config};
#[derive(Debug, Clone)]
pub struct Permissions {
pub env: permissions::Environment,
pub config: permissions::Config,
pub attributes: permissions::Attributes,
}
#[derive(Clone)]
pub struct Options {
pub(crate) object_store_slots: gix_odb::store::init::Slots,
pub permissions: Permissions,
pub(crate) git_dir_trust: Option<gix_sec::Trust>,
pub(crate) filter_config_section: Option<fn(&gix_config::file::Metadata) -> bool>,
pub(crate) lossy_config: Option<bool>,
pub(crate) lenient_config: bool,
pub(crate) bail_if_untrusted: bool,
pub(crate) api_config_overrides: Vec<BString>,
pub(crate) cli_config_overrides: Vec<BString>,
pub(crate) open_path_as_is: bool,
pub(crate) current_dir: Option<PathBuf>,
}
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
#[error("Failed to load the git configuration")]
Config(#[from] config::Error),
#[error("\"{path}\" does not appear to be a git repository")]
NotARepository {
source: gix_discover::is_git::Error,
path: PathBuf,
},
#[error(transparent)]
Io(#[from] std::io::Error),
#[error("The git directory at '{}' is considered unsafe as it's not owned by the current user.", .path.display())]
UnsafeGitDir { path: PathBuf },
#[error(transparent)]
EnvironmentAccessDenied(#[from] gix_sec::permission::Error<std::path::PathBuf>),
}
mod options;
pub mod permissions;
mod repository;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn size_of_options() {
let actual = std::mem::size_of::<Options>();
let limit = 160;
assert!(
actual <= limit,
"{actual} <= {limit}: size shouldn't change without us knowing (on windows, it's bigger)"
);
}
}