use super::Error;
use crate::Config;
use crate::refs::RefName;
use crate::workflow::Environment;
#[derive(Clone, Debug)]
#[non_exhaustive]
pub struct Selection {
pub primary: RefName,
pub display_patterns: Vec<Vec<u8>>,
}
impl Selection {
pub fn from_config(config: &Config, environment: &Environment) -> Result<Self, Error> {
let primary = environment
.get("GIT_NOTES_REF")
.map(|v| v.as_encoded_bytes())
.or_else(|| config.string("core", None, "notesRef"))
.unwrap_or(b"refs/notes/commits");
let bytes = primary.to_vec();
if !bytes.starts_with(b"refs/notes/") {
return Err(Error::Reference {
name: bytes,
source: None,
});
}
let primary = RefName::new(&bytes).map_err(|source| Error::Reference {
name: bytes,
source: Some(source),
})?;
let display_patterns = config
.values("notes", None, "displayRef")
.flatten()
.map(<[u8]>::to_vec)
.collect();
Ok(Self {
primary,
display_patterns,
})
}
}