Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
Make sure `preferredSeeds` has a default
cloudhead committed 2 years ago
commit 0fbfbc5721b09eb2b998640004cdcfae7b7e5486
parent 5dbd9bb2a32dca6aafbd2b4a50dd73d237ca025d
5 files changed +36 -13
modified radicle-cli/src/commands/init.rs
@@ -373,7 +373,7 @@ fn sync(
    }

    // Connect to preferred seeds in case we aren't connected.
-
    for seed in &config.preferred_seeds {
+
    for seed in config.preferred_seeds.iter() {
        if !sessions.iter().any(|s| s.nid == seed.id) {
            commands::rad_node::control::connect(
                node,
@@ -421,7 +421,7 @@ fn sync(
        ));
        spinner.finish();

-
        for seed in &config.preferred_seeds {
+
        for seed in config.preferred_seeds.iter() {
            if replicas.contains(&seed.id) {
                return Ok(SyncResult::Synced {
                    result: Some(config.public_explorer.url(seed.addr.host.to_string(), rid)),
modified radicle-cli/tests/commands.rs
@@ -10,7 +10,7 @@ use radicle::node::Handle as _;
use radicle::node::{Alias, DEFAULT_TIMEOUT};
use radicle::prelude::Id;
use radicle::profile;
-
use radicle::profile::Home;
+
use radicle::profile::{Home, PreferredSeeds};
use radicle::storage::{ReadStorage, RemoteRepository};
use radicle::test::fixtures;

@@ -1213,7 +1213,7 @@ fn rad_init_sync_preferred() {
        .spawn();

    let bob = environment.profile(profile::Config {
-
        preferred_seeds: vec![alice.address()],
+
        preferred_seeds: PreferredSeeds::from(vec![alice.address()]),
        ..config::profile("bob")
    });
    let mut bob = Node::new(bob).spawn();
@@ -1245,7 +1245,7 @@ fn rad_init_sync_timeout() {
        .spawn();

    let bob = environment.profile(profile::Config {
-
        preferred_seeds: vec![alice.address()],
+
        preferred_seeds: PreferredSeeds::from(vec![alice.address()]),
        ..config::profile("bob")
    });
    let mut bob = Node::new(bob).spawn();
@@ -1821,7 +1821,7 @@ fn rad_patch_open_explore() {
        .spawn();

    let bob = environment.profile(profile::Config {
-
        preferred_seeds: vec![seed.address()],
+
        preferred_seeds: PreferredSeeds::from(vec![seed.address()]),
        ..config::profile("bob")
    });
    let mut bob = Node::new(bob).spawn();
modified radicle-node/src/test/environment.rs
@@ -23,8 +23,7 @@ use radicle::node::Database;
use radicle::node::{Alias, POLICIES_DB_FILE};
use radicle::node::{ConnectOptions, Handle as _};
use radicle::profile;
-
use radicle::profile::Home;
-
use radicle::profile::Profile;
+
use radicle::profile::{Home, PreferredSeeds, Profile};
use radicle::rad;
use radicle::storage::{ReadStorage as _, RemoteRepository as _, SignRepository as _};
use radicle::test::fixtures;
@@ -92,7 +91,7 @@ impl Environment {
            node: node::Config::test(alias),
            cli: cli::Config { hints: false },
            public_explorer: explorer::Explorer::default(),
-
            preferred_seeds: vec![],
+
            preferred_seeds: PreferredSeeds::from(vec![]),
        }
    }

modified radicle-remote-helper/src/push.rs
@@ -672,7 +672,7 @@ fn sync(
    }
    let mut urls = Vec::new();

-
    for seed in &profile.config.preferred_seeds {
+
    for seed in profile.config.preferred_seeds.iter() {
        if replicated.contains(&seed.id) {
            for resource in updated {
                let url = profile
modified radicle/src/profile.rs
@@ -14,7 +14,7 @@ use std::io::Write;
use std::path::{Path, PathBuf};
use std::{fs, io, str::FromStr};

-
use serde::Serialize;
+
use serde::{Deserialize, Serialize};
use thiserror::Error;

use crate::crypto::ssh::agent::Agent;
@@ -122,7 +122,7 @@ pub struct Config {
    /// Preferred seeds. These seeds will be used for explorer links
    /// and in other situations when a seed needs to be chosen.
    #[serde(default)]
-
    pub preferred_seeds: Vec<node::config::ConnectAddress>,
+
    pub preferred_seeds: PreferredSeeds,
    /// CLI configuration.
    #[serde(default)]
    pub cli: cli::Config,
@@ -135,7 +135,7 @@ impl Config {
    pub fn new(alias: Alias) -> Self {
        Self {
            public_explorer: Explorer::default(),
-
            preferred_seeds: vec![node::config::seeds::RADICLE_COMMUNITY_NODE.clone()],
+
            preferred_seeds: PreferredSeeds::default(),
            cli: cli::Config::default(),
            node: node::Config::new(alias),
        }
@@ -189,6 +189,30 @@ impl Config {
    }
}

+
#[derive(Debug, Clone, Serialize, Deserialize)]
+
#[serde(transparent)]
+
pub struct PreferredSeeds(Vec<node::config::ConnectAddress>);
+

+
impl From<Vec<node::config::ConnectAddress>> for PreferredSeeds {
+
    fn from(value: Vec<node::config::ConnectAddress>) -> Self {
+
        Self(value)
+
    }
+
}
+

+
impl Default for PreferredSeeds {
+
    fn default() -> Self {
+
        Self(vec![node::config::seeds::RADICLE_COMMUNITY_NODE.clone()])
+
    }
+
}
+

+
impl std::ops::Deref for PreferredSeeds {
+
    type Target = Vec<node::config::ConnectAddress>;
+

+
    fn deref(&self) -> &Self::Target {
+
        &self.0
+
    }
+
}
+

#[derive(Debug, Clone)]
pub struct Profile {
    pub home: Home,