1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::store::{
file,
file::{log, loose, loose::Reference},
};
pub(in crate::store::file) 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.borrow())
.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.borrow(), 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::Line<'b>, log::iter::decode::Error>> + 'a>> {
store.reflog_iter(self.name.borrow(), buf).map_err(must_be_io_err)
}
}