use crate::{bstr::BStr, revision, Id}; /// Methods for resolving revisions by spec or working with the commit graph. impl crate::Repository { /// Parse a revision specification and turn it into the object(s) it describes, similar to `git rev-parse`. /// /// # Deviation /// /// - `@` actually stands for `HEAD`, whereas `git` resolves it to the object pointed to by `HEAD` without making the /// `HEAD` ref available for lookups. pub fn rev_parse<'a>(&self, spec: impl Into<&'a BStr>) -> Result, revision::spec::parse::Error> { revision::Spec::from_bstr( spec, self, revision::spec::parse::Options { object_kind_hint: self.config.object_kind_hint, ..Default::default() }, ) } /// Parse a revision specification and return single object id as represented by this instance. pub fn rev_parse_single<'repo, 'a>( &'repo self, spec: impl Into<&'a BStr>, ) -> Result, revision::spec::parse::single::Error> { let spec = spec.into(); self.rev_parse(spec)? .single() .ok_or(revision::spec::parse::single::Error::RangedRev { spec: spec.into() }) } /// Create the baseline for a revision walk by initializing it with the `tips` to start iterating on. /// /// It can be configured further before starting the actual walk. pub fn rev_walk( &self, tips: impl IntoIterator>, ) -> revision::walk::Platform<'_> { revision::walk::Platform::new(tips, self) } }