use std::collections::BTreeSet;
use git_ext::Oid;
use crate::{change_graph::ChangeGraph, ObjectId, Store, TypeName};
use super::error;
pub struct ChangeGraphInfo {
pub object_id: ObjectId,
pub number_of_nodes: usize,
pub tips: BTreeSet<Oid>,
}
pub fn changegraph<S>(
storage: &S,
typename: &TypeName,
oid: &ObjectId,
) -> Result<Option<ChangeGraphInfo>, error::Retrieve>
where
S: Store,
{
let tip_refs = storage
.objects(typename, oid)
.map_err(|err| error::Retrieve::Refs { err: Box::new(err) })?;
Ok(
ChangeGraph::load(storage, tip_refs.iter(), typename, oid).map(|graph| ChangeGraphInfo {
object_id: *oid,
number_of_nodes: graph.number_of_nodes(),
tips: graph.tips(),
}),
)
}