blob: 6b5ee9e87f2bb4f15595b83a5a1d260df8fecc4d [file] [log] [blame]
use std::path::PathBuf;
use crate::store::WriteReflog;
mod error {
/// The error returned by [`crate::Store::at()`].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
#[error("There was an error accessing the store's directory")]
Io(#[from] std::io::Error),
}
}
pub use error::Error;
use crate::file;
#[allow(dead_code)]
impl crate::Store {
/// Create a new store at the given location, typically the `.git/` directory.
///
/// `object_hash` defines the kind of hash to assume when dealing with refs.
/// `precompose_unicode` is used to set to the value of [`crate::file::Store::precompose_unicode].
///
/// Note that if `precompose_unicode` is set, the `git_dir` is also expected to use precomposed unicode,
/// or else some operations that strip prefixes will fail.
pub fn at(
git_dir: PathBuf,
reflog_mode: WriteReflog,
object_hash: gix_hash::Kind,
precompose_unicode: bool,
) -> Result<Self, Error> {
// for now, just try to read the directory - later we will do that naturally as we have to figure out if it's a ref-table or not.
std::fs::read_dir(&git_dir)?;
Ok(crate::Store {
inner: crate::store::State::Loose {
store: file::Store::at(git_dir, reflog_mode, object_hash, precompose_unicode),
},
})
}
}