76 lines
2.1 KiB
Rust
76 lines
2.1 KiB
Rust
pub mod error;
|
|
|
|
use std::collections::{BTreeMap, HashSet};
|
|
|
|
use radicle::crypto::PublicKey;
|
|
use radicle::git;
|
|
use radicle::{identity::DocAt, storage::RefUpdate};
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct FetchResult {
|
|
/// The set of updated references.
|
|
pub updated: Vec<RefUpdate>,
|
|
/// The canonical references that were updated as part of the fetch process.
|
|
pub canonical: UpdatedCanonicalRefs,
|
|
/// The set of remote namespaces that were updated.
|
|
pub namespaces: HashSet<PublicKey>,
|
|
/// The fetch was a full clone.
|
|
pub clone: bool,
|
|
/// Identity doc of fetched repo.
|
|
pub doc: DocAt,
|
|
}
|
|
|
|
impl FetchResult {
|
|
pub fn new(doc: DocAt) -> Self {
|
|
Self {
|
|
updated: vec![],
|
|
canonical: UpdatedCanonicalRefs::default(),
|
|
namespaces: HashSet::new(),
|
|
clone: false,
|
|
doc,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// The set of canonical references, updated after a fetch, and their
|
|
/// corresponding targets.
|
|
#[derive(Clone, Default, Debug)]
|
|
pub struct UpdatedCanonicalRefs {
|
|
inner: BTreeMap<git::Qualified<'static>, git::Oid>,
|
|
}
|
|
|
|
impl IntoIterator for UpdatedCanonicalRefs {
|
|
type Item = (git::Qualified<'static>, git::Oid);
|
|
type IntoIter = std::collections::btree_map::IntoIter<git::Qualified<'static>, git::Oid>;
|
|
|
|
fn into_iter(self) -> Self::IntoIter {
|
|
self.inner.into_iter()
|
|
}
|
|
}
|
|
|
|
impl UpdatedCanonicalRefs {
|
|
/// Insert a new updated entry for the canonical reference identified by
|
|
/// `refname` and its new `target.`
|
|
pub fn updated(&mut self, refname: git::Qualified<'static>, target: git::Oid) {
|
|
self.inner.insert(refname, target);
|
|
}
|
|
|
|
/// Return an iterator of all the updates.
|
|
pub fn iter(&self) -> impl Iterator<Item = (&git::Qualified<'static>, &git::Oid)> {
|
|
self.inner.iter()
|
|
}
|
|
}
|
|
|
|
#[cfg(any(test, feature = "test"))]
|
|
impl qcheck::Arbitrary for FetchResult {
|
|
fn arbitrary(g: &mut qcheck::Gen) -> Self {
|
|
FetchResult {
|
|
updated: vec![],
|
|
canonical: UpdatedCanonicalRefs::default(),
|
|
namespaces: HashSet::arbitrary(g),
|
|
clone: bool::arbitrary(g),
|
|
doc: DocAt::arbitrary(g),
|
|
}
|
|
}
|
|
}
|