use crate::store_impl::{
file,
file::{log, loose, loose::Reference},
};
pub(crate) fn must_be_io_err(err: loose::reflog::Error) -> std::io::Error {
match err {
loose::reflog::Error::Io(err) => err,
loose::reflog::Error::RefnameValidation(_) => unreachable!("we are called from a valid ref"),
}
}
impl Reference {
pub fn log_exists(&self, store: &file::Store) -> bool {
store
.reflog_exists(self.name.as_ref())
.expect("name conversion infallible")
}
pub fn log_iter_rev<'b>(
&self,
store: &file::Store,
buf: &'b mut [u8],
) -> std::io::Result<Option<log::iter::Reverse<'b, std::fs::File>>> {
store.reflog_iter_rev(self.name.as_ref(), buf).map_err(must_be_io_err)
}
pub fn log_iter<'a, 'b: 'a>(
&'a self,
store: &file::Store,
buf: &'b mut Vec<u8>,
) -> std::io::Result<Option<impl Iterator<Item = Result<log::LineRef<'b>, log::iter::decode::Error>> + 'a>> {
store.reflog_iter(self.name.as_ref(), buf).map_err(must_be_io_err)
}
}