use std::convert::TryInto;use git_hash::ObjectId;use crate::{ bstr::{BString, ByteSlice}, Head,};impl<'repo> Head<'repo> { /// Return a platform for obtaining iterators on the reference log associated with the `HEAD` reference. pub fn log_iter(&self) -> git_ref::file::log::iter::Platform<'static, 'repo> { git_ref::file::log::iter::Platform { store: &self.repo.refs, name: "HEAD".try_into().expect("HEAD is always valid"), buf: Vec::new(), } } /// Return a list of all branch names that were previously checked out with the first-ever checked out branch /// being the first entry of the list, and the most recent is the last, along with the commit they were pointing to /// at the time. pub fn prior_checked_out_branches(&self) -> std::io::Result<Option<Vec<(BString, ObjectId)>>> { Ok(self.log_iter().all()?.map(|log| { log.filter_map(Result::ok) .filter_map(|line| { line.message .strip_prefix(b"checkout: moving from ") .and_then(|from_to| from_to.find(" to ").map(|pos| &from_to[..pos])) .map(|from_branch| (from_branch.as_bstr().to_owned(), line.previous_oid())) }) .collect() })) }}
use std::convert::TryInto;
use git_hash::ObjectId;
use crate::{
bstr::{BString, ByteSlice},
Head,
};
impl<'repo> Head<'repo> {
/// Return a platform for obtaining iterators on the reference log associated with the `HEAD` reference.
pub fn log_iter(&self) -> git_ref::file::log::iter::Platform<'static, 'repo> {
git_ref::file::log::iter::Platform {
store: &self.repo.refs,
name: "HEAD".try_into().expect("HEAD is always valid"),
buf: Vec::new(),
}
}
/// Return a list of all branch names that were previously checked out with the first-ever checked out branch
/// being the first entry of the list, and the most recent is the last, along with the commit they were pointing to
/// at the time.
pub fn prior_checked_out_branches(&self) -> std::io::Result<Option<Vec<(BString, ObjectId)>>> {
Ok(self.log_iter().all()?.map(|log| {
log.filter_map(Result::ok)
.filter_map(|line| {
line.message
.strip_prefix(b"checkout: moving from ")
.and_then(|from_to| from_to.find(" to ").map(|pos| &from_to[..pos]))
.map(|from_branch| (from_branch.as_bstr().to_owned(), line.previous_oid()))
})
.collect()
}))
}
}