Make sure `preferredSeeds` has a default

If the user already has a config, the preferred seeds list is not
populated. We fix that here by giving it a default value.
This commit is contained in:
cloudhead 2024-01-19 16:30:24 +01:00
parent 5dbd9bb2a3
commit 0fbfbc5721
No known key found for this signature in database
5 changed files with 36 additions and 13 deletions

View File

@ -373,7 +373,7 @@ fn sync(
} }
// Connect to preferred seeds in case we aren't connected. // 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) { if !sessions.iter().any(|s| s.nid == seed.id) {
commands::rad_node::control::connect( commands::rad_node::control::connect(
node, node,
@ -421,7 +421,7 @@ fn sync(
)); ));
spinner.finish(); spinner.finish();
for seed in &config.preferred_seeds { for seed in config.preferred_seeds.iter() {
if replicas.contains(&seed.id) { if replicas.contains(&seed.id) {
return Ok(SyncResult::Synced { return Ok(SyncResult::Synced {
result: Some(config.public_explorer.url(seed.addr.host.to_string(), rid)), result: Some(config.public_explorer.url(seed.addr.host.to_string(), rid)),

View File

@ -10,7 +10,7 @@ use radicle::node::Handle as _;
use radicle::node::{Alias, DEFAULT_TIMEOUT}; use radicle::node::{Alias, DEFAULT_TIMEOUT};
use radicle::prelude::Id; use radicle::prelude::Id;
use radicle::profile; use radicle::profile;
use radicle::profile::Home; use radicle::profile::{Home, PreferredSeeds};
use radicle::storage::{ReadStorage, RemoteRepository}; use radicle::storage::{ReadStorage, RemoteRepository};
use radicle::test::fixtures; use radicle::test::fixtures;
@ -1213,7 +1213,7 @@ fn rad_init_sync_preferred() {
.spawn(); .spawn();
let bob = environment.profile(profile::Config { let bob = environment.profile(profile::Config {
preferred_seeds: vec![alice.address()], preferred_seeds: PreferredSeeds::from(vec![alice.address()]),
..config::profile("bob") ..config::profile("bob")
}); });
let mut bob = Node::new(bob).spawn(); let mut bob = Node::new(bob).spawn();
@ -1245,7 +1245,7 @@ fn rad_init_sync_timeout() {
.spawn(); .spawn();
let bob = environment.profile(profile::Config { let bob = environment.profile(profile::Config {
preferred_seeds: vec![alice.address()], preferred_seeds: PreferredSeeds::from(vec![alice.address()]),
..config::profile("bob") ..config::profile("bob")
}); });
let mut bob = Node::new(bob).spawn(); let mut bob = Node::new(bob).spawn();
@ -1821,7 +1821,7 @@ fn rad_patch_open_explore() {
.spawn(); .spawn();
let bob = environment.profile(profile::Config { let bob = environment.profile(profile::Config {
preferred_seeds: vec![seed.address()], preferred_seeds: PreferredSeeds::from(vec![seed.address()]),
..config::profile("bob") ..config::profile("bob")
}); });
let mut bob = Node::new(bob).spawn(); let mut bob = Node::new(bob).spawn();

View File

@ -23,8 +23,7 @@ use radicle::node::Database;
use radicle::node::{Alias, POLICIES_DB_FILE}; use radicle::node::{Alias, POLICIES_DB_FILE};
use radicle::node::{ConnectOptions, Handle as _}; use radicle::node::{ConnectOptions, Handle as _};
use radicle::profile; use radicle::profile;
use radicle::profile::Home; use radicle::profile::{Home, PreferredSeeds, Profile};
use radicle::profile::Profile;
use radicle::rad; use radicle::rad;
use radicle::storage::{ReadStorage as _, RemoteRepository as _, SignRepository as _}; use radicle::storage::{ReadStorage as _, RemoteRepository as _, SignRepository as _};
use radicle::test::fixtures; use radicle::test::fixtures;
@ -92,7 +91,7 @@ impl Environment {
node: node::Config::test(alias), node: node::Config::test(alias),
cli: cli::Config { hints: false }, cli: cli::Config { hints: false },
public_explorer: explorer::Explorer::default(), public_explorer: explorer::Explorer::default(),
preferred_seeds: vec![], preferred_seeds: PreferredSeeds::from(vec![]),
} }
} }

View File

@ -672,7 +672,7 @@ fn sync(
} }
let mut urls = Vec::new(); 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) { if replicated.contains(&seed.id) {
for resource in updated { for resource in updated {
let url = profile let url = profile

View File

@ -14,7 +14,7 @@ use std::io::Write;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::{fs, io, str::FromStr}; use std::{fs, io, str::FromStr};
use serde::Serialize; use serde::{Deserialize, Serialize};
use thiserror::Error; use thiserror::Error;
use crate::crypto::ssh::agent::Agent; use crate::crypto::ssh::agent::Agent;
@ -122,7 +122,7 @@ pub struct Config {
/// Preferred seeds. These seeds will be used for explorer links /// Preferred seeds. These seeds will be used for explorer links
/// and in other situations when a seed needs to be chosen. /// and in other situations when a seed needs to be chosen.
#[serde(default)] #[serde(default)]
pub preferred_seeds: Vec<node::config::ConnectAddress>, pub preferred_seeds: PreferredSeeds,
/// CLI configuration. /// CLI configuration.
#[serde(default)] #[serde(default)]
pub cli: cli::Config, pub cli: cli::Config,
@ -135,7 +135,7 @@ impl Config {
pub fn new(alias: Alias) -> Self { pub fn new(alias: Alias) -> Self {
Self { Self {
public_explorer: Explorer::default(), public_explorer: Explorer::default(),
preferred_seeds: vec![node::config::seeds::RADICLE_COMMUNITY_NODE.clone()], preferred_seeds: PreferredSeeds::default(),
cli: cli::Config::default(), cli: cli::Config::default(),
node: node::Config::new(alias), 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)] #[derive(Debug, Clone)]
pub struct Profile { pub struct Profile {
pub home: Home, pub home: Home,