Radish alpha
r
rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
Radicle web interface
Radicle
Git
Fix pinning via `rad config` requiring restart of httpd
Archived did:key:z6Mkm8ky...cKu8 opened 3 months ago

Node config was only previously loaded on process start. This is a clumsy refresh mechanism that ensures httpd can be left running after a rad config action.

2 files changed +21 -3 ebe4e426 8ce13844
modified radicle-httpd/src/api/v1/delegates.rs
@@ -5,6 +5,7 @@ use axum::{Json, Router};

use radicle::identity::Did;
use radicle::storage::ReadStorage;
+
use radicle::Profile;

use crate::api::error::Error;
use crate::api::query::{PaginationQuery, RepoQuery};
@@ -32,7 +33,15 @@ async fn delegates_repos_handler(
    let page = page.unwrap_or(0);
    let per_page = per_page.unwrap_or(10);
    let storage = &ctx.profile.storage;
-
    let pinned = &ctx.profile.config.web.pinned;
+
    let fresh_profile = if matches!(show, RepoQuery::Pinned) {
+
        Some(Profile::load()?)
+
    } else {
+
        None
+
    };
+
    let pinned = fresh_profile
+
        .as_ref()
+
        .map(|p| &p.config.web.pinned)
+
        .unwrap_or(&ctx.profile.config.web.pinned);
    let mut repos = match show {
        RepoQuery::All => storage
            .repositories()?
modified radicle-httpd/src/api/v1/repos.rs
@@ -15,6 +15,7 @@ use radicle::cob::{issue::cache::Issues as _, patch::cache::Patches as _};
use radicle::identity::RepoId;
use radicle::node::{AliasStore, NodeId};
use radicle::storage::{ReadRepository, ReadStorage, RemoteRepository};
+
use radicle::Profile;

use crate::api;
use crate::api::error::Error;
@@ -61,12 +62,20 @@ async fn repo_root_handler(
        per_page,
    } = qs;
    let page = page.unwrap_or(0);
+
    let fresh_profile = if matches!(show, RepoQuery::Pinned) {
+
        Some(Profile::load()?)
+
    } else {
+
        None
+
    };
+
    let pinned = fresh_profile
+
        .as_ref()
+
        .map(|p| &p.config.web.pinned)
+
        .unwrap_or(&ctx.profile.config.web.pinned);
    let per_page = per_page.unwrap_or_else(|| match show {
-
        RepoQuery::Pinned => ctx.profile.config.web.pinned.repositories.len(),
+
        RepoQuery::Pinned => pinned.repositories.len(),
        _ => 10,
    });
    let storage = &ctx.profile.storage;
-
    let pinned = &ctx.profile.config.web.pinned;
    let policies = ctx.profile.policies()?;

    let mut repos = match show {