Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
REVIEW
Fintan Halpenny committed 7 months ago
commit 2ebef84cbb0f66c03e4ba3ae37e324dfe837683e
parent 5ad195ca83d553c714b27dc504026da54e9dc1c1
4 files changed +21 -19
modified crates/radicle-node/src/worker/fetch.rs
@@ -1,5 +1,4 @@
use radicle::identity::doc::CanonicalRefsError;
-
use radicle::identity::CanonicalRefs;
pub(crate) use radicle_protocol::worker::fetch::error;

use std::collections::BTreeSet;
@@ -362,10 +361,7 @@ fn set_canonical_refs(

    let crefs = identity.canonical_refs_or_default(|| {
        let doc = identity.doc();
-
        let mut crefs = CanonicalRefs::default();
-
        crefs.extend([doc.default_branch_rule()?]);
-
        crefs.extend([doc.default_branch_symbolic()?]);
-

+
        let crefs = doc.default_canonical_refs()?;
        Ok::<_, CanonicalRefsError>(crefs)
    })?;

modified crates/radicle-remote-helper/src/push.rs
@@ -20,7 +20,7 @@ use radicle::cob::patch;
use radicle::cob::patch::cache::Patches as _;
use radicle::crypto;
use radicle::explorer::ExplorerResource;
-
use radicle::identity::{CanonicalRefs, Did};
+
use radicle::identity::Did;
use radicle::node;
use radicle::node::{Handle, NodeId};
use radicle::storage;
@@ -289,10 +289,7 @@ pub fn run(
    let identity = stored.identity()?;

    let crefs = identity.canonical_refs_or_default(|| {
-
        let mut crefs = CanonicalRefs::default();
-
        crefs.extend([identity.default_branch_rule()?]);
-
        crefs.extend([identity.default_branch_symbolic()?]);
-

+
        let crefs = identity.default_canonical_refs()?;
        Ok::<_, CanonicalRefsError>(crefs)
    })?;

@@ -354,9 +351,7 @@ pub fn run(
                    PushAction::PushRef { dst } => {
                        let identity = stored.identity()?;
                        let crefs = identity.canonical_refs_or_default(|| {
-
                            let mut crefs = CanonicalRefs::default();
-
                            crefs.extend([identity.doc().default_branch_rule()?]);
-
                            crefs.extend([identity.doc().default_branch_symbolic()?]);
+
                            let crefs = identity.default_canonical_refs()?;
                            Ok::<_, CanonicalRefsError>(crefs)
                        })?;
                        let rules = crefs.rules();
modified crates/radicle/src/identity/doc.rs
@@ -936,6 +936,21 @@ impl Doc {

        Ok(*cob.id)
    }
+

+
    /// Synthesize the canonical reference rules for the default branch and the
+
    /// symbolic reference to the default branch.
+
    ///
+
    /// The default branch is defined by the project payload of the [`Doc`] and
+
    /// the symbolic reference is `HEAD`.
+
    ///
+
    /// This method is useful for supplying the default rules when they are not
+
    /// defined by the [`Doc`].
+
    pub fn default_canonical_refs(&self) -> Result<CanonicalRefs, DefaultBranchError> {
+
        let mut crefs = CanonicalRefs::default();
+
        crefs.extend([self.default_branch_rule()?]);
+
        crefs.extend([self.default_branch_symbolic()?]);
+
        Ok(crefs)
+
    }
}

#[derive(Debug, Error)]
modified crates/radicle/src/storage/git.rs
@@ -14,7 +14,7 @@ use tempfile::TempDir;
use crate::git::canonical::Quorum;
use crate::identity::crefs::GetCanonicalRefs as _;
use crate::identity::doc::DocError;
-
use crate::identity::{CanonicalRefs, Doc, DocAt, RepoId};
+
use crate::identity::{Doc, DocAt, RepoId};
use crate::identity::{Identity, Project};
use crate::node::device::Device;
use crate::node::SyncedAt;
@@ -788,11 +788,7 @@ impl ReadRepository for Repository {
        let doc = self.identity_doc()?;

        let crefs = doc.canonical_refs_or_default(|| {
-
            let mut crefs = CanonicalRefs::default();
-
            crefs.extend([doc.default_branch_rule()?]);
-
            crefs.extend([doc.default_branch_symbolic()?]);
-

-
            Ok::<_, RepositoryError>(crefs)
+
            doc.default_canonical_refs().map_err(RepositoryError::from)
        })?;

        let Some(refname) = crefs.symbolic().get_head() else {