//! Revisions is the generalized notion of a commit.
//!
//! This module provides utilities to walk graphs of revisions and specify revisions and ranges of revisions.

#[cfg(feature = "revision")]
pub use gix_revision as plumbing;

///
#[allow(clippy::empty_docs)]
pub mod walk;
pub use walk::iter::Walk;

///
#[cfg(feature = "revision")]
#[allow(clippy::empty_docs)]
pub mod spec;

/// The specification of a revision as parsed from a revision specification like `HEAD@{1}` or `v1.2.3...main`.
/// It's typically created by [`repo.rev_parse()`][crate::Repository::rev_parse()].
///
/// See the [official git documentation](https://git-scm.com/docs/git-rev-parse#_specifying_revisions) for reference on how
/// to specify revisions and revision ranges.
#[derive(Clone, Debug)]
#[cfg(feature = "revision")]
pub struct Spec<'repo> {
    pub(crate) inner: gix_revision::Spec,
    /// The path we encountered in the revspec, like `@:<path>` or `@..@~1:<path>`.
    pub(crate) path: Option<(crate::bstr::BString, gix_object::tree::EntryMode)>,
    /// The first name of a reference as seen while parsing a `RevSpec`, for completeness.
    pub(crate) first_ref: Option<gix_ref::Reference>,
    /// The second name of a reference as seen while parsing a `RevSpec`, for completeness.
    pub(crate) second_ref: Option<gix_ref::Reference>,
    pub(crate) repo: &'repo crate::Repository,
}
