use std::borrow::Cow;
use crate::{
bstr::BStr,
config::tree::{Remote, Section},
remote,
};
impl crate::Repository {
pub fn remote_names(&self) -> remote::Names<'_> {
self.config
.resolved
.sections_by_name(Remote.name())
.map(|it| {
let filter = self.filter_config_section();
it.filter(move |s| filter(s.meta()))
.filter_map(|section| section.header().subsection_name().map(Cow::Borrowed))
.collect()
})
.unwrap_or_default()
}
pub fn remote_default_name(&self, direction: remote::Direction) -> Option<Cow<'_, BStr>> {
let name = (direction == remote::Direction::Push)
.then(|| {
self.config
.resolved
.string_filter(Remote::PUSH_DEFAULT, &mut self.filter_config_section())
})
.flatten();
name.or_else(|| {
let names = self.remote_names();
match names.len() {
0 => None,
1 => names.into_iter().next(),
_more_than_one => {
let origin = Cow::Borrowed("origin".into());
names.contains(&origin).then_some(origin)
}
}
})
}
}