summaryrefslogtreecommitdiffstats
path: root/vendor/gix-ref/src/peel.rs
blob: c8efb5f03d675273cac2bd4cff14e9ffe38f4135 (plain)
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
/// A function for use in [`crate::file::ReferenceExt::peel_to_id_in_place()`] to indicate no peeling should happen.
pub fn none(
    _id: gix_hash::ObjectId,
    #[allow(clippy::ptr_arg)] _buf: &mut Vec<u8>,
) -> Result<Option<(gix_object::Kind, &[u8])>, std::convert::Infallible> {
    Ok(Some((gix_object::Kind::Commit, &[])))
}

///
pub mod to_id {
    use std::path::PathBuf;

    use gix_object::bstr::BString;

    use crate::file;

    /// The error returned by [`crate::file::ReferenceExt::peel_to_id_in_place()`].
    #[derive(Debug, thiserror::Error)]
    #[allow(missing_docs)]
    pub enum Error {
        #[error("Could not follow a single level of a symbolic reference")]
        Follow(#[from] file::find::existing::Error),
        #[error("Aborting due to reference cycle with first seen path being {start_absolute:?}")]
        Cycle { start_absolute: PathBuf },
        #[error("Refusing to follow more than {max_depth} levels of indirection")]
        DepthLimitExceeded { max_depth: usize },
        #[error("An error occurred when trying to resolve an object a reference points to")]
        Find(#[from] Box<dyn std::error::Error + Send + Sync + 'static>),
        #[error("Object {oid} as referred to by {name:?} could not be found")]
        NotFound { oid: gix_hash::ObjectId, name: BString },
    }
}