use crate::error::Result;
use crate::object_inspect::{ResolveError, ResolvedObject};
use crate::objects::ObjectId;
use crate::repo::Repository;
use crate::rev_list::{rev_list, split_revision_token, RevListOptions, RevListResult};
use crate::rev_parse::resolve_revision;
#[derive(Debug, Copy, Clone)]
pub struct RevWalk<'repo> {
repo: &'repo Repository,
}
impl<'repo> RevWalk<'repo> {
#[inline]
#[must_use]
pub fn new(repo: &'repo Repository) -> Self {
Self { repo }
}
#[inline]
#[must_use]
pub fn repository(&self) -> &'repo Repository {
self.repo
}
#[inline]
pub fn resolve(&self, spec: &str) -> Result<ObjectId> {
resolve_revision(self.repo, spec)
}
#[inline]
pub fn resolve_object(&self, spec: &str) -> std::result::Result<ResolvedObject, ResolveError> {
self.repo.resolve(spec)
}
#[inline]
pub fn walk(&self, spec: &str, options: &RevListOptions) -> Result<RevListResult> {
let (positive, negative) = split_revision_token(spec);
rev_list(self.repo, &positive, &negative, options)
}
}