rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwood2ddda3841ca2a661046d3b5147db1a249a5b2a32
{
"request": "trigger",
"version": 1,
"event_type": "patch",
"repository": {
"id": "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5",
"name": "heartwood",
"description": "Radicle Heartwood Protocol & Stack",
"private": false,
"default_branch": "master",
"delegates": [
"did:key:z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT",
"did:key:z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW",
"did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
"did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz"
]
},
"action": "Updated",
"patch": {
"id": "82466760713048029678b05a4b45ec47a09e8555",
"author": {
"id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
"alias": "lorenz"
},
"title": "node: Remove unnecessary re-exports and clean up `use`s",
"state": {
"status": "open",
"conflicts": []
},
"before": "027de89cdb93f9f08e46ab76ab38c62c4005724a",
"after": "2ddda3841ca2a661046d3b5147db1a249a5b2a32",
"commits": [
"2ddda3841ca2a661046d3b5147db1a249a5b2a32",
"7dd09750cc8bea8fc5ce4bb4e409d4214b904a06",
"023ac60c6bd07e139952d0dfbd3e2e2952120727"
],
"target": "027de89cdb93f9f08e46ab76ab38c62c4005724a",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "82466760713048029678b05a4b45ec47a09e8555",
"author": {
"id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
"alias": "lorenz"
},
"description": "## Remove re-export `\u2026::node::PROTOCOL_VERSION`\n\nIt appears that `radicle_node::PROTOCOL_VERSION` (which is a re-export\nof `radicle::node::PROTOCOL_VERSION` is the only symbol exported from\n`radicle-node` that is used in `radicle-cli` (except tests).\n\nSince `radicle-cli` depends on `radicle` anyway, it is questionable how\nmuch sense that re-export and use from a binary crate (!) makes.\n\nRemove the re-export.\n\n## node: Clean up `use`s\n\nThe re-exports from other crates got quite confusing.\n\nRemove all `pub use` from `radicle-node`, and rewrite all `use`s\naccordingly.\n\nThe result is a slight increase in the number of `use` lines, but with\nimproved clarity on which type is actually imported.",
"base": "027de89cdb93f9f08e46ab76ab38c62c4005724a",
"oid": "7dd09750cc8bea8fc5ce4bb4e409d4214b904a06",
"timestamp": 1784293765
},
{
"id": "6c7c1d6b0d47463edf93cbdc997c5d960bc7297c",
"author": {
"id": "did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
"alias": "lorenz"
},
"description": "node/test: Clean up\n\nAdjusting visibility and conditional compilation for the modules in\n`radicle_node::test` allows some dead code elimination.",
"base": "027de89cdb93f9f08e46ab76ab38c62c4005724a",
"oid": "2ddda3841ca2a661046d3b5147db1a249a5b2a32",
"timestamp": 1784300133
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "6c65f055-cac2-49e1-acbd-9e485e74ffac"
},
"info_url": "https://cci.rad.levitte.org//6c65f055-cac2-49e1-acbd-9e485e74ffac.html"
}
Started at: 2026-07-17 16:56:27.094343+02:00
Commands:
$ rad clone rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 .
✓ Creating checkout in ./...
✓ Remote cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT added
✓ Remote-tracking branch cloudhead@z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT/master created for z6MksFqXN3Yhqk8pTJdUGLwATkRfQvwZXPqR2qMEhbS9wzpT
✓ Remote cloudhead@z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW added
✓ Remote-tracking branch cloudhead@z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW/master created for z6MktaNvN1KVFMkSRAiN4qK5yvX1zuEEaseeX5sffhzPZRZW
✓ Remote fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM added
✓ Remote-tracking branch fintohaps@z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM/master created for z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM
✓ Remote erikli@z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz added
✓ Remote-tracking branch erikli@z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz/master created for z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz
✓ Remote lorenz@z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz added
✓ Remote-tracking branch lorenz@z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz/master created for z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz
✓ Repository successfully cloned under /opt/radcis/ci.rad.levitte.org/cci/state/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 187 issues · 43 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout 82466760713048029678b05a4b45ec47a09e8555
✓ Switched to branch patch/8246676 at revision 6c7c1d6
✓ Branch patch/8246676 setup to track rad/patches/82466760713048029678b05a4b45ec47a09e8555
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout 2ddda3841ca2a661046d3b5147db1a249a5b2a32
HEAD is now at 2ddda384 node/test: Clean up
Exit code: 0
$ rad patch show 82466760713048029678b05a4b45ec47a09e8555 -p
╭────────────────────────────────────────────────────────────────────────────────╮
│ Title node: Remove unnecessary re-exports and clean up `use`s │
│ Patch 82466760713048029678b05a4b45ec47a09e8555 │
│ Author lorenz z6MkkPv…WX5sTEz │
│ Head 2ddda3841ca2a661046d3b5147db1a249a5b2a32 │
│ Base 027de89cdb93f9f08e46ab76ab38c62c4005724a │
│ Branches patch/8246676 │
│ Commits ahead 3, behind 0 │
│ Status open │
│ │
│ ## Remove re-export `…::node::PROTOCOL_VERSION` │
│ │
│ It appears that `radicle_node::PROTOCOL_VERSION` (which is a re-export │
│ of `radicle::node::PROTOCOL_VERSION` is the only symbol exported from │
│ `radicle-node` that is used in `radicle-cli` (except tests). │
│ │
│ Since `radicle-cli` depends on `radicle` anyway, it is questionable how │
│ much sense that re-export and use from a binary crate (!) makes. │
│ │
│ Remove the re-export. │
│ │
│ ## node: Clean up `use`s │
│ │
│ The re-exports from other crates got quite confusing. │
│ │
│ Remove all `pub use` from `radicle-node`, and rewrite all `use`s │
│ accordingly. │
│ │
│ The result is a slight increase in the number of `use` lines, but with │
│ improved clarity on which type is actually imported. │
├────────────────────────────────────────────────────────────────────────────────┤
│ 2ddda38 node/test: Clean up │
│ 7dd0975 node: Clean up `use`s │
│ 023ac60 node: Remove re-export `…::node::PROTOCOL_VERSION` │
├────────────────────────────────────────────────────────────────────────────────┤
│ ● Revision 8246676 @ 027de89..7dd0975 by lorenz z6MkkPv…WX5sTEz 1 hour ago │
│ ↑ Revision 6c7c1d6 @ 027de89..2ddda38 by lorenz z6MkkPv…WX5sTEz 56 seconds ago │
╰────────────────────────────────────────────────────────────────────────────────╯
commit 2ddda3841ca2a661046d3b5147db1a249a5b2a32
Author: Lorenz Leutgeb <lorenz.leutgeb@radicle.dev>
Date: Fri Jul 17 16:37:25 2026 +0200
node/test: Clean up
Adjusting visibility and conditional compilation for the modules in
`radicle_node::test` allows some dead code elimination.
diff --git a/crates/radicle-node/src/test.rs b/crates/radicle-node/src/test.rs
index f8f0d403d..4ce2b7fb8 100644
--- a/crates/radicle-node/src/test.rs
+++ b/crates/radicle-node/src/test.rs
@@ -1,7 +1,10 @@
-pub mod gossip;
-pub mod handle;
+#[cfg(test)]
+pub(crate) mod gossip;
+#[cfg(test)]
+pub(crate) mod handle;
+#[cfg(any(test, feature = "test"))]
pub mod node;
-pub mod peer;
-pub mod simulator;
-
-use radicle::test::*;
+#[cfg(test)]
+pub(crate) mod peer;
+#[cfg(test)]
+pub(crate) mod simulator;
diff --git a/crates/radicle-node/src/test/gossip.rs b/crates/radicle-node/src/test/gossip.rs
index aa1c0b58d..62869cdda 100644
--- a/crates/radicle-node/src/test/gossip.rs
+++ b/crates/radicle-node/src/test/gossip.rs
@@ -4,10 +4,9 @@ use radicle::node;
use radicle::node::PROTOCOL_VERSION;
use radicle::node::UserAgent;
use radicle::node::device::Device;
+use radicle::test::arbitrary;
use radicle::test::fixtures::r#gen;
-use crate::test::arbitrary;
-
pub fn messages(count: usize, now: LocalTime, delta: LocalDuration) -> Vec<Message> {
let mut rng = fastrand::Rng::new();
let mut msgs = Vec::new();
diff --git a/crates/radicle-node/src/test/peer.rs b/crates/radicle-node/src/test/peer.rs
index 20fc6962c..c6da99ca6 100644
--- a/crates/radicle-node/src/test/peer.rs
+++ b/crates/radicle-node/src/test/peer.rs
@@ -33,14 +33,12 @@ use radicle::node::routing::Store as _;
use radicle::node::{Address, Event, NodeId, Timestamp};
use radicle::node::{Alias, ConnectOptions, address};
use radicle::rad;
-use radicle::storage::git::transport::remote;
+use radicle::storage::WriteStorage;
use radicle::storage::refs;
use radicle::storage::refs::{RefsAt, SignedRefs};
use radicle::storage::{ReadRepository, RemoteRepository};
-use radicle::storage::{RemoteId, WriteStorage};
-
-use crate::test::storage::MockStorage;
-use crate::test::{arbitrary, fixtures};
+use radicle::test::storage::MockStorage;
+use radicle::test::{arbitrary, fixtures};
/// Service instantiation used for testing.
pub type Service<S> = service::Service<Database, S, MockSigner>;
@@ -287,14 +285,6 @@ where
.unwrap()
}
- pub fn git_url(&self, repo: RepoId, namespace: Option<RemoteId>) -> remote::Url {
- remote::Url {
- node: *self.nid(),
- repo,
- namespace,
- }
- }
-
pub fn receive(&mut self, peer: NodeId, msg: Message) -> &mut Self {
self.service.received_message(peer, msg);
self
diff --git a/crates/radicle-node/src/test/simulator.rs b/crates/radicle-node/src/test/simulator.rs
index 071de7afc..9cf72594a 100644
--- a/crates/radicle-node/src/test/simulator.rs
+++ b/crates/radicle-node/src/test/simulator.rs
@@ -22,15 +22,12 @@ use radicle::node::NodeId;
use radicle::node::events::Event;
use radicle::storage::Namespaces;
use radicle::storage::{ReadRepository, WriteStorage};
-
-use crate::test::arbitrary;
+use radicle::test::arbitrary;
use super::peer::Peer;
/// Minimum latency between peers.
pub const MIN_LATENCY: LocalDuration = LocalDuration::from_millis(1);
-/// Maximum number of events buffered per peer.
-pub const MAX_EVENTS: usize = 2048;
/// Simulated service input.
#[derive(Debug, Clone)]
@@ -239,11 +236,6 @@ where
.all(|(_, s)| matches!(s.input, Input::Wake))
}
- /// Get a node's emitted events.
- pub fn events(&mut self, node: &NodeId) -> impl Iterator<Item = Event> + '_ {
- self.events.entry(*node).or_default().drain(..)
- }
-
/// Get all messages received by nodes during the simulation.
pub fn messages(&mut self) -> &[(NodeId, NodeId, Message)] {
&self.messages
@@ -277,14 +269,6 @@ where
}
}
- /// Process one scheduled input from the inbox, using the provided peers.
- /// This function should be called until it returns `false`, or some desired state is reached.
- /// Returns `true` if there are more messages to process.
- pub fn step<'a>(&mut self, peers: impl IntoIterator<Item = &'a mut Peer<S>>) -> bool {
- let mut nodes: BTreeMap<_, _> = peers.into_iter().map(|p| (*p.nid(), p)).collect();
- self.step_(&mut nodes)
- }
-
fn step_(&mut self, nodes: &mut BTreeMap<NodeId, &mut Peer<S>>) -> bool {
if !self.opts.latency.is_empty() {
// Configure latencies.
commit 7dd09750cc8bea8fc5ce4bb4e409d4214b904a06
Author: Lorenz Leutgeb <lorenz.leutgeb@radicle.dev>
Date: Fri Jul 17 14:41:49 2026 +0200
node: Clean up `use`s
The re-exports from other crates got quite confusing.
Remove all `pub use` from `radicle-node`, and rewrite all `use`s
accordingly.
The result is a slight increase in the number of `use` lines, but with
improved clarity on which type is actually imported.
diff --git a/crates/radicle-node/src/control.rs b/crates/radicle-node/src/control.rs
index dd62bf5da..bdd7b53a0 100644
--- a/crates/radicle-node/src/control.rs
+++ b/crates/radicle-node/src/control.rs
@@ -5,18 +5,18 @@ use std::io::prelude::*;
use std::path::PathBuf;
use std::{io, net, time};
-use radicle::storage::refs;
#[cfg(unix)]
use std::os::unix::net::{UnixListener, UnixStream};
#[cfg(windows)]
use uds_windows::{UnixListener, UnixStream};
+use radicle::identity::RepoId;
use radicle::node::Handle;
+use radicle::node::NodeId;
+use radicle::node::{Command, CommandResult};
+use radicle::storage::refs;
use serde_json as json;
-use crate::identity::RepoId;
-use crate::node::NodeId;
-use crate::node::{Command, CommandResult};
use crate::runtime;
use crate::runtime::thread;
@@ -30,13 +30,13 @@ pub enum Error {
#[error("invalid socket path specified: {0}")]
InvalidPath(PathBuf),
#[error("node: {0}")]
- Node(#[from] runtime::HandleError),
+ Node(#[from] runtime::handle::Error),
}
/// Listen for commands on the control socket, and process them.
pub fn listen<E, H>(listener: UnixListener, handle: H) -> Result<(), Error>
where
- H: Handle<Error = runtime::HandleError> + 'static,
+ H: Handle<Error = runtime::handle::Error> + 'static,
H::Sessions: serde::Serialize,
CommandResult<E>: From<H::Event>,
E: serde::Serialize,
@@ -73,14 +73,14 @@ enum CommandError {
#[error("(de)serialization failed: {0}")]
Serialization(#[from] json::Error),
#[error("runtime error: {0}")]
- Runtime(#[from] runtime::HandleError),
+ Runtime(#[from] runtime::handle::Error),
#[error("i/o error: {0}")]
Io(#[from] io::Error),
}
fn command<E, H>(stream: &UnixStream, mut handle: H) -> Result<(), CommandError>
where
- H: Handle<Error = runtime::HandleError> + 'static,
+ H: Handle<Error = runtime::handle::Error> + 'static,
H::Sessions: serde::Serialize,
CommandResult<E>: From<H::Event>,
E: serde::Serialize,
@@ -257,7 +257,7 @@ where
Ok(())
}
-fn fetch<W: Write, H: Handle<Error = runtime::HandleError>>(
+fn fetch<W: Write, H: Handle<Error = runtime::handle::Error>>(
id: RepoId,
node: NodeId,
timeout: time::Duration,
@@ -278,14 +278,16 @@ fn fetch<W: Write, H: Handle<Error = runtime::HandleError>>(
#[cfg(test)]
mod tests {
- use std::io::prelude::*;
+ use super::*;
+
use std::thread;
- use super::*;
- use crate::identity::RepoId;
- use crate::node::Handle;
- use crate::node::policy::Scope;
- use crate::node::{Alias, Node, NodeId};
+ use radicle::identity::RepoId;
+ use radicle::node::Handle;
+ use radicle::node::policy::Scope;
+ use radicle::node::{Alias, Node, NodeId};
+ use radicle::test::arbitrary;
+
use crate::test;
#[test]
@@ -293,7 +295,7 @@ mod tests {
let tmp = tempfile::tempdir().unwrap();
let handle = test::handle::Handle::default();
let socket = tmp.path().join("alice.sock");
- let rids = test::arbitrary::set::<RepoId>(1..3);
+ let rids = arbitrary::set::<RepoId>(1..3);
let listener = UnixListener::bind(&socket).unwrap();
let nid = handle.nid().unwrap();
@@ -342,8 +344,8 @@ mod tests {
fn test_seed_unseed() {
let tmp = tempfile::tempdir().unwrap();
let socket = tmp.path().join("node.sock");
- let proj = test::arbitrary::r#gen::<RepoId>(1);
- let peer = test::arbitrary::r#gen::<NodeId>(1);
+ let proj = arbitrary::r#gen::<RepoId>(1);
+ let peer = arbitrary::r#gen::<NodeId>(1);
let listener = UnixListener::bind(&socket).unwrap();
let mut handle = Node::new(&socket);
diff --git a/crates/radicle-node/src/lib.rs b/crates/radicle-node/src/lib.rs
index 28564362e..3427e8606 100644
--- a/crates/radicle-node/src/lib.rs
+++ b/crates/radicle-node/src/lib.rs
@@ -4,11 +4,10 @@
#![allow(clippy::byte_char_slices)]
pub mod fingerprint;
-pub mod reactor;
+pub(crate) mod reactor;
pub mod runtime;
mod control;
-pub(crate) use radicle_protocol::service;
mod wire;
mod worker;
@@ -17,16 +16,12 @@ pub mod test;
#[cfg(test)]
pub mod tests;
+extern crate radicle_fetch as fetch;
extern crate radicle_localtime as localtime;
+extern crate radicle_protocol as protocol;
use radicle::version::Version;
-pub use localtime::{LocalDuration, LocalTime};
-pub use radicle::node::Link;
-pub use radicle::prelude::Timestamp;
-pub use radicle::{collections, crypto, git, identity, node, profile, rad, storage};
-pub use runtime::Runtime;
-
/// Node version.
pub const VERSION: Version = Version {
name: env!("CARGO_PKG_NAME"),
@@ -34,14 +29,3 @@ pub const VERSION: Version = Version {
version: env!("RADICLE_VERSION"),
timestamp: env!("SOURCE_DATE_EPOCH"),
};
-
-pub mod prelude {
- pub use crate::crypto::{PublicKey, Signature};
- pub use crate::identity::{Did, RepoId};
- pub use crate::node::{Address, Event, NodeId, config::Network};
- pub use crate::service::filter::Filter;
- pub use crate::service::{DisconnectReason, Message};
- pub use crate::storage::WriteStorage;
- pub use crate::storage::refs::Refs;
- pub use crate::{LocalDuration, LocalTime, Timestamp};
-}
diff --git a/crates/radicle-node/src/main.rs b/crates/radicle-node/src/main.rs
index c758f0477..cf089f5e7 100644
--- a/crates/radicle-node/src/main.rs
+++ b/crates/radicle-node/src/main.rs
@@ -6,12 +6,12 @@ use std::str::FromStr;
use thiserror::Error;
+use radicle::crypto::ssh::keystore::{Keystore, MemorySigner};
use radicle::node::device::Device;
use radicle::profile;
-use radicle_node::crypto::ssh::keystore::{Keystore, MemorySigner};
use radicle_node::fingerprint::{Fingerprint, FingerprintVerification};
-use radicle_node::{Runtime, VERSION};
+use radicle_node::{VERSION, runtime::Runtime};
use radicle_signals as signals;
const HELP_MSG: &str = r#"
diff --git a/crates/radicle-node/src/reactor.rs b/crates/radicle-node/src/reactor.rs
index e23435000..b642e1ae6 100644
--- a/crates/radicle-node/src/reactor.rs
+++ b/crates/radicle-node/src/reactor.rs
@@ -24,7 +24,7 @@ use crate::wire;
pub(crate) use self::controller::{ControlMessage, Controller};
pub(crate) use listener::Listener;
-pub use session::{NoiseSession, ProtocolArtifact, Socks5Session};
+pub(crate) use session::{NoiseSession, ProtocolArtifact, Socks5Session};
pub(crate) use token::{Token, Tokens};
pub(crate) use transport::{SessionEvent, Transport};
diff --git a/crates/radicle-node/src/reactor/token.rs b/crates/radicle-node/src/reactor/token.rs
index 5523658bb..932d68240 100644
--- a/crates/radicle-node/src/reactor/token.rs
+++ b/crates/radicle-node/src/reactor/token.rs
@@ -1,4 +1,4 @@
-pub use mio::Token;
+pub(crate) use mio::Token;
pub const WAKER: Token = Token(0);
diff --git a/crates/radicle-node/src/runtime.rs b/crates/radicle-node/src/runtime.rs
index 6f142b704..7c07df699 100644
--- a/crates/radicle-node/src/runtime.rs
+++ b/crates/radicle-node/src/runtime.rs
@@ -13,34 +13,32 @@ use std::os::unix::net::UnixListener;
use uds_windows::UnixListener;
use cyphernet::Ecdh;
+use handle::Handle;
+use localtime::LocalTime;
+use protocol::service;
+use protocol::service::gossip;
use radicle::cob::migrate;
use radicle::crypto;
-use radicle::node::device::Device;
-use radicle_signals::Signal;
-use thiserror::Error;
-
use radicle::node;
use radicle::node::Event;
use radicle::node::UserAgent;
use radicle::node::address;
use radicle::node::address::Store as _;
+use radicle::node::device::Device;
+use radicle::node::events::Emitter;
use radicle::node::notifications;
use radicle::node::policy::config as policy;
+use radicle::node::{NodeId, routing};
use radicle::profile::Home;
use radicle::{Storage, cob, git, storage};
+use radicle_signals::Signal;
+use thiserror::Error;
use crate::control;
-use crate::node::{NodeId, routing};
use crate::reactor;
use crate::reactor::Reactor;
-use crate::service::gossip;
use crate::wire::Wire;
use crate::worker;
-use crate::{LocalTime, service};
-
-pub use handle::Error as HandleError;
-pub use handle::Handle;
-pub use node::events::Emitter;
/// Maximum pending worker tasks allowed.
pub const MAX_PENDING_TASKS: usize = 1024;
diff --git a/crates/radicle-node/src/runtime/handle.rs b/crates/radicle-node/src/runtime/handle.rs
index 5cf13ad6a..9ca497d54 100644
--- a/crates/radicle-node/src/runtime/handle.rs
+++ b/crates/radicle-node/src/runtime/handle.rs
@@ -11,25 +11,25 @@ use std::os::unix::net::UnixStream;
#[cfg(windows)]
use uds_windows::UnixStream;
+use protocol::service;
+use protocol::service::QueryState;
+use protocol::wire::StreamId;
use radicle::crypto::PublicKey;
+use radicle::identity::RepoId;
use radicle::node::events::{Event, Events};
use radicle::node::policy;
+use radicle::node::{Alias, Command, FetchResult};
use radicle::node::{Config, NodeId};
use radicle::node::{ConnectOptions, ConnectResult, Seeds};
+use radicle::profile::Home;
use radicle::storage::refs;
+use radicle::storage::refs::RefsAt;
use serde_json::json;
use thiserror::Error;
-use crate::identity::RepoId;
-use crate::node::{Alias, Command, FetchResult};
-use crate::profile::Home;
use crate::reactor;
use crate::runtime::Emitter;
-use crate::service;
-use crate::service::QueryState;
-use crate::storage::refs::RefsAt;
use crate::wire;
-use crate::wire::StreamId;
use crate::worker::TaskResult;
/// An error resulting from a handle method.
@@ -409,8 +409,8 @@ impl radicle::node::Handle for Handle {
mod debug {
//! Serialization formats for the output of [`Handle::debug`] output.
- use radicle_protocol::fetcher;
- use radicle_protocol::fetcher::FetcherState;
+ use protocol::fetcher;
+ use protocol::fetcher::FetcherState;
use serde::Serialize;
use super::{NodeId, RefsAt, RepoId};
diff --git a/crates/radicle-node/src/runtime/thread.rs b/crates/radicle-node/src/runtime/thread.rs
index f2df8b991..68ddb724a 100644
--- a/crates/radicle-node/src/runtime/thread.rs
+++ b/crates/radicle-node/src/runtime/thread.rs
@@ -1,8 +1,6 @@
use std::thread;
-pub use thread::*;
-
-use radicle::prelude::NodeId;
+use radicle::node::NodeId;
/// Spawn an OS thread.
pub fn spawn<D, F, T>(nid: &NodeId, label: D, f: F) -> thread::JoinHandle<T>
diff --git a/crates/radicle-node/src/test.rs b/crates/radicle-node/src/test.rs
index 7a828f570..f8f0d403d 100644
--- a/crates/radicle-node/src/test.rs
+++ b/crates/radicle-node/src/test.rs
@@ -4,6 +4,4 @@ pub mod node;
pub mod peer;
pub mod simulator;
-pub use radicle::assert_matches;
-pub use radicle::test::*;
-pub use radicle_log::test as logger;
+use radicle::test::*;
diff --git a/crates/radicle-node/src/test/gossip.rs b/crates/radicle-node/src/test/gossip.rs
index e9d156e54..aa1c0b58d 100644
--- a/crates/radicle-node/src/test/gossip.rs
+++ b/crates/radicle-node/src/test/gossip.rs
@@ -1,3 +1,5 @@
+use localtime::{LocalDuration, LocalTime};
+use protocol::service::message::{InventoryAnnouncement, Message, NodeAnnouncement};
use radicle::node;
use radicle::node::PROTOCOL_VERSION;
use radicle::node::UserAgent;
@@ -5,10 +7,6 @@ use radicle::node::device::Device;
use radicle::test::fixtures::r#gen;
use crate::test::arbitrary;
-use crate::{
- prelude::{LocalDuration, LocalTime, Message},
- service::message::{InventoryAnnouncement, NodeAnnouncement},
-};
pub fn messages(count: usize, now: LocalTime, delta: LocalDuration) -> Vec<Message> {
let mut rng = fastrand::Rng::new();
diff --git a/crates/radicle-node/src/test/handle.rs b/crates/radicle-node/src/test/handle.rs
index 8c1ab5909..d4cfc58e0 100644
--- a/crates/radicle-node/src/test/handle.rs
+++ b/crates/radicle-node/src/test/handle.rs
@@ -5,13 +5,11 @@ use std::time;
use radicle::crypto::PublicKey;
use radicle::git::Oid;
-use radicle::storage::refs::{self, RefsAt};
-
-use crate::identity::RepoId;
-use crate::node::{Alias, Config, ConnectOptions, ConnectResult, Event, FetchResult, Seeds};
-use crate::runtime::HandleError;
+use radicle::identity::RepoId;
use radicle::node::NodeId;
use radicle::node::policy;
+use radicle::node::{Alias, Config, ConnectOptions, ConnectResult, Event, FetchResult, Seeds};
+use radicle::storage::refs::{self, RefsAt};
#[derive(Default, Clone)]
pub struct Handle {
@@ -22,7 +20,7 @@ pub struct Handle {
}
impl radicle::node::Handle for Handle {
- type Error = HandleError;
+ type Error = crate::runtime::handle::Error;
type Sessions = Vec<radicle::node::Session>;
type Events = Vec<Self::Event>;
type Event = Result<Event, Self::Error>;
diff --git a/crates/radicle-node/src/test/node.rs b/crates/radicle-node/src/test/node.rs
index 3591bc8a6..178f1234e 100644
--- a/crates/radicle-node/src/test/node.rs
+++ b/crates/radicle-node/src/test/node.rs
@@ -10,10 +10,7 @@ use std::{
time::Duration,
};
-use crate::node::NodeId;
-use crate::node::device::Device;
-use crate::storage::git::transport;
-use crate::{Runtime, runtime, runtime::Handle, service};
+use protocol::service;
use radicle::Storage;
use radicle::cob;
use radicle::cob::issue;
@@ -26,7 +23,9 @@ use radicle::git::fmt::refname;
use radicle::identity::{RepoId, Visibility};
use radicle::node::Config;
use radicle::node::Event;
+use radicle::node::NodeId;
use radicle::node::config::ConnectAddress;
+use radicle::node::device::Device;
use radicle::node::policy::store as policy;
use radicle::node::seed::Store as _;
use radicle::node::{self, Alias};
@@ -34,9 +33,12 @@ use radicle::node::{ConnectOptions, Handle as _};
use radicle::node::{Database, POLICIES_DB_FILE};
use radicle::profile::{Home, Profile, env};
use radicle::rad;
+use radicle::storage::git::transport;
use radicle::storage::{ReadStorage as _, RemoteRepository as _, SignRepository as _};
use radicle::test::fixtures;
+use crate::runtime::{self, Runtime, handle::Handle};
+
/// A node that can be run.
pub struct Node<G> {
pub id: NodeId,
diff --git a/crates/radicle-node/src/test/peer.rs b/crates/radicle-node/src/test/peer.rs
index e46ed88d7..20fc6962c 100644
--- a/crates/radicle-node/src/test/peer.rs
+++ b/crates/radicle-node/src/test/peer.rs
@@ -4,43 +4,43 @@ use std::net;
use std::ops::{Deref, DerefMut};
use std::str::FromStr;
+use localtime::{LocalDuration, LocalTime};
use log::*;
-
+use protocol::bounded::BoundedVec;
+use protocol::service;
+use protocol::service::io::Io;
+use protocol::service::message::*;
+use protocol::service::*;
+use protocol::wire::MessageType;
use radicle::Storage;
use radicle::crypto::Signer as _;
+use radicle::crypto::test::signer::MockSigner;
use radicle::git::Oid;
+use radicle::identity::RepoId;
use radicle::identity::Visibility;
+use radicle::node;
use radicle::node::Database;
+use radicle::node::Link;
+use radicle::node::PROTOCOL_VERSION;
use radicle::node::UserAgent;
use radicle::node::address::Store as _;
use radicle::node::device::Device;
+use radicle::node::events::Emitter;
+use radicle::node::events::Events;
+use radicle::node::policy::config as policy;
+use radicle::node::policy::{Scope, SeedingPolicy};
+use radicle::node::routing::Store as _;
+use radicle::node::{Address, Event, NodeId, Timestamp};
use radicle::node::{Alias, ConnectOptions, address};
use radicle::rad;
+use radicle::storage::git::transport::remote;
use radicle::storage::refs;
use radicle::storage::refs::{RefsAt, SignedRefs};
use radicle::storage::{ReadRepository, RemoteRepository};
+use radicle::storage::{RemoteId, WriteStorage};
-use crate::crypto::test::signer::MockSigner;
-use crate::identity::RepoId;
-use crate::node;
-use crate::node::routing::Store as _;
-use crate::prelude::*;
-use crate::runtime::Emitter;
-use crate::service;
-use crate::service::io::Io;
-use crate::service::message::*;
-use crate::service::*;
-use crate::storage::git::transport::remote;
-use crate::storage::{RemoteId, WriteStorage};
use crate::test::storage::MockStorage;
use crate::test::{arbitrary, fixtures};
-use crate::wire::MessageType;
-use crate::{Link, LocalDuration, LocalTime};
-use radicle::node::PROTOCOL_VERSION;
-use radicle::node::events::Events;
-use radicle::node::policy::config as policy;
-use radicle::node::policy::{Scope, SeedingPolicy};
-use radicle_protocol::bounded::BoundedVec;
/// Service instantiation used for testing.
pub type Service<S> = service::Service<Database, S, MockSigner>;
diff --git a/crates/radicle-node/src/test/simulator.rs b/crates/radicle-node/src/test/simulator.rs
index 8738c565b..071de7afc 100644
--- a/crates/radicle-node/src/test/simulator.rs
+++ b/crates/radicle-node/src/test/simulator.rs
@@ -10,19 +10,20 @@ use std::{fmt, io, net};
use localtime::{LocalDuration, LocalTime};
use log::*;
+use protocol::service::ServiceState as _;
+use protocol::service::io::Io;
+use protocol::service::{DisconnectReason, Message, Metrics};
+use protocol::worker::FetchError;
+use protocol::worker::fetch::FetchResult;
+use radicle::identity::RepoId;
+use radicle::node::Address;
+use radicle::node::Link;
use radicle::node::NodeId;
use radicle::node::events::Event;
-use radicle_protocol::service::ServiceState as _;
-use radicle_protocol::worker::FetchError;
-
-use crate::Link;
-use crate::prelude::{Address, RepoId};
-use crate::service::io::Io;
-use crate::service::{DisconnectReason, Message, Metrics};
-use crate::storage::Namespaces;
-use crate::storage::{ReadRepository, WriteStorage};
+use radicle::storage::Namespaces;
+use radicle::storage::{ReadRepository, WriteStorage};
+
use crate::test::arbitrary;
-use crate::worker::fetch;
use super::peer::Peer;
@@ -55,7 +56,7 @@ pub enum Input {
/// Received messages from a remote peer.
Received(NodeId, Vec<Message>),
/// Fetch completed for a node.
- Fetched(RepoId, NodeId, Rc<Result<fetch::FetchResult, FetchError>>),
+ Fetched(RepoId, NodeId, Rc<Result<FetchResult, FetchError>>),
/// Used to advance the state machine after some wall time has passed.
Wake,
}
@@ -396,7 +397,7 @@ where
};
match &mut result {
- Ok(fetch::FetchResult {
+ Ok(FetchResult {
namespaces,
updated,
doc,
@@ -632,9 +633,10 @@ where
input: Input::Fetched(
rid,
remote,
- Rc::new(Ok(fetch::FetchResult {
+ Rc::new(Ok(FetchResult {
updated: vec![],
- canonical: fetch::UpdatedCanonicalRefs::default(),
+ canonical:
+ protocol::worker::fetch::UpdatedCanonicalRefs::default(),
namespaces: HashSet::new(),
clone: true,
doc: arbitrary::r#gen(1),
diff --git a/crates/radicle-node/src/tests.rs b/crates/radicle-node/src/tests.rs
index 5ed13be4b..025a9212a 100644
--- a/crates/radicle-node/src/tests.rs
+++ b/crates/radicle-node/src/tests.rs
@@ -12,52 +12,54 @@ use radicle::node::device::Device;
use radicle::storage::ReadRepository;
use test_log::test;
+use localtime::LocalDuration;
+use localtime::LocalTime;
+use protocol::bounded::BoundedVec;
+use protocol::service;
+use protocol::service::ServiceState as _;
+use protocol::service::filter::Filter;
+use protocol::service::io::Io;
+use protocol::service::message::*;
+use protocol::service::*;
+use protocol::wire::Decode;
+use protocol::wire::Encode;
+use protocol::worker::fetch::FetchResult;
+use radicle::assert_matches;
use radicle::cob;
+use radicle::collections::{RandomMap, RandomSet};
use radicle::crypto::test::signer::MockSigner;
+use radicle::identity::RepoId;
use radicle::identity::Visibility;
+use radicle::node;
+use radicle::node::Event;
use radicle::node::Link;
+use radicle::node::Timestamp;
use radicle::node::address::Store as _;
+use radicle::node::config::*;
use radicle::node::policy;
use radicle::node::refs::Store as _;
use radicle::node::routing::Store as _;
use radicle::node::{ConnectOptions, DEFAULT_TIMEOUT};
+use radicle::storage::ReadStorage;
use radicle::storage::RefUpdate;
+use radicle::storage::git::Storage;
+use radicle::storage::git::transport::{local, remote};
use radicle::storage::refs::RefsAt;
+use radicle::storage::refs::SIGREFS_BRANCH;
+use radicle::test::arbitrary;
use radicle::test::arbitrary::r#gen;
+use radicle::test::fixtures;
use radicle::test::storage::MockRepository;
-use radicle_protocol::bounded::BoundedVec;
-
-use crate::collections::{RandomMap, RandomSet};
-use crate::identity::RepoId;
-use crate::node;
-use crate::node::config::*;
-use crate::prelude::*;
-use crate::prelude::{LocalDuration, Timestamp};
-use crate::service::ServiceState as _;
-use crate::service::filter::Filter;
-use crate::service::io::Io;
-use crate::service::message::*;
-use crate::service::*;
-use crate::storage::ReadStorage;
-use crate::storage::git::Storage;
-use crate::storage::git::transport::{local, remote};
-use crate::storage::refs::SIGREFS_BRANCH;
-use crate::test::arbitrary;
-use crate::test::assert_matches;
-use crate::test::fixtures;
+use radicle::test::storage::MockStorage;
+use radicle::{git, identity, rad};
#[allow(unused)]
-use crate::test::logger;
+use radicle_log::test as logger;
+
use crate::test::peer::Peer;
use crate::test::peer::{AMY, BOB, CID};
use crate::test::simulator;
use crate::test::simulator::Simulation;
-
-use crate::LocalTime;
-use crate::test::storage::MockStorage;
-use crate::wire::Decode;
-use crate::wire::Encode;
-use crate::worker::fetch;
-use crate::{git, identity, rad, runtime, service, test};
+use crate::{runtime, test};
/// Default number of tests to run when testing things with high variance.
pub const DEFAULT_TEST_CASES: usize = 10;
@@ -355,7 +357,7 @@ fn inventory_pruning() {
assert_eq!(bob.local_time(), amy.local_time());
let projects: [RepoId; PROJECTS_TOTAL] =
- test::arbitrary::set::<RepoId>(PROJECTS_TOTAL..=PROJECTS_TOTAL)
+ arbitrary::set::<RepoId>(PROJECTS_TOTAL..=PROJECTS_TOTAL)
.into_iter()
.collect::<Vec<_>>()
.try_into()
@@ -396,13 +398,13 @@ fn inventory_pruning() {
#[test]
fn seeding() {
let mut amy = Peer::amy();
- let proj_id: identity::RepoId = test::arbitrary::r#gen(1);
+ let proj_id: identity::RepoId = arbitrary::r#gen(1);
let (cmd, receiver) = Command::seed(proj_id, policy::Scope::default());
amy.command(cmd);
let policy_change = receiver
.recv()
- .map_err(runtime::HandleError::from)
+ .map_err(runtime::handle::Error::from)
.unwrap()
.unwrap();
assert!(policy_change);
@@ -412,7 +414,7 @@ fn seeding() {
amy.command(cmd);
let policy_change = receiver
.recv()
- .map_err(runtime::HandleError::from)
+ .map_err(runtime::handle::Error::from)
.unwrap()
.unwrap();
assert!(policy_change);
@@ -885,7 +887,7 @@ fn refs_announcement_followed() {
amy.command(cmd);
let policy_change = receiver
.recv()
- .map_err(runtime::HandleError::from)
+ .map_err(runtime::handle::Error::from)
.unwrap()
.unwrap();
assert!(policy_change);
@@ -1413,7 +1415,7 @@ fn fetch_missing_inventory_on_schedule() {
amy.fetched(
rid,
*bob.nid(),
- Err(radicle_protocol::worker::FetchError::Io(
+ Err(protocol::worker::FetchError::Io(
io::ErrorKind::ConnectionReset.into(),
)),
);
@@ -1458,7 +1460,7 @@ fn queued_fetch_max_capacity() {
amy.elapse(KEEP_ALIVE_DELTA);
// Finish the 1st fetch.
- amy.fetched(rid1, *bob.nid(), Ok(fetch::FetchResult::new(doc.clone())));
+ amy.fetched(rid1, *bob.nid(), Ok(FetchResult::new(doc.clone())));
// Now the 1st fetch is done, the 2nd fetch is dequeued.
assert_eq!(amy.fetches().next(), Some((rid2, *bob.nid())));
@@ -1466,7 +1468,7 @@ fn queued_fetch_max_capacity() {
assert_matches!(amy.fetches().next(), None);
// Finish the 2nd fetch.
- amy.fetched(rid2, *bob.nid(), Ok(fetch::FetchResult::new(doc)));
+ amy.fetched(rid2, *bob.nid(), Ok(FetchResult::new(doc)));
// Now the 2nd fetch is done, the 3rd fetch is dequeued.
assert_eq!(amy.fetches().next(), Some((rid3, *bob.nid())));
}
@@ -1522,7 +1524,7 @@ fn orphaned_fetch_blocks_repo_from_all_nodes() {
// Delivering the missing result (what the fix guarantees) clears the entry
// and the queued fetch from the other node proceeds.
- amy.fetched(rid, *bob.nid(), Ok(fetch::FetchResult::new(doc)));
+ amy.fetched(rid, *bob.nid(), Ok(FetchResult::new(doc)));
assert_eq!(amy.fetches().next(), Some((rid, *cid.nid())));
}
@@ -1586,12 +1588,12 @@ fn queued_fetch_from_ann_same_rid() {
amy.fetched(
rid,
*bob.nid(),
- Ok(fetch::FetchResult {
+ Ok(FetchResult {
updated: vec![RefUpdate::Created {
name: refname.clone(),
oid,
}],
- canonical: fetch::UpdatedCanonicalRefs::default(),
+ canonical: protocol::worker::fetch::UpdatedCanonicalRefs::default(),
namespaces: [*cid.nid()].into_iter().collect(),
clone: false,
doc: arbitrary::r#gen(1),
@@ -1645,7 +1647,7 @@ fn queued_fetch_from_command_same_rid() {
amy.elapse(KEEP_ALIVE_DELTA);
// Finish the 1st fetch.
- amy.fetched(rid1, nid, Ok(arbitrary::r#gen::<fetch::FetchResult>(1)));
+ amy.fetched(rid1, nid, Ok(arbitrary::r#gen::<FetchResult>(1)));
// Now the 1st fetch is done, the 2nd fetch is dequeued.
let (rid, nid) = amy.fetches().next().unwrap();
assert_eq!(rid, rid1);
@@ -1655,7 +1657,7 @@ fn queued_fetch_from_command_same_rid() {
assert_matches!(amy.fetches().next(), None);
// Finish the 2nd fetch.
- amy.fetched(rid1, nid, Ok(arbitrary::r#gen::<fetch::FetchResult>(1)));
+ amy.fetched(rid1, nid, Ok(arbitrary::r#gen::<FetchResult>(1)));
// Now the 2nd fetch is done, the 3rd fetch is dequeued.
assert_matches!(amy.fetches().next(), Some((rid, nid)) if rid == rid1 && peers.remove(&nid));
// All fetches were initiated.
diff --git a/crates/radicle-node/src/tests/e2e.rs b/crates/radicle-node/src/tests/e2e.rs
index 6ab9579d5..98a35f112 100644
--- a/crates/radicle-node/src/tests/e2e.rs
+++ b/crates/radicle-node/src/tests/e2e.rs
@@ -19,11 +19,11 @@ use radicle::test::fixtures;
use radicle::{assert_matches, rad};
use radicle::{git, issue};
-use crate::node::config::Limits;
-use crate::node::{Config, ConnectOptions};
-use crate::service;
-use crate::storage::git::transport;
use crate::test::node::{Node, NodeHandle, converge};
+use protocol::service;
+use radicle::node::config::Limits;
+use radicle::node::{Config, ConnectOptions};
+use radicle::storage::git::transport;
mod config {
use super::*;
diff --git a/crates/radicle-node/src/wire.rs b/crates/radicle-node/src/wire.rs
index 2691626fd..11d903297 100644
--- a/crates/radicle-node/src/wire.rs
+++ b/crates/radicle-node/src/wire.rs
@@ -15,31 +15,30 @@ use cyphernet::proxy::socks5;
use cyphernet::{Digest, EcSk, Ecdh, Sha256};
use localtime::LocalTime;
use mio::net::TcpStream;
-use radicle::node::device::Device;
-
+use protocol::deserializer::Deserializer;
+use protocol::service;
+use protocol::service::FETCH_TIMEOUT;
+use protocol::service::io::Io;
+use protocol::service::{DisconnectReason, Metrics, Service, session};
+use protocol::wire::frame;
+use protocol::wire::frame::{Frame, FrameData, StreamId};
+use protocol::wire::*;
+use protocol::worker::{FetchRequest, FetchResult};
use radicle::collections::{RandomMap, RandomSet};
use radicle::crypto;
use radicle::node::Link;
use radicle::node::NodeId;
#[cfg(any(feature = "i2p", feature = "tor"))]
use radicle::node::config::AddressConfig;
+use radicle::node::device::Device;
use radicle::storage::WriteStorage;
-use radicle_protocol::deserializer::Deserializer;
-pub use radicle_protocol::wire::frame;
-pub use radicle_protocol::wire::frame::{Frame, FrameData, StreamId};
-pub use radicle_protocol::wire::*;
-use radicle_protocol::worker::{FetchRequest, FetchResult};
use crate::reactor;
use crate::reactor::{Listener, Transport};
use crate::reactor::{NoiseSession, ProtocolArtifact, SessionEvent, Socks5Session};
use crate::reactor::{Token, Tokens};
-use crate::service;
-use crate::service::FETCH_TIMEOUT;
-use crate::service::io::Io;
-use crate::service::{DisconnectReason, Metrics, Service, session};
use crate::worker;
-use crate::worker::{ChannelEvent, ChannelsConfig};
+use crate::worker::channels::{ChannelEvent, ChannelsConfig};
use crate::worker::{Task, TaskResult};
/// NoiseXK handshake pattern.
@@ -75,7 +74,7 @@ type Action<G> = reactor::Action<Listener, Transport<WireSession<G>>>;
/// A worker stream.
struct Stream {
/// Channels.
- channels: worker::Channels,
+ channels: worker::channels::Channels,
/// Data sent.
sent_bytes: usize,
/// Data received.
@@ -83,7 +82,7 @@ struct Stream {
}
impl Stream {
- fn new(channels: worker::Channels) -> Self {
+ fn new(channels: worker::channels::Channels) -> Self {
Self {
channels,
sent_bytes: 0,
@@ -125,7 +124,7 @@ impl Streams {
}
/// Open a new stream.
- fn open(&mut self, config: ChannelsConfig) -> (StreamId, worker::Channels) {
+ fn open(&mut self, config: ChannelsConfig) -> (StreamId, worker::channels::Channels) {
self.seq += 1;
let id = StreamId::git(self.link)
@@ -139,8 +138,12 @@ impl Streams {
}
/// Register an open stream.
- fn register(&mut self, stream: StreamId, config: ChannelsConfig) -> Option<worker::Channels> {
- let (wire, worker) = worker::Channels::pair(config)
+ fn register(
+ &mut self,
+ stream: StreamId,
+ config: ChannelsConfig,
+ ) -> Option<worker::channels::Channels> {
+ let (wire, worker) = worker::channels::Channels::pair(config)
.expect("Streams::register: fatal: unable to create channels");
match self.streams.entry(stream) {
@@ -1031,7 +1034,7 @@ where
self.service.fetched(
rid,
remote,
- Err(crate::worker::FetchError::Io(io::Error::new(
+ Err(protocol::worker::FetchError::Io(io::Error::new(
io::ErrorKind::NotConnected,
"peer disconnected before fetch could start",
))),
@@ -1287,20 +1290,21 @@ mod logger {
#[cfg(test)]
mod test {
use super::*;
- use crate::crypto::test::signer::MockSigner;
- use radicle_protocol::service::ServiceState as _;
+ use protocol::service::ServiceState as _;
+ use protocol::service::{Message, ZeroBytes};
+ use radicle::crypto::test::signer::MockSigner;
+ use radicle::identity::RepoId;
+ use radicle::node;
+ use radicle::test::arbitrary;
+ use radicle::test::storage::MockStorage;
- use crate::identity::RepoId;
- use crate::node;
- use crate::service::{Message, ZeroBytes};
- use crate::test::storage::MockStorage;
use crate::wire;
use crate::wire::varint;
#[test]
fn test_pong_message_with_extension() {
- use radicle_protocol::deserializer;
+ use protocol::deserializer;
let mut stream = Vec::new();
let pong = Message::Pong {
@@ -1331,7 +1335,7 @@ mod test {
#[test]
fn test_inventory_ann_with_extension() {
- use radicle_protocol::deserializer;
+ use protocol::deserializer;
#[derive(Debug)]
struct MessageWithExt {
@@ -1355,9 +1359,9 @@ mod test {
}
}
- let rid = radicle::test::arbitrary::r#gen(1);
- let pk = radicle::test::arbitrary::r#gen(1);
- let sig: [u8; 64] = radicle::test::arbitrary::r#gen(1);
+ let rid = arbitrary::r#gen(1);
+ let pk = arbitrary::r#gen(1);
+ let sig: [u8; 64] = arbitrary::r#gen(1);
// Message with extension.
let mut stream = Vec::new();
@@ -1428,14 +1432,14 @@ mod test {
// Returns the wire, the repo id, and bob's id/address.
#[allow(clippy::type_complexity)]
fn wire_with_active_fetch() -> (
- Wire<crate::node::Database, MockStorage, MockSigner>,
+ Wire<radicle::node::Database, MockStorage, MockSigner>,
RepoId,
NodeId,
NetAddr<HostName>,
) {
use crate::test::peer::Peer as TestPeer;
- let storage = crate::test::arbitrary::nonempty_storage(1);
+ let storage = arbitrary::nonempty_storage(1);
let rid = *storage.repos.keys().next().unwrap();
let mut alice = TestPeer::with_storage("alice", 7, storage);
let bob = TestPeer::bob();
@@ -1448,7 +1452,7 @@ mod test {
// Start a fetch from Bob so the service holds `active[rid] = { from: bob }`.
alice.connect_to(&bob);
let (cmd, _recv) =
- crate::service::Command::fetch(rid, bob_id, radicle::node::DEFAULT_TIMEOUT, None);
+ protocol::service::Command::fetch(rid, bob_id, radicle::node::DEFAULT_TIMEOUT, None);
alice.command(cmd);
assert!(
alice.fetches().any(|(r, _)| r == rid),
@@ -1468,7 +1472,7 @@ mod test {
stream: StreamId::git(Link::Outbound).nth(1).unwrap(),
result: FetchResult::Initiator {
rid,
- result: Err(crate::worker::FetchError::Io(std::io::Error::from(
+ result: Err(protocol::worker::FetchError::Io(std::io::Error::from(
std::io::ErrorKind::TimedOut,
))),
},
diff --git a/crates/radicle-node/src/worker.rs b/crates/radicle-node/src/worker.rs
index aa77be5d5..6aa66636c 100644
--- a/crates/radicle-node/src/worker.rs
+++ b/crates/radicle-node/src/worker.rs
@@ -1,5 +1,5 @@
#![allow(clippy::too_many_arguments)]
-mod channels;
+pub(crate) mod channels;
mod upload_pack;
pub mod fetch;
@@ -7,8 +7,10 @@ pub mod garbage;
use std::path::PathBuf;
+use channels::Channels;
use crossbeam_channel as chan;
-
+use protocol::wire::StreamId;
+use protocol::worker::{AuthorizationError, FetchError, FetchRequest, FetchResult, UploadError};
use radicle::identity::RepoId;
use radicle::node::notifications;
use radicle::node::policy::config as policy;
@@ -18,14 +20,7 @@ use radicle::storage::refs::RefsAt;
use radicle::storage::{ReadRepository, ReadStorage};
use radicle::{Storage, cob, crypto};
-pub use radicle_protocol::worker::{
- AuthorizationError, FetchError, FetchRequest, FetchResult, UploadError,
-};
-
-use crate::runtime::{Handle, thread};
-use crate::wire::StreamId;
-
-pub use channels::{ChannelEvent, Channels, ChannelsConfig};
+use crate::runtime::{handle::Handle, thread};
/// Worker pool configuration.
pub struct Config {
@@ -236,15 +231,15 @@ impl Worker {
rid: RepoId,
remote: NodeId,
refs_at: Option<Vec<RefsAt>>,
- fetch_config: radicle_fetch::Config,
+ fetch_config: ::fetch::Config,
channels: channels::ChannelsFlush,
notifs: notifications::StoreWriter,
- ) -> Result<fetch::FetchResult, FetchError> {
+ ) -> Result<protocol::worker::fetch::FetchResult, FetchError> {
let FetchConfig { local, expiry } = &self.fetch_config;
// N.b. if the `rid` is blocked this will return an error, so
// we won't continue with any further set up of the fetch.
- let allowed = radicle_fetch::Allowed::from_config(rid, &self.policies)?;
- let blocked = radicle_fetch::BlockList::from_config(&self.policies)?;
+ let allowed = ::fetch::Allowed::from_config(rid, &self.policies)?;
+ let blocked = ::fetch::BlockList::from_config(&self.policies)?;
let mut cache = self.cache.clone();
let handle = fetch::Handle::new(
@@ -278,7 +273,7 @@ impl Worker {
/// A pool of workers. One thread is allocated for each worker.
pub struct Pool {
- pool: Vec<thread::JoinHandle<Result<(), chan::RecvError>>>,
+ pool: Vec<std::thread::JoinHandle<Result<(), chan::RecvError>>>,
}
impl Pool {
@@ -317,7 +312,7 @@ impl Pool {
/// Run the worker pool.
///
/// Blocks until all worker threads have exited.
- pub fn run(self) -> thread::Result<()> {
+ pub fn run(self) -> std::thread::Result<()> {
for (i, worker) in self.pool.into_iter().enumerate() {
if let Err(err) = worker.join()? {
log::trace!(target: "pool", "Worker {i} exited: {err}");
diff --git a/crates/radicle-node/src/worker/channels.rs b/crates/radicle-node/src/worker/channels.rs
index 83edaf735..7b8f96787 100644
--- a/crates/radicle-node/src/worker/channels.rs
+++ b/crates/radicle-node/src/worker/channels.rs
@@ -6,8 +6,8 @@ use crossbeam_channel as chan;
use radicle::node::NodeId;
use radicle::node::config::FetchPackSizeLimit;
-use crate::runtime::Handle;
-use crate::wire::StreamId;
+use crate::runtime::handle::Handle;
+use protocol::wire::StreamId;
/// Maximum size of channel used to communicate with a worker.
/// Note that as long as we're using [`std::io::copy`] to copy data from the
@@ -71,7 +71,7 @@ impl ChannelsFlush {
}
}
-impl radicle_fetch::transport::ConnectionStream for ChannelsFlush {
+impl fetch::transport::ConnectionStream for ChannelsFlush {
type Read = ChannelReader;
type Write = ChannelFlushWriter;
@@ -257,7 +257,7 @@ pub struct ChannelFlushWriter<T = Vec<u8>> {
remote: NodeId,
}
-impl radicle_fetch::transport::SignalEof for ChannelFlushWriter<Vec<u8>> {
+impl fetch::transport::SignalEof for ChannelFlushWriter<Vec<u8>> {
fn eof(&mut self) -> io::Result<()> {
self.writer.send(ChannelEvent::Eof)?;
self.flush()
diff --git a/crates/radicle-node/src/worker/fetch.rs b/crates/radicle-node/src/worker/fetch.rs
index d63a4458b..29a02a87d 100644
--- a/crates/radicle-node/src/worker/fetch.rs
+++ b/crates/radicle-node/src/worker/fetch.rs
@@ -1,34 +1,32 @@
-use radicle::cob::store::access::ReadOnly;
-use radicle::storage::git::TempRepository;
-pub(crate) use radicle_protocol::worker::fetch::error;
-
use std::collections::BTreeSet;
use std::str::FromStr;
+use fetch::git::refs::Applied;
+use fetch::{Allowed, BlockList};
use localtime::LocalTime;
-
+pub(crate) use protocol::worker::fetch::error;
+use protocol::worker::fetch::{FetchResult, UpdatedCanonicalRefs};
use radicle::cob::TypedId;
+use radicle::cob::store::access::ReadOnly;
use radicle::crypto::PublicKey;
use radicle::prelude::NodeId;
use radicle::prelude::RepoId;
use radicle::storage::git::Repository;
+use radicle::storage::git::TempRepository;
use radicle::storage::refs::RefsAt;
use radicle::storage::{
ReadRepository, ReadStorage as _, RefUpdate, RemoteRepository, WriteRepository as _,
};
use radicle::{Storage, cob, git, node};
-use radicle_fetch::git::refs::Applied;
-use radicle_fetch::{Allowed, BlockList};
-pub use radicle_protocol::worker::fetch::{FetchResult, UpdatedCanonicalRefs};
use super::channels::ChannelsFlush;
pub enum Handle {
Clone {
- handle: radicle_fetch::Handle<TempRepository, ChannelsFlush>,
+ handle: fetch::Handle<TempRepository, ChannelsFlush>,
},
Pull {
- handle: radicle_fetch::Handle<Repository, ChannelsFlush>,
+ handle: fetch::Handle<Repository, ChannelsFlush>,
notifications: node::notifications::StoreWriter,
},
}
@@ -46,14 +44,14 @@ impl Handle {
let exists = storage.contains(&rid)?;
if exists {
let repo = storage.repository(rid)?;
- let handle = radicle_fetch::Handle::new(local, repo, follow, blocked, channels)?;
+ let handle = fetch::Handle::new(local, repo, follow, blocked, channels)?;
Ok(Handle::Pull {
handle,
notifications,
})
} else {
let repo = storage.temporary_repository(rid)?;
- let handle = radicle_fetch::Handle::new(local, repo, follow, blocked, channels)?;
+ let handle = fetch::Handle::new(local, repo, follow, blocked, channels)?;
Ok(Handle::Clone { handle })
}
}
@@ -64,14 +62,14 @@ impl Handle {
storage: &Storage,
cache: &mut cob::cache::StoreWriter,
refsdb: &mut D,
- config: radicle_fetch::Config,
+ config: fetch::Config,
remote: PublicKey,
refs_at: Option<Vec<RefsAt>>,
) -> Result<FetchResult, error::Fetch> {
let (result, clone, notifs) = match self {
Self::Clone { mut handle } => {
log::debug!(target: "worker", "{} cloning from {remote}", handle.local());
- match radicle_fetch::clone(&mut handle, config, remote) {
+ match fetch::clone(&mut handle, config, remote) {
Err(err) => {
handle.into_inner().cleanup();
return Err(err.into());
@@ -91,7 +89,7 @@ impl Handle {
notifications,
} => {
log::debug!(target: "worker", "{} pulling from {remote}", handle.local());
- let result = radicle_fetch::pull(&mut handle, config, remote, refs_at)?;
+ let result = fetch::pull(&mut handle, config, remote, refs_at)?;
(result, false, Some(notifications))
}
};
@@ -101,7 +99,7 @@ impl Handle {
}
match result {
- radicle_fetch::FetchResult::Failed {
+ fetch::FetchResult::Failed {
threshold,
delegates,
validations,
@@ -114,7 +112,7 @@ impl Handle {
delegates: delegates.into_iter().map(|key| key.to_string()).collect(),
})
}
- radicle_fetch::FetchResult::Success {
+ fetch::FetchResult::Success {
applied,
remotes,
validations,
@@ -164,7 +162,7 @@ impl Handle {
// Post notifications for the given refs.
fn notify(
rid: &RepoId,
- refs: &radicle_fetch::git::refs::Applied<'static>,
+ refs: &fetch::git::refs::Applied<'static>,
store: &mut node::notifications::StoreWriter,
) -> Result<(), error::Fetch> {
let now = LocalTime::now();
diff --git a/crates/radicle-node/src/worker/upload_pack.rs b/crates/radicle-node/src/worker/upload_pack.rs
index 0766cead6..7df5d1b61 100644
--- a/crates/radicle-node/src/worker/upload_pack.rs
+++ b/crates/radicle-node/src/worker/upload_pack.rs
@@ -3,7 +3,7 @@ use std::io::{Read, Write};
use std::process::{Command, ExitStatus, Stdio};
use std::time::{Duration, Instant};
-use radicle_fetch::{ByteSlice as _, RemoteProgress};
+use fetch::{ByteSlice as _, RemoteProgress};
use radicle::Storage;
use radicle::identity::RepoId;
@@ -91,7 +91,7 @@ where
let mut stdout = io::BufReader::new(child.stdout.take().unwrap());
let reporter = std::sync::Mutex::new(Reporter::new(header.repo, remote, emitter.clone(), send));
- thread::scope(|s| {
+ std::thread::scope(|s| {
thread::spawn_scoped(nid, "upload-pack", s, || {
let mut buffer = [0; u16::MAX as usize + 1];
loop {
commit 023ac60c6bd07e139952d0dfbd3e2e2952120727
Author: Lorenz Leutgeb <lorenz.leutgeb@radicle.dev>
Date: Fri Jul 17 13:46:07 2026 +0200
node: Remove re-export `…::node::PROTOCOL_VERSION`
It appears that `radicle_node::PROTOCOL_VERSION` (which is a re-export
of `radicle::node::PROTOCOL_VERSION` is the only symbol exported from
`radicle-node` that is used in `radicle-cli` (except tests).
Since `radicle-cli` depends on `radicle` anyway, it is questionable how
much sense that re-export and use from a binary crate (!) makes.
Remove the re-export.
diff --git a/crates/radicle-cli/tests/commands/clone.rs b/crates/radicle-cli/tests/commands/clone.rs
index 8ccee2b80..f170e30d4 100644
--- a/crates/radicle-cli/tests/commands/clone.rs
+++ b/crates/radicle-cli/tests/commands/clone.rs
@@ -1,6 +1,7 @@
use crate::test;
use crate::util::environment::Environment;
use radicle::node;
+use radicle::node::PROTOCOL_VERSION;
use radicle::node::UserAgent;
use radicle::node::address::Store as _;
use radicle::node::policy::Scope;
@@ -9,7 +10,6 @@ use radicle::node::{Alias, Handle as _};
use radicle::prelude::{NodeId, RepoId};
use radicle::storage::ReadStorage as _;
use radicle_localtime::LocalTime;
-use radicle_node::PROTOCOL_VERSION;
use std::net;
use std::str::FromStr;
diff --git a/crates/radicle-cli/tests/commands/node.rs b/crates/radicle-cli/tests/commands/node.rs
index 9b80ca096..86d12e8a2 100644
--- a/crates/radicle-cli/tests/commands/node.rs
+++ b/crates/radicle-cli/tests/commands/node.rs
@@ -1,13 +1,13 @@
use crate::test;
use crate::util::environment::Environment;
use radicle::node::Address;
+use radicle::node::PROTOCOL_VERSION;
use radicle::node::UserAgent;
use radicle::node::address::Store as _;
use radicle::node::config::DefaultSeedingPolicy;
use radicle::node::{Alias, Handle as _};
use radicle::test::fixtures;
use radicle_localtime::LocalTime;
-use radicle_node::PROTOCOL_VERSION;
use std::net;
use std::str::FromStr;
diff --git a/crates/radicle-node/src/lib.rs b/crates/radicle-node/src/lib.rs
index 53bb3bb1b..28564362e 100644
--- a/crates/radicle-node/src/lib.rs
+++ b/crates/radicle-node/src/lib.rs
@@ -23,7 +23,6 @@ use radicle::version::Version;
pub use localtime::{LocalDuration, LocalTime};
pub use radicle::node::Link;
-pub use radicle::node::PROTOCOL_VERSION;
pub use radicle::prelude::Timestamp;
pub use radicle::{collections, crypto, git, identity, node, profile, rad, storage};
pub use runtime::Runtime;
diff --git a/crates/radicle-node/src/test/gossip.rs b/crates/radicle-node/src/test/gossip.rs
index 4a774a32f..e9d156e54 100644
--- a/crates/radicle-node/src/test/gossip.rs
+++ b/crates/radicle-node/src/test/gossip.rs
@@ -1,11 +1,11 @@
use radicle::node;
+use radicle::node::PROTOCOL_VERSION;
use radicle::node::UserAgent;
use radicle::node::device::Device;
use radicle::test::fixtures::r#gen;
use crate::test::arbitrary;
use crate::{
- PROTOCOL_VERSION,
prelude::{LocalDuration, LocalTime, Message},
service::message::{InventoryAnnouncement, NodeAnnouncement},
};
diff --git a/crates/radicle-node/src/test/peer.rs b/crates/radicle-node/src/test/peer.rs
index 97fe7a3a5..e46ed88d7 100644
--- a/crates/radicle-node/src/test/peer.rs
+++ b/crates/radicle-node/src/test/peer.rs
@@ -35,7 +35,8 @@ use crate::storage::{RemoteId, WriteStorage};
use crate::test::storage::MockStorage;
use crate::test::{arbitrary, fixtures};
use crate::wire::MessageType;
-use crate::{Link, LocalDuration, LocalTime, PROTOCOL_VERSION};
+use crate::{Link, LocalDuration, LocalTime};
+use radicle::node::PROTOCOL_VERSION;
use radicle::node::events::Events;
use radicle::node::policy::config as policy;
use radicle::node::policy::{Scope, SeedingPolicy};
Exit code: 0
shell: 'export RUSTDOCFLAGS=''-D warnings'' cargo --version rustc --version cargo fmt --check cargo clippy --all-targets --workspace -- --deny warnings cargo build --all-targets --workspace cargo doc --workspace --no-deps --all-features cargo test --workspace --no-fail-fast '
Commands:
$ podman run --name 6c65f055-cac2-49e1-acbd-9e485e74ffac -v /opt/radcis/ci.rad.levitte.org/cci/state/6c65f055-cac2-49e1-acbd-9e485e74ffac/s:/6c65f055-cac2-49e1-acbd-9e485e74ffac/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/6c65f055-cac2-49e1-acbd-9e485e74ffac/w:/6c65f055-cac2-49e1-acbd-9e485e74ffac/w -w /6c65f055-cac2-49e1-acbd-9e485e74ffac/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:trixie bash /6c65f055-cac2-49e1-acbd-9e485e74ffac/s/script.sh
+ export 'RUSTDOCFLAGS=-D warnings'
+ RUSTDOCFLAGS='-D warnings'
+ cargo --version
info: syncing channel updates for '1.97.1-x86_64-unknown-linux-gnu'
info: latest update on 2026-07-16, rust version 1.97.1 (8bab26f4f 2026-07-14)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-src'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
info: installing component 'rust-src'
info: installing component 'rust-std'
info: installing component 'rustc'
info: installing component 'rustfmt'
cargo 1.97.1 (c980f4866 2026-06-30)
+ rustc --version
rustc 1.97.1 (8bab26f4f 2026-07-14)
+ cargo fmt --check
+ cargo clippy --all-targets --workspace -- --deny warnings
Updating crates.io index
Downloading crates ...
Downloaded base32 v0.4.0
Downloaded cbc v0.1.2
Downloaded base256emoji v1.0.2
Downloaded crypto-bigint v0.5.5
Downloaded crossbeam-channel v0.5.15
Downloaded addr2line v0.25.1
Downloaded base16ct v0.2.0
Downloaded getrandom v0.4.2
Downloaded base64 v0.22.1
Downloaded base64 v0.21.7
Downloaded rand v0.8.5
Downloaded p384 v0.13.1
Downloaded once_cell v1.21.4
Downloaded opaque-debug v0.3.1
Downloaded git-ref-format-macro v0.7.0
Downloaded p256 v0.13.2
Downloaded either v1.15.0
Downloaded parking_lot v0.12.5
Downloaded outref v0.5.2
Downloaded radicle-std-ext v0.2.0
Downloaded clap_lex v1.1.0
Downloaded data-encoding-macro v0.1.19
Downloaded dunce v1.0.5
Downloaded convert_case v0.10.0
Downloaded base64ct v1.8.3
Downloaded clap_derive v4.6.0
Downloaded erased-serde v0.4.10
Downloaded derive_more v2.1.1
Downloaded cpufeatures v0.2.17
Downloaded rand_chacha v0.3.1
Downloaded rand_core v0.6.4
Downloaded cyphergraphy v0.3.1
Downloaded curve25519-dalek v4.1.3
Downloaded radicle-surf v0.28.0
Downloaded bcrypt-pbkdf v0.10.0
Downloaded colorchoice v1.0.5
Downloaded radicle-git-ext v0.13.0
Downloaded ed25519 v1.5.3
Downloaded rand v0.9.2
Downloaded git-ref-format v0.7.0
Downloaded gix-error v0.2.3
Downloaded cypheraddr v0.4.1
Downloaded crypto-common v0.1.7
Downloaded poly1305 v0.8.0
Downloaded document-features v0.2.12
Downloaded console v0.16.3
Downloaded ed25519-dalek v2.2.0
Downloaded bitflags v2.11.0
Downloaded filetime v0.2.27
Downloaded const-oid v0.9.6
Downloaded rand_chacha v0.9.0
Downloaded p521 v0.13.3
Downloaded quote v1.0.45
Downloaded bit-vec v0.8.0
Downloaded fluent-uri v0.3.2
Downloaded blowfish v0.9.1
Downloaded signal-hook-mio v0.2.5
Downloaded polyval v0.6.2
Downloaded primeorder v0.13.6
Downloaded proc-macro2 v1.0.106
Downloaded colored v2.2.0
Downloaded crc32fast v1.5.0
Downloaded ecdsa v0.16.9
Downloaded const-str v0.4.3
Downloaded digest v0.10.7
Downloaded displaydoc v0.2.5
Downloaded git-ref-format-core v0.6.0
Downloaded pin-project-lite v0.2.17
Downloaded diff v0.1.13
Downloaded find-msvc-tools v0.1.9
Downloaded ascii v1.1.0
Downloaded derive_more-impl v2.1.1
Downloaded rand_xorshift v0.4.0
Downloaded phf_shared v0.11.3
Downloaded pkg-config v0.3.32
Downloaded ed25519 v2.2.3
Downloaded crossterm v0.29.0
Downloaded fraction v0.15.3
Downloaded fnv v1.0.7
Downloaded secrecy v0.10.3
Downloaded autocfg v1.5.0
Downloaded equivalent v1.0.2
Downloaded block-padding v0.3.3
Downloaded cfg-if v1.0.4
Downloaded faster-hex v0.10.0
Downloaded smallvec v1.15.1
Downloaded pastey v0.2.1
Downloaded pbkdf2 v0.12.2
Downloaded salsa20 v0.10.2
Downloaded socket2 v0.5.10
Downloaded sharded-slab v0.1.7
Downloaded similar v3.1.1
Downloaded socks5-client v0.4.3
Downloaded serde_spanned v1.0.4
Downloaded rfc6979 v0.4.0
Downloaded siphasher v0.3.11
Downloaded pretty_assertions v1.4.1
Downloaded sha2 v0.10.9
Downloaded qcheck-macros v1.0.0
Downloaded signature v2.2.0
Downloaded rustc-demangle v0.1.27
Downloaded same-file v1.0.6
Downloaded signature v1.6.4
Downloaded rustversion v1.0.22
Downloaded signal-hook v0.3.18
Downloaded qcheck v1.0.0
Downloaded semver v1.0.27
Downloaded gix-sec v0.14.0
Downloaded tar v0.4.45
Downloaded rusty-fork v0.3.1
Downloaded phf v0.11.3
Downloaded referencing v0.30.0
Downloaded siphasher v1.0.2
Downloaded shell-words v1.1.1
Downloaded snapbox v1.2.2
Downloaded potential_utf v0.1.4
Downloaded ppv-lite86 v0.2.21
Downloaded proc-macro-error-attr3 v3.0.2
Downloaded ref-cast-impl v1.0.25
Downloaded ryu v1.0.23
Downloaded scopeguard v1.2.0
Downloaded pkcs8 v0.10.2
Downloaded serde_fmt v1.1.0
Downloaded snapbox-macros v1.1.0
Downloaded pkcs1 v0.7.5
Downloaded sec1 v0.7.3
Downloaded serde_core v1.0.228
Downloaded quick-error v1.2.3
Downloaded scrypt v0.11.0
Downloaded sha1 v0.10.6
Downloaded parking_lot_core v0.9.12
Downloaded serde-untagged v0.1.9
Downloaded ct-codecs v1.1.6
Downloaded curve25519-dalek-derive v0.1.1
Downloaded ec25519 v0.1.0
Downloaded spin v0.9.8
Downloaded rustc_version v0.4.1
Downloaded proc-macro-error3 v3.0.2
Downloaded percent-encoding v2.3.2
Downloaded gix-shallow v0.12.0
Downloaded ref-cast v1.0.25
Downloaded prodash v31.0.0
Downloaded shlex v1.3.0
Downloaded wait-timeout v0.2.1
Downloaded gix-path v0.12.0
Downloaded serde_derive v1.0.228
Downloaded serde_derive_internals v0.29.1
Downloaded value-bag-sval2 v1.12.0
Downloaded sval_ref v2.17.0
Downloaded gix-validate v0.11.1
Downloaded pem-rfc7468 v0.7.0
Downloaded rand_core v0.9.5
Downloaded schemars_derive v1.2.1
Downloaded signal-hook-registry v1.4.8
Downloaded sem_safe v0.2.1
Downloaded sval_json v2.17.0
Downloaded simd-adler32 v0.3.8
Downloaded aead v0.5.2
Downloaded signals_receipts v0.2.5
Downloaded gix-ref v0.63.0
Downloaded num-integer v0.1.46
Downloaded serde v1.0.228
Downloaded tree-sitter-css v0.23.2
Downloaded anstream v0.6.21
Downloaded icu_normalizer v2.1.1
Downloaded rsa v0.9.10
Downloaded structured-logger v1.0.5
Downloaded matchers v0.2.0
Downloaded heapless v0.8.0
Downloaded anstyle-parse v0.2.7
Downloaded icu_provider v2.1.1
Downloaded ssh-agent-lib v0.6.0
Downloaded schemars v1.2.1
Downloaded tree-sitter-json v0.24.8
Downloaded unicode-display-width v0.3.0
Downloaded gix-lock v23.0.0
Downloaded nonempty v0.12.0
Downloaded anstyle v1.0.14
Downloaded generic-array v0.14.7
Downloaded lexopt v0.3.2
Downloaded fast-glob v0.3.3
Downloaded errno v0.3.14
Downloaded env_filter v1.0.0
Downloaded proptest v1.10.0
Downloaded tinyvec v1.11.0
Downloaded typenum v1.19.0
Downloaded universal-hash v0.5.1
Downloaded yansi v1.0.1
Downloaded idna v1.1.0
Downloaded fastrand v2.3.0
Downloaded zerofrom-derive v0.1.6
Downloaded ghash v0.5.1
Downloaded gix-actor v0.41.0
Downloaded bit-set v0.8.0
Downloaded serde_json v1.0.149
Downloaded borrow-or-share v0.2.4
Downloaded data-encoding-macro-internal v0.1.17
Downloaded regex v1.12.3
Downloaded amplify_num v0.5.3
Downloaded block-buffer v0.10.4
Downloaded zeroize v1.8.2
Downloaded form_urlencoded v1.2.2
Downloaded adler2 v2.0.1
Downloaded dyn-clone v1.0.20
Downloaded clap_complete v4.6.0
Downloaded ctr v0.9.2
Downloaded gix-hashtable v0.15.0
Downloaded version_check v0.9.5
Downloaded hmac v0.12.1
Downloaded litemap v0.8.1
Downloaded portable-atomic v1.13.1
Downloaded gix-prompt v0.15.0
Downloaded gix-trace v0.1.19
Downloaded sval_buffer v2.17.0
Downloaded gix-credentials v0.38.0
Downloaded sqlite3-sys v0.18.0
Downloaded sval_nested v2.17.0
Downloaded tree-sitter-toml-ng v0.6.0
Downloaded group v0.13.0
Downloaded systemd-journal-logger v2.2.2
Downloaded jobserver v0.1.34
Downloaded thread_local v1.1.9
Downloaded thiserror v2.0.18
Downloaded thiserror-impl v2.0.18
Downloaded anstyle-query v1.1.5
Downloaded anstream v1.0.0
Downloaded ff v0.13.1
Downloaded gix-hash v0.25.0
Downloaded humantime v2.3.0
Downloaded value-bag-serde1 v1.12.0
Downloaded email_address v0.2.9
Downloaded bytecount v0.6.9
Downloaded bytesize v2.3.1
Downloaded data-encoding v2.10.0
Downloaded byteorder v1.5.0
Downloaded escargot v0.5.15
Downloaded gix-config-value v0.18.0
Downloaded walkdir v2.5.0
Downloaded num-cmp v0.1.0
Downloaded sval_fmt v2.17.0
Downloaded unarray v0.1.4
Downloaded zerofrom v0.1.6
Downloaded chacha20 v0.9.1
Downloaded env_logger v0.11.9
Downloaded cipher v0.4.4
Downloaded gix-chunk v0.7.1
Downloaded uuid-simd v0.8.0
Downloaded heck v0.5.0
Downloaded strsim v0.11.1
Downloaded inout v0.1.4
Downloaded nonempty v0.9.0
Downloaded gix-command v0.9.0
Downloaded gix-quote v0.7.1
Downloaded sval_serde v2.17.0
Downloaded normalize-line-endings v0.3.0
Downloaded gix-negotiate v0.31.0
Downloaded num-iter v0.1.45
Downloaded typeid v1.0.3
Downloaded toml_writer v1.0.7+spec-1.1.0
Downloaded ssh-cipher v0.2.0
Downloaded writeable v0.6.2
Downloaded lazy_static v1.5.0
Downloaded gix-commitgraph v0.37.0
Downloaded gix-packetline v0.21.3
Downloaded gix-utils v0.3.2
Downloaded multibase v0.9.2
Downloaded amplify_derive v4.0.1
Downloaded spki v0.7.3
Downloaded zerovec-derive v0.11.2
Downloaded getrandom v0.2.17
Downloaded chrono v0.4.44
Downloaded hash32 v0.3.1
Downloaded toml v0.9.12+spec-1.1.0
Downloaded maybe-async v0.2.10
Downloaded toml_datetime v0.7.5+spec-1.1.0
Downloaded noise-framework v0.4.1
Downloaded itoa v1.0.17
Downloaded sqlite v0.37.0
Downloaded amplify v4.9.0
Downloaded cc v1.2.57
Downloaded gix-glob v0.26.0
Downloaded gix-diff v0.63.0
Downloaded match-lookup v0.1.2
Downloaded streaming-iterator v0.1.9
Downloaded gix-traverse v0.57.0
Downloaded unit-prefix v0.5.2
Downloaded uuid v1.22.0
Downloaded utf8parse v0.2.2
Downloaded tinyvec_macros v0.1.1
Downloaded litrs v1.0.0
Downloaded anyhow v1.0.102
Downloaded sval_dynamic v2.17.0
Downloaded utf8_iter v1.0.4
Downloaded crossbeam-utils v0.8.21
Downloaded synstructure v0.13.2
Downloaded zmij v1.0.21
Downloaded amplify_syn v2.0.1
Downloaded num-traits v0.2.19
Downloaded xattr v1.6.1
Downloaded jiff-static v0.2.23
Downloaded num-rational v0.4.2
Downloaded zerotrie v0.2.3
Downloaded human-panic v2.0.6
Downloaded keccak v0.1.6
Downloaded getrandom v0.3.4
Downloaded tempfile v3.27.0
Downloaded thiserror-impl v1.0.69
Downloaded nu-ansi-term v0.50.3
Downloaded base-x v0.2.11
Downloaded thiserror v1.0.69
Downloaded yoke v0.8.1
Downloaded test-log-macros v0.2.19
Downloaded tree-sitter-language v0.1.7
Downloaded subtle v2.6.1
Downloaded ssh-encoding v0.2.0
Downloaded test-log v0.2.19
Downloaded is_terminal_polyfill v1.70.2
Downloaded gix-refspec v0.41.0
Downloaded unicode-ident v1.0.24
Downloaded gix-fs v0.21.1
Downloaded idna_adapter v1.2.1
Downloaded num v0.4.3
Downloaded stable_deref_trait v1.2.1
Downloaded indicatif v0.18.4
Downloaded tree-sitter-highlight v0.24.7
Downloaded gix-features v0.48.0
Downloaded tracing-log v0.2.0
Downloaded chacha20poly1305 v0.10.1
Downloaded clap v4.6.0
Downloaded elliptic-curve v0.13.8
Downloaded gix-date v0.15.3
Downloaded unicode-normalization v0.1.25
Downloaded yoke-derive v0.8.1
Downloaded gix-tempfile v23.0.0
Downloaded tree-sitter-html v0.23.2
Downloaded timeago v0.4.2
Downloaded icu_properties v2.1.2
Downloaded gix-revision v0.45.0
Downloaded anstyle-parse v1.0.0
Downloaded gix-revwalk v0.31.0
Downloaded tinystr v0.8.2
Downloaded gix-url v0.36.0
Downloaded iana-time-zone v0.1.65
Downloaded icu_normalizer_data v2.1.1
Downloaded tracing-subscriber v0.3.23
Downloaded num-complex v0.4.6
Downloaded gix-object v0.60.0
Downloaded der v0.7.10
Downloaded memmap2 v0.9.10
Downloaded bytes v1.11.1
Downloaded fancy-regex v0.14.0
Downloaded lock_api v0.4.14
Downloaded vsimd v0.8.0
Downloaded tracing-core v0.1.36
Downloaded gix-transport v0.57.0
Downloaded miniz_oxide v0.8.9
Downloaded value-bag v1.12.0
Downloaded sval v2.17.0
Downloaded gix-protocol v0.61.0
Downloaded url v2.5.8
Downloaded flate2 v1.1.9
Downloaded object v0.37.3
Downloaded regex-syntax v0.8.10
Downloaded arc-swap v1.9.1
Downloaded tree-sitter-c v0.23.4
Downloaded log v0.4.29
Downloaded zerovec v0.11.5
Downloaded mio v1.1.1
Downloaded num-bigint v0.4.6
Downloaded icu_collections v2.1.1
Downloaded indexmap v2.13.0
Downloaded ahash v0.8.12
Downloaded inquire v0.9.4
Downloaded num-bigint-dig v0.8.6
Downloaded gix-odb v0.80.0
Downloaded icu_locale_core v2.1.1
Downloaded ssh-key v0.6.7
Downloaded backtrace v0.3.76
Downloaded jsonschema v0.30.0
Downloaded cyphernet v0.5.4
Downloaded emojis v0.6.4
Downloaded aho-corasick v1.1.4
Downloaded memchr v2.8.0
Downloaded itertools v0.14.0
Downloaded gix-pack v0.70.0
Downloaded libm v0.2.16
Downloaded icu_properties_data v2.1.2
Downloaded aes-gcm v0.10.3
Downloaded aes v0.8.4
Downloaded rustix v1.1.4
Downloaded tree-sitter-python v0.23.6
Downloaded clap_builder v4.6.0
Downloaded tree-sitter v0.24.7
Downloaded tree-sitter-go v0.23.4
Downloaded unicode-segmentation v1.12.0
Downloaded hashbrown v0.16.1
Downloaded sysinfo v0.37.2
Downloaded zlib-rs v0.6.5
Downloaded git2 v0.21.0
Downloaded zerocopy v0.8.42
Downloaded syn v1.0.109
Downloaded vcpkg v0.2.15
Downloaded gimli v0.32.3
Downloaded bloomy v1.2.0
Downloaded regex-automata v0.4.14
Downloaded unicode-width v0.2.2
Downloaded bstr v1.12.1
Downloaded tree-sitter-rust v0.23.3
Downloaded syn v2.0.117
Downloaded tree-sitter-md v0.3.2
Downloaded tracing v0.1.44
Downloaded tree-sitter-bash v0.23.3
Downloaded tree-sitter-typescript v0.23.2
Downloaded libz-sys v1.1.25
Downloaded sha1-checked v0.10.0
Downloaded tree-sitter-ruby v0.23.1
Downloaded sha3 v0.10.8
Downloaded jiff v0.2.23
Downloaded libc v0.2.183
Downloaded tokio v1.50.0
Downloaded libgit2-sys v0.18.4+1.9.3
Downloaded sqlite3-src v0.7.0
Downloaded linux-raw-sys v0.12.1
Compiling libc v0.2.183
Compiling proc-macro2 v1.0.106
Compiling quote v1.0.45
Compiling unicode-ident v1.0.24
Checking cfg-if v1.0.4
Checking zeroize v1.8.2
Compiling version_check v0.9.5
Compiling typenum v1.19.0
Compiling generic-array v0.14.7
Checking getrandom v0.2.17
Compiling syn v2.0.117
Checking rand_core v0.6.4
Checking memchr v2.8.0
Compiling jobserver v0.1.34
Checking crypto-common v0.1.7
Compiling shlex v1.3.0
Compiling find-msvc-tools v0.1.9
Checking subtle v2.6.1
Compiling serde_core v1.0.228
Compiling cc v1.2.57
Checking const-oid v0.9.6
Checking regex-syntax v0.8.10
Checking aho-corasick v1.1.4
Checking smallvec v1.15.1
Checking block-buffer v0.10.4
Checking digest v0.10.7
Checking cpufeatures v0.2.17
Compiling thiserror v2.0.18
Checking fastrand v2.3.0
Compiling parking_lot_core v0.9.12
Checking regex-automata v0.4.14
Checking scopeguard v1.2.0
Checking lock_api v0.4.14
Checking stable_deref_trait v1.2.1
Checking bitflags v2.11.0
Checking parking_lot v0.12.5
Compiling typeid v1.0.3
Compiling erased-serde v0.4.10
Compiling serde v1.0.228
Checking gix-trace v0.1.19
Checking itoa v1.0.17
Checking tinyvec_macros v0.1.1
Compiling crc32fast v1.5.0
Checking tinyvec v1.11.0
Checking serde_fmt v1.1.0
Checking hashbrown v0.16.1
Checking value-bag-serde1 v1.12.0
Checking unicode-normalization v0.1.25
Compiling thiserror-impl v2.0.18
Compiling serde_derive v1.0.228
Checking byteorder v1.5.0
Checking bstr v1.12.1
Checking gix-utils v0.3.2
Checking value-bag v1.12.0
Checking gix-validate v0.11.1
Checking log v0.4.29
Checking same-file v1.0.6
Checking walkdir v2.5.0
Checking prodash v31.0.0
Checking gix-path v0.12.0
Checking zlib-rs v0.6.5
Compiling libm v0.2.16
Compiling autocfg v1.5.0
Compiling heapless v0.8.0
Compiling num-traits v0.2.19
Compiling pkg-config v0.3.32
Compiling rustix v1.1.4
Checking gix-features v0.48.0
Checking hash32 v0.3.1
Checking linux-raw-sys v0.12.1
Compiling getrandom v0.4.2
Checking faster-hex v0.10.0
Checking block-padding v0.3.3
Compiling zerocopy v0.8.42
Checking inout v0.1.4
Checking sha2 v0.10.9
Checking sha1 v0.10.6
Compiling zmij v1.0.21
Checking sha1-checked v0.10.0
Checking cipher v0.4.4
Compiling serde_json v1.0.149
Checking once_cell v1.21.4
Checking equivalent v1.0.2
Checking indexmap v2.13.0
Checking gix-hash v0.25.0
Compiling ref-cast v1.0.25
Compiling ref-cast-impl v1.0.25
Checking der v0.7.10
Checking spin v0.9.8
Checking lazy_static v1.5.0
Compiling vcpkg v0.2.15
Checking dyn-clone v1.0.20
Compiling syn v1.0.109
Compiling thiserror v1.0.69
Checking tempfile v3.27.0
Compiling libz-sys v1.1.25
Compiling thiserror-impl v1.0.69
Compiling tree-sitter-language v0.1.7
Checking num-integer v0.1.46
Compiling serde_derive_internals v0.29.1
Checking ppv-lite86 v0.2.21
Checking hmac v0.12.1
Checking universal-hash v0.5.1
Checking opaque-debug v0.3.1
Checking spki v0.7.3
Compiling libgit2-sys v0.18.4+1.9.3
Checking signature v2.2.0
Checking ff v0.13.1
Checking base16ct v0.2.0
Compiling schemars_derive v1.2.1
Checking sec1 v0.7.3
Checking group v0.13.0
Checking rand_chacha v0.3.1
Checking crypto-bigint v0.5.5
Checking schemars v1.2.1
Checking elliptic-curve v0.13.8
Compiling amplify_syn v2.0.1
Checking rand v0.8.5
Checking num-iter v0.1.45
Checking aead v0.5.2
Checking signature v1.6.4
Compiling semver v1.0.27
Compiling amplify_derive v4.0.1
Checking ed25519 v1.5.3
Checking poly1305 v0.8.0
Compiling rustc_version v0.4.1
Checking rfc6979 v0.4.0
Checking chacha20 v0.9.1
Checking gix-error v0.2.3
Checking ascii v1.1.0
Checking amplify_num v0.5.3
Checking ct-codecs v1.1.6
Checking ec25519 v0.1.0
Compiling curve25519-dalek v4.1.3
Checking ecdsa v0.16.9
Checking git-ref-format-core v0.6.0
Checking amplify v4.9.0
Checking primeorder v0.13.6
Checking polyval v0.6.2
Compiling num-bigint-dig v0.8.6
Checking base64ct v1.8.3
Checking ghash v0.5.1
Checking cyphergraphy v0.3.1
Checking pkcs8 v0.10.2
Checking pem-rfc7468 v0.7.0
Checking pbkdf2 v0.12.2
Checking ctr v0.9.2
Checking aes v0.8.4
Compiling sqlite3-src v0.7.0
Compiling curve25519-dalek-derive v0.1.1
Checking keccak v0.1.6
Checking sha3 v0.10.8
Checking aes-gcm v0.10.3
Checking ssh-encoding v0.2.0
Checking pkcs1 v0.7.5
Checking ed25519 v2.2.3
Checking cbc v0.1.2
Checking blowfish v0.9.1
Checking base32 v0.4.0
Compiling data-encoding v2.10.0
Checking rsa v0.9.10
Checking cypheraddr v0.4.1
Compiling data-encoding-macro-internal v0.1.17
Checking bcrypt-pbkdf v0.10.0
Checking ssh-cipher v0.2.0
Checking ed25519-dalek v2.2.0
Checking p256 v0.13.2
Checking p384 v0.13.1
Checking p521 v0.13.3
Checking chacha20poly1305 v0.10.1
Checking qcheck v1.0.0
Compiling match-lookup v0.1.2
Checking const-str v0.4.3
Checking base256emoji v1.0.2
Checking data-encoding-macro v0.1.19
Checking ssh-key v0.6.7
Checking noise-framework v0.4.1
Checking socks5-client v0.4.3
Compiling synstructure v0.13.2
Checking secrecy v0.10.3
Checking percent-encoding v2.3.2
Checking base-x v0.2.11
Checking ssh-agent-lib v0.6.0
Checking multibase v0.9.2
Checking cyphernet v0.5.4
Checking utf8parse v0.2.2
Checking jiff v0.2.23
Checking anstyle-query v1.1.5
Compiling zerofrom-derive v0.1.6
Checking zerofrom v0.1.6
Compiling yoke-derive v0.8.1
Checking radicle-localtime v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-localtime)
Checking errno v0.3.14
Checking anstyle v1.0.14
Checking gix-date v0.15.3
Checking is_terminal_polyfill v1.70.2
Checking colorchoice v1.0.5
Checking gix-actor v0.41.0
Checking yoke v0.8.1
Checking gix-hashtable v0.15.0
Checking nonempty v0.9.0
Checking siphasher v1.0.2
Checking gix-object v0.60.0
Checking radicle-git-metadata v0.2.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-git-metadata)
Compiling zerovec-derive v0.11.2
Checking radicle-dag v0.10.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-dag)
Checking memmap2 v0.9.10
Checking nonempty v0.12.0
Checking radicle-git-ref-format v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-git-ref-format)
Checking gix-chunk v0.7.1
Compiling displaydoc v0.2.5
Checking zerovec v0.11.5
Checking base64 v0.21.7
Compiling radicle v0.24.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle)
Checking gix-commitgraph v0.37.0
Checking anstyle-parse v1.0.0
Checking serde-untagged v0.1.9
Checking bytesize v2.3.1
Checking dunce v1.0.5
Checking fast-glob v0.3.3
Checking anstream v1.0.0
Checking gix-revwalk v0.31.0
Checking gix-fs v0.21.1
Checking mio v1.1.1
Checking sem_safe v0.2.1
Checking signals_receipts v0.2.5
Checking gix-tempfile v23.0.0
Checking tinystr v0.8.2
Checking gix-quote v0.7.1
Checking writeable v0.6.2
Checking litemap v0.8.1
Checking potential_utf v0.1.4
Checking icu_locale_core v2.1.1
Checking zerotrie v0.2.3
Checking iana-time-zone v0.1.65
Compiling signal-hook v0.3.18
Compiling icu_properties_data v2.1.2
Checking shell-words v1.1.1
Compiling icu_normalizer_data v2.1.1
Compiling unicode-segmentation v1.12.0
Checking either v1.15.0
Checking gix-command v0.9.0
Compiling convert_case v0.10.0
Checking icu_provider v2.1.1
Checking chrono v0.4.44
Checking icu_collections v2.1.1
Checking radicle-signals v0.11.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-signals)
Checking signal-hook-registry v1.4.8
Checking colored v2.2.0
Compiling rustversion v1.0.22
Compiling object v0.37.3
Compiling derive_more-impl v2.1.1
Checking gix-lock v23.0.0
Checking gix-url v0.36.0
Checking gix-config-value v0.18.0
Checking gix-sec v0.14.0
Checking gimli v0.32.3
Checking adler2 v2.0.1
Compiling portable-atomic v1.13.1
Compiling litrs v1.0.0
Checking unicode-width v0.2.2
Compiling document-features v0.2.12
Checking addr2line v0.25.1
Checking miniz_oxide v0.8.9
Checking gix-prompt v0.15.0
Checking derive_more v2.1.1
Checking icu_normalizer v2.1.1
Checking icu_properties v2.1.2
Checking signal-hook-mio v0.2.5
Checking radicle-log v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-log)
Checking gix-traverse v0.57.0
Checking gix-revision v0.45.0
Checking gix-diff v0.63.0
Checking anstyle-parse v0.2.7
Checking gix-packetline v0.21.3
Checking gix-glob v0.26.0
Checking rustc-demangle v0.1.27
Compiling anyhow v1.0.102
Checking backtrace v0.3.76
Checking gix-refspec v0.41.0
Checking gix-transport v0.57.0
Checking anstream v0.6.21
Checking gix-pack v0.70.0
Checking arc-swap v1.9.1
Checking idna_adapter v1.2.1
Checking crossterm v0.29.0
Checking gix-credentials v0.38.0
Checking console v0.16.3
Checking gix-shallow v0.12.0
Checking gix-ref v0.63.0
Checking gix-negotiate v0.31.0
Checking regex v1.12.3
Compiling maybe-async v0.2.10
Compiling tree-sitter v0.24.7
Compiling proc-macro-error-attr3 v3.0.2
Compiling simd-adler32 v0.3.8
Compiling getrandom v0.3.4
Checking utf8_iter v1.0.4
Checking unit-prefix v0.5.2
Checking idna v1.1.0
Checking indicatif v0.18.4
Checking gix-protocol v0.61.0
Compiling proc-macro-error3 v3.0.2
Checking inquire v0.9.4
Checking gix-odb v0.80.0
Compiling xattr v1.6.1
Checking unicode-display-width v0.3.0
Compiling filetime v0.2.27
Checking uuid v1.22.0
Checking bytes v1.11.1
Compiling flate2 v1.1.9
Compiling tar v0.4.45
Compiling git-ref-format-macro v0.7.0
Checking sqlite3-sys v0.18.0
Checking snapbox-macros v1.1.0
Checking sqlite v0.37.0
Checking salsa20 v0.10.2
Compiling heck v0.5.0
Checking similar v3.1.1
Checking radicle-crypto v0.17.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-crypto)
Checking streaming-iterator v0.1.9
Checking strsim v0.11.1
Checking clap_lex v1.1.0
Checking siphasher v0.3.11
Checking normalize-line-endings v0.3.0
Compiling crossbeam-utils v0.8.21
Checking clap_builder v4.6.0
Checking bloomy v1.2.0
Checking snapbox v1.2.2
Compiling clap_derive v4.6.0
Checking scrypt v0.11.0
Compiling radicle-surf v0.28.0
Checking git-ref-format v0.7.0
Checking form_urlencoded v1.2.2
Checking systemd-journal-logger v2.2.2
Checking toml_datetime v0.7.5+spec-1.1.0
Checking serde_spanned v1.0.4
Compiling tree-sitter-bash v0.23.3
Compiling tree-sitter-md v0.3.2
Compiling tree-sitter-ruby v0.23.1
Compiling tree-sitter-rust v0.23.3
Compiling tree-sitter-css v0.23.2
Compiling tree-sitter-html v0.23.2
Compiling tree-sitter-typescript v0.23.2
Compiling tree-sitter-toml-ng v0.6.0
Compiling tree-sitter-python v0.23.6
Compiling tree-sitter-c v0.23.4
Compiling tree-sitter-json v0.24.8
Compiling tree-sitter-go v0.23.4
Checking toml_writer v1.0.7+spec-1.1.0
Checking radicle-std-ext v0.2.0
Checking pin-project-lite v0.2.17
Checking tokio v1.50.0
Checking toml v0.9.12+spec-1.1.0
Checking clap v4.6.0
Checking url v2.5.8
Checking sysinfo v0.37.2
Compiling radicle-cli v0.21.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cli)
Compiling radicle-node v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-node)
Checking yansi v1.0.1
Checking diff v0.1.13
Checking pretty_assertions v1.4.1
Checking human-panic v2.0.6
Checking crossbeam-channel v0.5.15
Checking structured-logger v1.0.5
Checking clap_complete v4.6.0
Checking radicle-systemd v0.13.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-systemd)
Checking tree-sitter-highlight v0.24.7
Checking itertools v0.14.0
Checking socket2 v0.5.10
Compiling escargot v0.5.15
Checking lexopt v0.3.2
Checking humantime v2.3.0
Checking timeago v0.4.2
Checking bit-vec v0.8.0
Checking bit-set v0.8.0
Checking rand_core v0.9.5
Compiling qcheck-macros v1.0.0
Checking num-bigint v0.4.6
Compiling ahash v0.8.12
Checking num-complex v0.4.6
Checking env_filter v1.0.0
Checking borrow-or-share v0.2.4
Checking env_logger v0.11.9
Checking fluent-uri v0.3.2
Checking phf_shared v0.11.3
Compiling test-log-macros v0.2.19
Checking wait-timeout v0.2.1
Checking num-rational v0.4.2
Checking vsimd v0.8.0
Checking num v0.4.3
Checking outref v0.5.2
Compiling radicle-remote-helper v0.17.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-remote-helper)
Checking fnv v1.0.7
Checking quick-error v1.2.3
Checking uuid-simd v0.8.0
Checking rusty-fork v0.3.1
Checking fraction v0.15.3
Checking test-log v0.2.19
Checking phf v0.11.3
Checking referencing v0.30.0
Checking rand_chacha v0.9.0
Checking rand v0.9.2
Checking rand_xorshift v0.4.0
Checking fancy-regex v0.14.0
Checking email_address v0.2.9
Checking base64 v0.22.1
Checking bytecount v0.6.9
Checking unarray v0.1.4
Checking num-cmp v0.1.0
Checking proptest v1.10.0
Checking emojis v0.6.4
Checking jsonschema v0.30.0
Compiling pastey v0.2.1
Checking radicle-windows v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-windows)
Checking git2 v0.21.0
Checking radicle-oid v0.2.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-oid)
Checking radicle-term v0.18.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-term)
Checking radicle-git-ext v0.13.0
Checking radicle-core v0.3.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-core)
Checking radicle-cob v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cob)
Checking radicle-cli-test v0.13.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cli-test)
Checking radicle-fetch v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-fetch)
Checking radicle-schemars v0.8.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-schemars)
Checking radicle-protocol v0.8.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-protocol)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 44.49s
+ cargo build --all-targets --workspace
Compiling libc v0.2.183
Compiling cfg-if v1.0.4
Compiling zeroize v1.8.2
Compiling typenum v1.19.0
Compiling memchr v2.8.0
Compiling shlex v1.3.0
Compiling subtle v2.6.1
Compiling serde_core v1.0.228
Compiling generic-array v0.14.7
Compiling const-oid v0.9.6
Compiling getrandom v0.2.17
Compiling jobserver v0.1.34
Compiling rand_core v0.6.4
Compiling regex-syntax v0.8.10
Compiling crypto-common v0.1.7
Compiling cc v1.2.57
Compiling aho-corasick v1.1.4
Compiling smallvec v1.15.1
Compiling regex-automata v0.4.14
Compiling block-buffer v0.10.4
Compiling digest v0.10.7
Compiling cpufeatures v0.2.17
Compiling fastrand v2.3.0
Compiling bitflags v2.11.0
Compiling thiserror v2.0.18
Compiling scopeguard v1.2.0
Compiling lock_api v0.4.14
Compiling parking_lot_core v0.9.12
Compiling stable_deref_trait v1.2.1
Compiling typeid v1.0.3
Compiling parking_lot v0.12.5
Compiling erased-serde v0.4.10
Compiling gix-trace v0.1.19
Compiling itoa v1.0.17
Compiling tinyvec_macros v0.1.1
Compiling tinyvec v1.11.0
Compiling serde v1.0.228
Compiling serde_fmt v1.1.0
Compiling hashbrown v0.16.1
Compiling unicode-normalization v0.1.25
Compiling value-bag-serde1 v1.12.0
Compiling byteorder v1.5.0
Compiling value-bag v1.12.0
Compiling gix-utils v0.3.2
Compiling crc32fast v1.5.0
Compiling bstr v1.12.1
Compiling log v0.4.29
Compiling same-file v1.0.6
Compiling walkdir v2.5.0
Compiling prodash v31.0.0
Compiling gix-validate v0.11.1
Compiling gix-path v0.12.0
Compiling zlib-rs v0.6.5
Compiling libm v0.2.16
Compiling hash32 v0.3.1
Compiling linux-raw-sys v0.12.1
Compiling rustix v1.1.4
Compiling num-traits v0.2.19
Compiling heapless v0.8.0
Compiling block-padding v0.3.3
Compiling inout v0.1.4
Compiling getrandom v0.4.2
Compiling sha1 v0.10.6
Compiling faster-hex v0.10.0
Compiling sha2 v0.10.9
Compiling sha1-checked v0.10.0
Compiling cipher v0.4.4
Compiling zerocopy v0.8.42
Compiling equivalent v1.0.2
Compiling once_cell v1.21.4
Compiling indexmap v2.13.0
Compiling zmij v1.0.21
Compiling gix-features v0.48.0
Compiling serde_json v1.0.149
Compiling gix-hash v0.25.0
Compiling der v0.7.10
Compiling spin v0.9.8
Compiling lazy_static v1.5.0
Compiling ref-cast v1.0.25
Compiling dyn-clone v1.0.20
Compiling libz-sys v1.1.25
Compiling tempfile v3.27.0
Compiling num-integer v0.1.46
Compiling hmac v0.12.1
Compiling universal-hash v0.5.1
Compiling opaque-debug v0.3.1
Compiling thiserror v1.0.69
Compiling spki v0.7.3
Compiling libgit2-sys v0.18.4+1.9.3
Compiling signature v2.2.0
Compiling ff v0.13.1
Compiling base16ct v0.2.0
Compiling ppv-lite86 v0.2.21
Compiling sec1 v0.7.3
Compiling group v0.13.0
Compiling schemars v1.2.1
Compiling rand_chacha v0.3.1
Compiling crypto-bigint v0.5.5
Compiling rand v0.8.5
Compiling num-iter v0.1.45
Compiling aead v0.5.2
Compiling signature v1.6.4
Compiling elliptic-curve v0.13.8
Compiling ed25519 v1.5.3
Compiling poly1305 v0.8.0
Compiling rfc6979 v0.4.0
Compiling chacha20 v0.9.1
Compiling gix-error v0.2.3
Compiling ct-codecs v1.1.6
Compiling amplify_num v0.5.3
Compiling ascii v1.1.0
Compiling ec25519 v0.1.0
Compiling ecdsa v0.16.9
Compiling primeorder v0.13.6
Compiling git-ref-format-core v0.6.0
Compiling polyval v0.6.2
Compiling base64ct v1.8.3
Compiling ghash v0.5.1
Compiling amplify v4.9.0
Compiling pem-rfc7468 v0.7.0
Compiling cyphergraphy v0.3.1
Compiling pkcs8 v0.10.2
Compiling pbkdf2 v0.12.2
Compiling aes v0.8.4
Compiling ctr v0.9.2
Compiling sqlite3-src v0.7.0
Compiling keccak v0.1.6
Compiling aes-gcm v0.10.3
Compiling sha3 v0.10.8
Compiling curve25519-dalek v4.1.3
Compiling pkcs1 v0.7.5
Compiling ssh-encoding v0.2.0
Compiling num-bigint-dig v0.8.6
Compiling ed25519 v2.2.3
Compiling cbc v0.1.2
Compiling blowfish v0.9.1
Compiling base32 v0.4.0
Compiling cypheraddr v0.4.1
Compiling rsa v0.9.10
Compiling bcrypt-pbkdf v0.10.0
Compiling ssh-cipher v0.2.0
Compiling ed25519-dalek v2.2.0
Compiling p521 v0.13.3
Compiling p384 v0.13.1
Compiling p256 v0.13.2
Compiling chacha20poly1305 v0.10.1
Compiling qcheck v1.0.0
Compiling const-str v0.4.3
Compiling data-encoding v2.10.0
Compiling data-encoding-macro v0.1.19
Compiling base256emoji v1.0.2
Compiling noise-framework v0.4.1
Compiling ssh-key v0.6.7
Compiling socks5-client v0.4.3
Compiling secrecy v0.10.3
Compiling percent-encoding v2.3.2
Compiling base-x v0.2.11
Compiling multibase v0.9.2
Compiling ssh-agent-lib v0.6.0
Compiling cyphernet v0.5.4
Compiling utf8parse v0.2.2
Compiling jiff v0.2.23
Compiling anstyle-query v1.1.5
Compiling zerofrom v0.1.6
Compiling radicle-localtime v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-localtime)
Compiling errno v0.3.14
Compiling is_terminal_polyfill v1.70.2
Compiling anstyle v1.0.14
Compiling colorchoice v1.0.5
Compiling yoke v0.8.1
Compiling gix-hashtable v0.15.0
Compiling nonempty v0.9.0
Compiling siphasher v1.0.2
Compiling tree-sitter-language v0.1.7
Compiling radicle-git-metadata v0.2.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-git-metadata)
Compiling radicle-dag v0.10.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-dag)
Compiling memmap2 v0.9.10
Compiling nonempty v0.12.0
Compiling gix-date v0.15.3
Compiling gix-actor v0.41.0
Compiling gix-object v0.60.0
Compiling zerovec v0.11.5
Compiling radicle-git-ref-format v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-git-ref-format)
Compiling gix-chunk v0.7.1
Compiling radicle v0.24.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle)
Compiling base64 v0.21.7
Compiling gix-commitgraph v0.37.0
Compiling anstyle-parse v1.0.0
Compiling serde-untagged v0.1.9
Compiling bytesize v2.3.1
Compiling adler2 v2.0.1
Compiling fast-glob v0.3.3
Compiling dunce v1.0.5
Compiling gix-revwalk v0.31.0
Compiling anstream v1.0.0
Compiling gix-fs v0.21.1
Compiling mio v1.1.1
Compiling sem_safe v0.2.1
Compiling signals_receipts v0.2.5
Compiling gix-tempfile v23.0.0
Compiling tinystr v0.8.2
Compiling gix-quote v0.7.1
Compiling writeable v0.6.2
Compiling litemap v0.8.1
Compiling unicode-segmentation v1.12.0
Compiling icu_locale_core v2.1.1
Compiling zerotrie v0.2.3
Compiling potential_utf v0.1.4
Compiling either v1.15.0
Compiling iana-time-zone v0.1.65
Compiling shell-words v1.1.1
Compiling gix-command v0.9.0
Compiling chrono v0.4.44
Compiling icu_collections v2.1.1
Compiling icu_provider v2.1.1
Compiling convert_case v0.10.0
Compiling radicle-signals v0.11.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-signals)
Compiling signal-hook-registry v1.4.8
Compiling colored v2.2.0
Compiling signal-hook v0.3.18
Compiling derive_more-impl v2.1.1
Compiling icu_properties_data v2.1.2
Compiling icu_normalizer_data v2.1.1
Compiling gix-lock v23.0.0
Compiling gix-url v0.36.0
Compiling gix-config-value v0.18.0
Compiling gix-sec v0.14.0
Compiling gimli v0.32.3
Compiling unicode-width v0.2.2
Compiling gix-prompt v0.15.0
Compiling derive_more v2.1.1
Compiling icu_normalizer v2.1.1
Compiling icu_properties v2.1.2
Compiling addr2line v0.25.1
Compiling signal-hook-mio v0.2.5
Compiling object v0.37.3
Compiling radicle-log v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-log)
Compiling gix-revision v0.45.0
Compiling gix-traverse v0.57.0
Compiling miniz_oxide v0.8.9
Compiling gix-diff v0.63.0
Compiling anstyle-parse v0.2.7
Compiling gix-glob v0.26.0
Compiling gix-packetline v0.21.3
Compiling rustc-demangle v0.1.27
Compiling backtrace v0.3.76
Compiling gix-transport v0.57.0
Compiling gix-refspec v0.41.0
Compiling sqlite3-sys v0.18.0
Compiling anstream v0.6.21
Compiling sqlite v0.37.0
Compiling gix-pack v0.70.0
Compiling arc-swap v1.9.1
Compiling radicle-crypto v0.17.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-crypto)
Compiling crossterm v0.29.0
Compiling idna_adapter v1.2.1
Compiling gix-credentials v0.38.0
Compiling portable-atomic v1.13.1
Compiling console v0.16.3
Compiling gix-shallow v0.12.0
Compiling gix-ref v0.63.0
Compiling gix-negotiate v0.31.0
Compiling regex v1.12.3
Compiling tree-sitter v0.24.7
Compiling utf8_iter v1.0.4
Compiling unit-prefix v0.5.2
Compiling indicatif v0.18.4
Compiling idna v1.1.0
Compiling gix-protocol v0.61.0
Compiling gix-odb v0.80.0
Compiling inquire v0.9.4
Compiling xattr v1.6.1
Compiling unicode-display-width v0.3.0
Compiling uuid v1.22.0
Compiling filetime v0.2.27
Compiling bytes v1.11.1
Compiling tar v0.4.45
Compiling git-ref-format-macro v0.7.0
Compiling flate2 v1.1.9
Compiling getrandom v0.3.4
Compiling anyhow v1.0.102
Compiling snapbox-macros v1.1.0
Compiling salsa20 v0.10.2
Compiling streaming-iterator v0.1.9
Compiling similar v3.1.1
Compiling normalize-line-endings v0.3.0
Compiling siphasher v0.3.11
Compiling strsim v0.11.1
Compiling clap_lex v1.1.0
Compiling clap_builder v4.6.0
Compiling snapbox v1.2.2
Compiling bloomy v1.2.0
Compiling radicle-surf v0.28.0
Compiling scrypt v0.11.0
Compiling git-ref-format v0.7.0
Compiling form_urlencoded v1.2.2
Compiling systemd-journal-logger v2.2.2
Compiling tree-sitter-ruby v0.23.1
Compiling tree-sitter-c v0.23.4
Compiling tree-sitter-html v0.23.2
Compiling tree-sitter-typescript v0.23.2
Compiling tree-sitter-go v0.23.4
Compiling tree-sitter-rust v0.23.3
Compiling tree-sitter-css v0.23.2
Compiling tree-sitter-md v0.3.2
Compiling tree-sitter-bash v0.23.3
Compiling tree-sitter-toml-ng v0.6.0
Compiling tree-sitter-python v0.23.6
Compiling tree-sitter-json v0.24.8
Compiling toml_datetime v0.7.5+spec-1.1.0
Compiling serde_spanned v1.0.4
Compiling radicle-std-ext v0.2.0
Compiling toml_writer v1.0.7+spec-1.1.0
Compiling pin-project-lite v0.2.17
Compiling tokio v1.50.0
Compiling toml v0.9.12+spec-1.1.0
Compiling url v2.5.8
Compiling crossbeam-utils v0.8.21
Compiling clap v4.6.0
Compiling sysinfo v0.37.2
Compiling diff v0.1.13
Compiling radicle-node v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-node)
Compiling yansi v1.0.1
Compiling radicle-cli v0.21.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cli)
Compiling pretty_assertions v1.4.1
Compiling human-panic v2.0.6
Compiling clap_complete v4.6.0
Compiling crossbeam-channel v0.5.15
Compiling structured-logger v1.0.5
Compiling radicle-systemd v0.13.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-systemd)
Compiling tree-sitter-highlight v0.24.7
Compiling itertools v0.14.0
Compiling socket2 v0.5.10
Compiling lexopt v0.3.2
Compiling timeago v0.4.2
Compiling humantime v2.3.0
Compiling bit-vec v0.8.0
Compiling bit-set v0.8.0
Compiling escargot v0.5.15
Compiling rand_core v0.9.5
Compiling num-bigint v0.4.6
Compiling num-complex v0.4.6
Compiling env_filter v1.0.0
Compiling borrow-or-share v0.2.4
Compiling fluent-uri v0.3.2
Compiling git2 v0.21.0
Compiling num-rational v0.4.2
Compiling env_logger v0.11.9
Compiling ahash v0.8.12
Compiling num v0.4.3
Compiling phf_shared v0.11.3
Compiling wait-timeout v0.2.1
Compiling vsimd v0.8.0
Compiling quick-error v1.2.3
Compiling fnv v1.0.7
Compiling outref v0.5.2
Compiling radicle-remote-helper v0.17.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-remote-helper)
Compiling rusty-fork v0.3.1
Compiling uuid-simd v0.8.0
Compiling test-log v0.2.19
Compiling phf v0.11.3
Compiling fraction v0.15.3
Compiling referencing v0.30.0
Compiling rand_xorshift v0.4.0
Compiling rand_chacha v0.9.0
Compiling rand v0.9.2
Compiling fancy-regex v0.14.0
Compiling email_address v0.2.9
Compiling radicle-oid v0.2.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-oid)
Compiling radicle-term v0.18.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-term)
Compiling radicle-core v0.3.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-core)
Compiling radicle-cob v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cob)
Compiling radicle-git-ext v0.13.0
Compiling radicle-cli-test v0.13.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cli-test)
Compiling num-cmp v0.1.0
Compiling base64 v0.22.1
Compiling bytecount v0.6.9
Compiling unarray v0.1.4
Compiling jsonschema v0.30.0
Compiling emojis v0.6.4
Compiling proptest v1.10.0
Compiling radicle-fetch v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-fetch)
Compiling radicle-protocol v0.8.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-protocol)
Compiling radicle-schemars v0.8.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-schemars)
Compiling radicle-windows v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-windows)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 56.90s
+ cargo doc --workspace --no-deps --all-features
Downloading crates ...
Downloaded dhat v0.3.3
Downloaded rustc-hash v1.1.0
Downloaded thousands v0.2.0
Downloaded mintex v0.1.4
Checking regex-automata v0.4.14
Compiling num-traits v0.2.19
Checking once_cell v1.21.4
Compiling syn v1.0.109
Checking tempfile v3.27.0
Checking rusty-fork v0.3.1
Checking radicle-localtime v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-localtime)
Checking radicle-git-metadata v0.2.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-git-metadata)
Checking num-integer v0.1.46
Checking proptest v1.10.0
Checking num-iter v0.1.45
Checking num-bigint-dig v0.8.6
Compiling amplify_syn v2.0.1
Checking bstr v1.12.1
Checking gix-validate v0.11.1
Checking git-ref-format-core v0.6.0
Checking gix-path v0.12.0
Checking gix-error v0.2.3
Checking gix-features v0.48.0
Compiling amplify_derive v4.0.1
Checking rsa v0.9.10
Checking radicle-git-ref-format v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-git-ref-format)
Checking gix-date v0.15.3
Checking gix-hash v0.25.0
Checking gix-actor v0.41.0
Checking radicle-oid v0.2.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-oid)
Checking gix-hashtable v0.15.0
Checking ssh-key v0.6.7
Checking gix-object v0.60.0
Checking gix-chunk v0.7.1
Checking radicle-dag v0.10.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-dag)
Checking gix-commitgraph v0.37.0
Checking gix-fs v0.21.1
Checking gix-revwalk v0.31.0
Checking gix-tempfile v23.0.0
Checking gix-quote v0.7.1
Checking ssh-agent-lib v0.6.0
Checking gix-command v0.9.0
Checking chrono v0.4.44
Checking gix-lock v23.0.0
Checking radicle-signals v0.11.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-signals)
Checking gix-url v0.36.0
Checking gix-config-value v0.18.0
Checking amplify v4.9.0
Checking inquire v0.9.4
Checking gix-prompt v0.15.0
Checking gix-revision v0.45.0
Checking cyphergraphy v0.3.1
Checking cypheraddr v0.4.1
Checking noise-framework v0.4.1
Checking gix-traverse v0.57.0
Checking gix-diff v0.63.0
Checking gix-glob v0.26.0
Checking gix-packetline v0.21.3
Checking regex v1.12.3
Checking socks5-client v0.4.3
Checking idna v1.1.0
Checking gix-refspec v0.41.0
Checking cyphernet v0.5.4
Checking radicle-crypto v0.17.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-crypto)
Checking tree-sitter v0.24.7
Checking gix-transport v0.57.0
Checking gix-pack v0.70.0
Checking radicle-log v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-log)
Checking git-ref-format v0.7.0
Checking radicle-cob v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cob)
Checking radicle-core v0.3.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-core)
Checking gix-credentials v0.38.0
Checking gix-shallow v0.12.0
Checking gix-ref v0.63.0
Checking gix-negotiate v0.31.0
Checking radicle-git-ext v0.13.0
Checking radicle v0.24.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle)
Checking url v2.5.8
Checking gix-protocol v0.61.0
Checking gix-odb v0.80.0
Checking radicle-term v0.18.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-term)
Checking uuid v1.22.0
Checking human-panic v2.0.6
Checking radicle-surf v0.28.0
Checking tree-sitter-toml-ng v0.6.0
Checking tree-sitter-highlight v0.24.7
Checking thousands v0.2.0
Checking mintex v0.1.4
Checking rustc-hash v1.1.0
Compiling radicle-node v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-node)
Checking dhat v0.3.3
Checking radicle-systemd v0.13.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-systemd)
Documenting radicle-cli-test v0.13.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cli-test)
Documenting radicle-systemd v0.13.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-systemd)
Documenting radicle v0.24.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle)
Documenting radicle-cob v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cob)
Documenting radicle-core v0.3.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-core)
Documenting radicle-crypto v0.17.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-crypto)
Documenting radicle-term v0.18.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-term)
Documenting radicle-log v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-log)
Documenting radicle-signals v0.11.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-signals)
Documenting radicle-oid v0.2.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-oid)
Documenting radicle-git-ref-format v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-git-ref-format)
Documenting radicle-localtime v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-localtime)
Documenting radicle-git-metadata v0.2.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-git-metadata)
Documenting radicle-dag v0.10.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-dag)
Documenting radicle-windows v0.1.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-windows)
Checking radicle-fetch v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-fetch)
Checking radicle-cli v0.21.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cli)
Documenting radicle-cli v0.21.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-cli)
Documenting radicle-fetch v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-fetch)
Checking radicle-protocol v0.8.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-protocol)
Documenting radicle-protocol v0.8.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-protocol)
Documenting radicle-node v0.20.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-node)
Documenting radicle-schemars v0.8.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-schemars)
Documenting radicle-remote-helper v0.17.0 (/6c65f055-cac2-49e1-acbd-9e485e74ffac/w/crates/radicle-remote-helper)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 9.76s
Generated /6c65f055-cac2-49e1-acbd-9e485e74ffac/w/target/doc/radicle/index.html and 21 other files
+ cargo test --workspace --no-fail-fast
Finished `test` profile [unoptimized + debuginfo] target(s) in 0.16s
Running unittests src/lib.rs (target/debug/deps/radicle-c2440dbc70a5c57f)
running 400 tests
test canonical::formatter::test::ascii_control_characters ... ok
test canonical::formatter::test::securesystemslib_asserts ... ok
test canonical::formatter::test::ordered_nested_object ... ok
test cob::cache::tests::test_check_version ... ok
test cob::cache::migrations::_2::tests::test_patch_json_deserialization ... ok
test cob::common::test::test_color ... ok
test cob::common::test::test_emojis ... ok
test cob::common::test::test_title ... ok
test cob::cache::tests::test_migrate_to ... ok
test cob::cache::migrations::_2::tests::test_migration_2 ... ok
test cob::identity::test::accepted_sibling_causes_rejection ... ok
test cob::identity::test::accept_rejects_sibling_accept ... ok
test cob::identity::test::authorization_based_on_parent_not_current ... ok
test cob::identity::test::cannot_redact_previously_accepted_revision ... ok
test cob::identity::test::concurrent_accept_before_redact_converge ... ok
test cob::identity::test::concurrent_redact_and_accept_converge ... ok
test cob::identity::test::evaluates_queued_children ... ok
test cob::identity::test::cascading_rejections ... ok
test cob::identity::test::evaluation_skips_sibling_accept_in_old_history ... ok
test cob::identity::test::evaluation_strips_author_accept_for_sibling_creation ... ok
test cob::identity::test::has_accepted_active_sibling_returns_true_when_sibling_accepted ... ok
test cob::identity::test::prop_json_eq_str ... ok
test cob::identity::test::evaluates_queued_children_with_new_delegate ... ok
test cob::identity::test::redact_parent_cascades ... ok
test cob::identity::test::reject_concurrent ... ok
test cob::identity::test::remove_delegate_concurrent ... ok
test cob::identity::test::test_identity_redact_revision ... ok
test cob::identity::test::terminal_states_concurrent ... ok
test cob::identity::test::test_identity_updates ... ok
test cob::identity::test::test_identity_update_rejected ... ok
test cob::identity::test::test_identity_cannot_redact_terminal_states ... ok
test cob::identity::test::test_valid_identity ... ok
test cob::identity::test::test_identity_updates_concurrent ... ok
test cob::issue::cache::tests::test_counts ... ok
test cob::issue::cache::tests::test_get ... ok
test cob::issue::cache::tests::test_is_empty ... ok
test cob::identity::test::update_rejects_second_sibling_proposal ... ok
test cob::issue::cache::tests::test_list ... ok
test cob::identity::test::test_identity_updates_concurrent_outdated ... ok
test cob::issue::cache::tests::test_list_by_status ... ok
test cob::issue::cache::tests::test_remove ... ok
test cob::issue::test::test_embeds ... ok
test cob::issue::test::test_embeds_edit ... ok
test cob::issue::test::test_invalid_actions ... ok
test cob::issue::test::test_invalid_cob ... ok
test cob::issue::test::test_invalid_tx ... ok
test cob::issue::test::test_invalid_tx_reference ... ok
test cob::issue::test::test_issue_all ... ok
test cob::issue::test::test_concurrency ... ok
test cob::issue::test::test_issue_comment ... ok
test cob::issue::test::test_issue_comment_redact ... ok
test cob::issue::test::test_issue_create_and_assign ... ok
test cob::issue::test::test_issue_create_and_change_state ... ok
test cob::issue::test::test_issue_create_and_get ... ok
test cob::issue::test::test_issue_create_and_reassign ... ok
test cob::issue::test::test_issue_edit ... ok
test cob::issue::test::test_issue_create_and_unassign ... ok
test cob::issue::test::test_issue_edit_description ... ok
test cob::issue::test::test_issue_multilines ... ok
test cob::issue::test::test_issue_react ... ok
test cob::issue::test::test_issue_state_serde ... ok
test cob::issue::test::test_ordering ... ok
test cob::patch::actions::test::test_review_edit ... ok
test cob::issue::test::test_issue_label ... ok
test cob::issue::test::test_issue_reply ... ok
test cob::patch::cache::tests::test_get ... ok
test cob::patch::cache::tests::test_is_empty ... ok
test cob::patch::cache::tests::test_list ... ok
test cob::patch::cache::tests::test_list_by_status ... ok
test cob::patch::cache::tests::test_counts ... ok
test cob::patch::encoding::review::test::test_review_deserialize_summary_migration_null_summary ... ok
test cob::patch::encoding::review::test::test_review_deserialize_summary_migration_with_summary ... ok
test cob::patch::encoding::review::test::test_review_deserialize_summary_migration_without_summary ... ok
test cob::patch::encoding::review::test::test_review_deserialize_summary_v2 ... ok
test cob::patch::encoding::review::test::test_review_summary ... ok
test cob::patch::test::test_json ... ok
test cob::patch::test::test_json_serialisation_target ... ok
test cob::patch::test::test_json_serialization ... ok
test cob::patch::test::test_merge_target_resolution ... ok
test cob::patch::cache::tests::test_remove ... ok
test cob::patch::test::test_patch_create_and_get ... ok
test cob::patch::test::test_patch_discussion ... ok
test cob::patch::test::test_patch_merge_authorization_ref_formats ... ok
test cob::patch::test::test_patch_merge_custom_destination_authorized ... ok
test cob::patch::test::test_patch_merge_custom_destination_unauthorized ... ok
test cob::patch::test::test_patch_merge ... ok
test cob::patch::test::test_patch_redact ... ok
test cob::patch::test::test_patch_review ... ok
test cob::patch::test::test_patch_review_comment ... ok
test cob::patch::test::test_patch_review_duplicate ... ok
test cob::patch::test::test_patch_review_edit ... ok
test cob::patch::test::test_patch_review_edit_comment ... ok
test cob::patch::test::test_patch_review_remove_summary ... ok
test cob::patch::test::test_patch_review_revision_redact ... ok
test cob::patch::test::test_reactions_json_serialization ... ok
test cob::patch::test::test_revision_edit_redact ... ok
test cob::patch::test::test_revision_reaction ... ok
test cob::patch::test::test_revision_review_merge_redacted ... ok
test cob::patch::test::test_target_branch ... ok
test cob::stream::tests::test_all_from ... ok
test cob::stream::tests::test_all_from_until ... ok
test cob::patch::test::test_patch_update ... ok
test cob::stream::tests::test_all_until ... ok
test cob::stream::tests::test_from_until ... ok
test cob::stream::tests::test_regression_from_until ... ok
test cob::thread::tests::test_comment_edit_missing ... ok
test cob::thread::tests::test_comment_edit_redacted ... ok
test cob::thread::tests::test_comment_redact_missing ... ok
test cob::thread::tests::test_duplicate_comments ... ok
test cob::thread::tests::test_edit_comment ... ok
test cob::thread::tests::test_redact_comment ... ok
test cob::thread::tests::test_timeline ... ok
test git::canonical::protect::tests::refs_rad ... ok
test git::canonical::protect::tests::refs_rad_id ... ok
test git::canonical::protect::tests::refs_radieschen ... ok
test git::canonical::quorum::test::merge_base_commutative ... ok
test git::canonical::quorum::test::test_merge_bases ... ok
test git::canonical::rules::test::canonical ... ok
test git::canonical::rules::test::deserialization ... ok
test git::canonical::rules::test::deserialize_extensions ... ok
test git::canonical::rules::test::matches_exactly_curly_braces ... ok
test git::canonical::rules::test::matches_expands_globs_appropriately ... ok
test git::canonical::rules::test::ordering ... ok
test git::canonical::rules::test::property::identity ... ok
test git::canonical::rules::test::property::prefix ... ok
test git::canonical::rules::test::property::prefix_negative ... ok
test git::canonical::rules::test::property::suffix ... ok
test git::canonical::rules::test::property::suffix_negative ... ok
test git::canonical::rules::test::property::trailing_asterisk_partial_component ... ok
test git::canonical::rules::test::roundtrip ... ok
test cob::patch::cache::tests::test_find_by_revision ... ok
test git::canonical::rules::test::rule_validate_success ... ok
test git::canonical::rules::test::special_branches ... ok
test git::canonical::symbolic::test::deserialize_infinite ... ok
test git::canonical::symbolic::test::deserialize_order ... ok
test git::canonical::symbolic::test::deserialize_valid ... ok
test git::canonical::symbolic::test::infinite_extend ... ok
test git::canonical::symbolic::test::infinite_multi ... ok
test git::canonical::symbolic::test::infinite_single ... ok
test git::canonical::symbolic::test::reclassification_combine ... ok
test git::canonical::symbolic::test::reclassification_combine_reverse ... ok
test git::canonical::symbolic::test::reclassification_diamond ... ok
test git::canonical::symbolic::test::reclassification_order_invariant ... ok
test git::canonical::symbolic::test::reclassification_reverse_chain ... ok
test git::canonical::symbolic::test::resolve_two_hop_chain ... ok
test git::canonical::symbolic::test::target_classification ... ok
test git::canonical::symbolic::test::target_classification_symbolic ... ok
test git::canonical::symbolic::test::target_reclassification ... ok
test git::canonical::symbolic::test::target_reclassification_commutative ... ok
test git::canonical::tests::test_commit_quorum_fork_of_a_fork ... ok
test git::canonical::tests::test_commit_quorum_forked_merge_commits ... ok
test git::canonical::tests::test_commit_quorum_groups ... ok
test git::canonical::tests::test_commit_quorum_linear ... ok
test git::canonical::tests::test_commit_quorum_merges ... ok
test git::canonical::tests::test_commit_quorum_single ... ok
test git::canonical::tests::test_commit_quorum_three_way_fork ... ok
test git::canonical::tests::test_commit_quorum_two_way_fork ... ok
test git::canonical::tests::test_quorum_different_types ... ok
test git::canonical::rules::test::rule_validate_failures ... ok
test git::canonical::tests::test_tag_quorum ... ok
test git::test::test_version_from_str ... ok
test git::test::test_version_ord ... ok
test identity::crefs::tests::invalid_clash ... ok
test identity::crefs::tests::invalid_clash_asterisk_name ... ok
test identity::crefs::tests::invalid_dangling ... ok
test identity::crefs::tests::omit_symbolic ... ok
test identity::crefs::tests::valid ... ok
test identity::crefs::tests::valid_asterisk_target ... ok
test identity::did::test::test_did_encode_decode ... ok
test identity::did::test::test_did_vectors ... ok
test identity::doc::test::default_branch_clash ... ok
test identity::doc::test::default_branch_without_project ... ok
test cob::thread::tests::prop_ordering ... ok
test git::canonical::tests::test_quorum_properties ... ok
test identity::doc::test::test_canonical_example ... ok
test identity::doc::test::test_canonical_doc ... ok
test identity::doc::test::test_duplicate_dids ... ok
test identity::doc::test::test_future_version_error ... ok
test identity::doc::test::test_is_valid_version ... ok
test identity::doc::test::test_not_found ... ok
test identity::doc::test::test_parse_version ... ok
test identity::doc::test::test_visibility_json ... ok
test identity::doc::update::test::test_can_update_crefs ... ok
test identity::doc::update::test::test_cannot_include_default_branch_rule ... ok
test identity::doc::update::test::test_default_branch_rule_exists_after_verification ... ok
test identity::project::test::test_project_name ... ok
test node::address::store::test::skip_invalid_address_type ... ok
test node::address::store::test::skip_mismatched_address_type ... ok
test node::address::store::test::test_alias ... ok
test node::address::store::test::test_disconnected ... ok
test node::address::store::test::test_disconnected_ban ... ok
test node::address::store::test::test_empty ... ok
test node::address::store::test::test_entries ... ok
test node::address::store::test::test_entries_skips_unparsable_address ... ok
test node::address::store::test::test_get_none ... ok
test node::address::store::test::test_insert_and_get ... ok
test node::address::store::test::test_insert_and_remove ... ok
test node::address::store::test::test_insert_and_update ... ok
test node::address::store::test::test_insert_duplicate ... ok
test node::address::store::test::test_node_aliases ... ok
test node::address::store::test::test_remove_nothing ... ok
test node::command::test::command_result ... ok
test node::config::test::deserialize_migrating_scope ... ok
test node::config::test::fetch_level_min ... ok
test node::config::test::onion_absent ... ok
test identity::doc::test::test_max_delegates ... ok
test node::config::test::partial ... ok
test node::config::test::regression_ipv6_address_brackets ... ok
test node::config::test::regression_ipv6_address_no_brackets ... ok
test node::config::test::serialize_migrating_scope ... ok
test node::config::test::user_agent_custom ... ok
test node::config::test::user_agent_default ... ok
test node::config::test::user_agent_default_explicit ... ok
test node::config::test::user_agent_opt_out ... ok
test node::config::test::onion_null ... ok
test node::db::config::test::database_config_valid_combinations ... ok
test node::db::config::test::invalid ... ok
test node::db::test::migration_8::dns_address_starting_with_bracket_but_missing_closing_bracket_colon_is_unaffected ... ok
test node::db::test::migration_8::all_ipv6_formatted_dns_addresses_are_retyped ... ok
test node::db::test::migration_8::ipv4_address_is_unaffected ... ok
test node::db::test::migration_8::dns_address_with_bracket_not_at_start_is_unaffected ... ok
test node::db::test::migration_8::ipv6_formatted_dns_address_is_retyped_to_ipv6 ... ok
test node::db::test::migration_8::migration_applies_to_all_nodes ... ok
test node::db::test::migration_8::ipv6_formatted_dns_address_is_deleted_when_correct_ipv6_row_already_exists ... ok
test node::db::test::migration_8::plain_dns_hostname_without_brackets_is_unaffected ... ok
test node::db::test::migration_8::retype_preserves_address_metadata ... ok
test node::db::test::migration_9::bracketed_non_ipv6_garbage_is_deleted ... ok
test node::db::test::migration_9::dns_row_is_unaffected_even_when_inner_part_has_no_colon ... ok
test node::db::test::migration_9::empty_brackets_ipv6_row_is_deleted ... ok
test node::db::test::migration_9::full_ipv6_address_is_kept ... ok
test node::db::test::migration_9::ipv4_row_is_unaffected ... ok
test node::db::test::migration_9::loopback_address_is_kept ... ok
test node::db::test::migration_9::unspecified_address_is_kept ... ok
test node::db::test::test_version ... ok
test node::features::test::test_operations ... ok
test node::notifications::store::test::test_clear ... ok
test node::notifications::store::test::test_branch_notifications ... ok
test node::notifications::store::test::test_cob_notifications ... ok
test node::notifications::store::test::test_counts_by_repo ... ok
test node::notifications::store::test::test_duplicate_notifications ... ok
test node::notifications::store::test::test_notification_status ... ok
test node::policy::store::test::test_follow_and_unfollow_node ... ok
test node::policy::store::test::test_node_policies ... ok
test node::policy::store::test::test_node_aliases ... ok
test node::policy::store::test::test_node_policy ... ok
test node::policy::store::test::test_repo_policies ... ok
test node::policy::store::test::test_repo_policy ... ok
test node::policy::store::test::test_seed_and_unseed_repo ... ok
test node::policy::store::test::test_update_scope ... ok
test node::policy::store::test::test_update_alias ... ok
test node::refs::store::test::test_count ... ok
test node::refs::store::test::test_set_and_delete ... ok
test node::refs::store::test::test_set_and_get ... ok
test node::routing::test::test_count ... ok
test node::routing::test::test_entries ... ok
test node::routing::test::test_insert_and_get ... ok
test node::routing::test::test_insert_and_get_resources ... ok
test node::routing::test::test_insert_and_remove ... ok
test node::routing::test::test_insert_duplicate ... ok
test node::routing::test::test_insert_existing_updated_time ... ok
test node::routing::test::test_len ... ok
test node::routing::test::test_remove_many ... ok
test node::routing::test::test_remove_redundant ... ok
test node::routing::test::test_update_existing_multi ... ok
test node::sync::announce::test::all_synced_nodes_are_preferred_seeds ... ok
test node::sync::announce::test::announcer_adapts_target_to_reach ... ok
test node::routing::test::test_prune ... ok
test node::sync::announce::test::announcer_preferred_seeds_or_replica_factor ... ok
test node::sync::announce::test::announcer_reached_max_replication_target ... ok
test node::sync::announce::test::announcer_reached_min_replication_target ... ok
test node::sync::announce::test::announcer_reached_preferred_seeds ... ok
test node::sync::announce::test::announcer_synced_with_unknown_node ... ok
test node::sync::announce::test::announcer_with_replication_factor_zero_and_preferred_seeds ... ok
test node::sync::announce::test::announcer_timed_out ... ok
test node::sync::announce::test::construct_node_appears_in_multiple_input_sets ... ok
test node::sync::announce::test::construct_only_preferred_seeds_provided ... ok
test node::sync::announce::test::cannot_construct_announcer ... ok
test node::sync::announce::test::invariant_progress_should_match_state ... ok
test node::sync::announce::test::local_node_in_multiple_sets ... ok
test node::sync::announce::test::local_node_in_preferred_seeds ... ok
test node::sync::announce::test::local_node_in_unsynced_set ... ok
test node::sync::announce::test::local_node_in_synced_set ... ok
test node::sync::announce::test::local_node_only_in_all_sets_results_in_no_seeds_error ... ok
test node::sync::announce::test::synced_with_local_node_is_ignored ... ok
test node::sync::announce::test::preferred_seeds_already_synced ... ok
test node::sync::announce::test::synced_with_same_node_multiple_times ... ok
test node::sync::announce::test::timed_out_after_reaching_success ... ok
test node::sync::fetch::test::all_nodes_are_candidates ... ok
test node::sync::fetch::test::all_nodes_are_fetchable ... ok
test node::sync::fetch::test::could_not_reach_target ... ok
test node::sync::fetch::test::ignores_duplicates_and_local_node ... ok
test node::sync::fetch::test::preferred_seeds_target_returned_over_replicas ... ok
test node::sync::fetch::test::reaches_target_of_max_replicas ... ok
test node::sync::fetch::test::reaches_target_of_preferred_seeds ... ok
test node::sync::test::ensure_replicas_construction ... ok
test node::sync::test::replicas_constrain_to ... ok
test node::test::test_address ... ok
test node::test::test_alias ... ok
test node::test::test_command_result ... ok
test node::test::test_user_agent ... ok
test node::timestamp::tests::test_timestamp_max ... ok
test node::sync::fetch::test::reaches_target_of_replicas ... ok
test profile::test::canonicalize_home ... ok
test profile::test::test_config ... ok
test rad::tests::test_checkout ... ok
test rad::tests::test_fork ... ok
test rad::tests::test_init ... ok
test profile::config::test::schema ... ok
test storage::git::tests::test_sign_refs ... ok
test storage::git::tests::test_references_of ... ok
test storage::git::transport::local::url::test::test_url_to_string ... ok
test storage::git::transport::local::url::test::test_url_parse ... ok
test storage::git::transport::remote::url::test::test_url_parse ... ok
test identity::doc::test::prop_encode_decode ... ok
test storage::refs::sigrefs::git::properties::idempotent_write ... ok
test cob::identity::test::property::prop_invariants ... ok
test storage::refs::sigrefs::git::properties::initial_commit_roundtrip ... ok
test storage::refs::sigrefs::read::test::commit_reader::identity_root_error ... ok
test storage::refs::sigrefs::read::test::commit_reader::missing_commit ... ok
test storage::refs::sigrefs::read::test::commit_reader::read_ok ... ok
test storage::refs::sigrefs::read::test::commit_reader::too_many_parents ... ok
test storage::refs::sigrefs::read::test::commit_reader::tree_error ... ok
test storage::refs::sigrefs::read::test::identity_root_reader::doc_blob_error ... ok
test storage::refs::sigrefs::read::test::identity_root_reader::missing_identity ... ok
test storage::refs::sigrefs::read::test::identity_root_reader::read_ok_none ... ok
test storage::refs::sigrefs::read::test::identity_root_reader::read_ok_some ... ok
test storage::refs::sigrefs::read::test::resolve_tip::find_reference_error ... ok
test storage::refs::sigrefs::read::test::resolve_tip::missing_sigrefs ... ok
test storage::refs::sigrefs::read::test::resolve_tip::resolve_tip_ok ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::detect_parent::root_without_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::detect_parent::root_without_root ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::restore ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::root ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::downgrade::root_with_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::head_commit_error ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::head_verify_mismatched_identity_error ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::head_verify_signature_error ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::invalid_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::read_ok_no_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::read_ok_parent ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::read_ok_root ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::replay::alternating ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::replay::chain ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::replay::multiple ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::replay::root_at_head ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::single_commit ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::two_commits ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::walk_commit_error ... ok
test storage::refs::sigrefs::read::test::signed_refs_reader::walk_verify_error ... ok
test storage::refs::sigrefs::read::test::tree_reader::missing_both ... ok
test storage::refs::sigrefs::read::test::tree_reader::missing_refs ... ok
test storage::refs::sigrefs::read::test::tree_reader::missing_signature ... ok
test storage::refs::sigrefs::read::test::tree_reader::parse_refs_error ... ok
test storage::refs::sigrefs::read::test::tree_reader::parse_signature_error ... ok
test storage::refs::sigrefs::read::test::tree_reader::read_ok ... ok
test storage::refs::sigrefs::read::test::tree_reader::read_refs_error ... ok
test storage::refs::sigrefs::read::test::tree_reader::read_signature_error ... ok
test storage::refs::sigrefs::write::test::commit_writer::tree_error ... ok
test storage::refs::sigrefs::write::test::commit_writer::write_commit_error ... ok
test storage::refs::sigrefs::write::test::commit_writer::write_empty_refs ... ok
test storage::refs::sigrefs::write::test::commit_writer::write_root_ok ... ok
test storage::refs::sigrefs::write::test::commit_writer::write_with_parent_ok ... ok
test storage::refs::sigrefs::write::test::head_reader::no_head ... ok
test storage::refs::sigrefs::write::test::head_reader::read_ok ... ok
test storage::refs::sigrefs::write::test::head_reader::reference_error ... ok
test storage::refs::sigrefs::write::test::head_reader::refs_blob_error ... ok
test storage::refs::sigrefs::write::test::head_reader::refs_blob_missing ... ok
test storage::refs::sigrefs::write::test::head_reader::refs_parse_error ... ok
test storage::refs::sigrefs::write::test::head_reader::signature_blob_error ... ok
test storage::refs::sigrefs::write::test::head_reader::signature_blob_missing ... ok
test storage::refs::sigrefs::write::test::head_reader::signature_parse_error ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::commit_error ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::head_error ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::never_write_rad_sigrefs ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::reference_error ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::unchanged ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::unchanged_force_writes_new_commit ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::write_empty_refs ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::write_root_ok ... ok
test storage::refs::sigrefs::write::test::signed_refs_writer::write_with_parent_ok ... ok
test storage::refs::sigrefs::write::test::tree_writer::sign_error ... ok
test storage::refs::sigrefs::write::test::tree_writer::write_ok ... ok
test storage::refs::sigrefs::write::test::tree_writer::write_tree_error ... ok
test storage::refs::tests::prop_canonical_roundtrip ... ok
test storage::refs::sigrefs::property::idempotent ... ok
test storage::tests::test_storage ... ok
test test::assert::test::assert_with_message ... ok
test test::assert::test::test_assert_no_move ... ok
test test::assert::test::test_assert_panic_0 - should panic ... ok
test test::assert::test::test_assert_panic_1 - should panic ... ok
test test::assert::test::test_assert_panic_2 - should panic ... ok
test test::assert::test::test_assert_succeed ... ok
test test::assert::test::test_panic_message ... ok
test version::test::test_version ... ok
test web::test::description_only ... ok
test web::test::pinned_empty ... ok
test storage::refs::tests::test_rid_verification ... ok
test storage::refs::sigrefs::property::roundtrip ... ok
test storage::refs::sigrefs::git::properties::chain_roundtrip ... ok
test result: ok. 400 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.50s
Running unittests src/lib.rs (target/debug/deps/radicle_cli-9eccae0eacc32565)
running 46 tests
test commands::block::args::test::should_not_parse ... ok
test commands::block::args::test::should_parse_nid ... ok
test commands::block::args::test::should_parse_rid ... ok
test commands::clone::args::test::should_parse_rid_urn ... ok
test commands::clone::args::test::should_parse_rid_non_urn ... ok
test commands::clone::args::test::should_parse_rid_url ... ok
test commands::cob::args::test::should_allow_log_json_format ... ok
test commands::cob::args::test::should_allow_show_json_format ... ok
test commands::cob::args::test::should_allow_update_json_format ... ok
test commands::cob::args::test::should_not_allow_show_pretty_format ... ok
test commands::fork::args::test::should_not_parse_rid_url ... ok
test commands::fork::args::test::should_parse_rid_non_urn ... ok
test commands::cob::args::test::should_allow_log_pretty_format ... ok
test commands::cob::args::test::should_not_allow_update_pretty_format ... ok
test commands::fork::args::test::should_parse_rid_urn ... ok
test commands::id::args::test::should_not_parse_into_payload - should panic ... ok
test commands::id::args::test::should_not_parse_single_payload ... ok
test commands::id::args::test::should_not_clobber_payload_args ... ok
test commands::id::args::test::should_not_parse_single_payloads ... ok
test commands::id::args::test::should_parse_into_payload ... ok
test commands::init::args::test::should_not_parse_rid_url ... ok
test commands::id::args::test::should_parse_multiple_payloads ... ok
test commands::id::args::test::should_parse_single_payload ... ok
test commands::init::args::test::should_parse_rid_non_urn ... ok
test commands::init::args::test::should_parse_rid_urn ... ok
test commands::patch::review::builder::tests::test_review_comments_before ... ok
test commands::patch::review::builder::tests::test_review_comments_basic ... ok
test commands::inspect::test::test_tree ... ok
test commands::patch::review::builder::tests::test_review_comments_multiline ... ok
test commands::patch::review::builder::tests::test_review_comments_split_hunk ... ok
test commands::publish::args::test::should_not_parse_rid_url ... ok
test commands::publish::args::test::should_parse_rid_urn ... ok
test commands::watch::args::test::should_parse_ref_str ... ok
test commands::publish::args::test::should_parse_rid_non_urn ... ok
test git::pretty_diff::test::test_pretty ... ignored
test git::ddiff::tests::diff_encode_decode_ddiff_hunk ... ok
test git::unified_diff::test::test_diff_content_encode_decode_content ... ok
test terminal::args::test::should_not_parse ... ok
test git::unified_diff::test::test_diff_encode_decode_diff ... ok
test terminal::args::test::should_parse_nid ... ok
test terminal::args::test::should_parse_rid ... ok
test terminal::format::test::test_strip_comments ... ok
test terminal::format::test::test_bytes ... ok
test terminal::patch::test::test_edit_display_message ... ok
test terminal::patch::test::test_create_display_message ... ok
test terminal::patch::test::test_update_display_message ... ok
test result: ok. 45 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.01s
Running unittests src/main.rs (target/debug/deps/rad-c7621ee6062aa362)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running tests/commands.rs (target/debug/deps/commands-304e1ac0c474d04a)
running 126 tests
test commands::checkout::rad_checkout ... ok
test commands::clone::rad_clone_bare ... ok
test commands::clone::rad_clone ... ok
test commands::clone::rad_clone_all ... ok
test commands::clone::rad_clone_scope ... ok
test commands::clone::rad_clone_connect ... ok
test commands::clone::rad_clone_unknown ... ok
test commands::clone::rad_clone_directory ... ok
test commands::clone::rad_clone_partial_fail ... ok
test commands::cob::rad_cob_multiset ... ok
test commands::clone::test_clone_without_seeds ... ok
test commands::cob::rad_cob_migrate ... ok
test commands::cob::rad_cob_log ... ok
test commands::cob::rad_cob_operations ... ok
test commands::cob::rad_cob_show ... ok
test commands::cob::rad_cob_update_identity ... ok
test commands::cob::test_cob_deletion ... ok
test commands::cob::rad_cob_update ... ok
test commands::cob::test_cob_replication ... ok
test commands::git::git_push_amend ... ok
test commands::git::git_push_and_fetch ... ok
test commands::git::git_push_canonical_lightweight_tags ... ok
test commands::git::git_push_diverge ... ok
test commands::git::git_push_force_with_lease ... ok
test commands::git::git_push_canonical ... ok
test commands::git::git_push_converge ... ok
test commands::id::rad_id_collaboration ... ignored, slow
test commands::id::rad_id ... ok
test commands::git::git_tag ... ok
test commands::git::git_push_rollback ... ok
test commands::id::rad_id_private ... ok
test commands::id::rad_id_conflict ... ok
test commands::id::rad_id_threshold_soft_fork ... ok
test commands::id::rad_id_threshold ... ok
test commands::id::rad_id_unknown_field ... ok
test commands::id::rad_id_update_delete_field ... ok
test commands::init::rad_init ... ignored, part of many other tests
test commands::id::rad_id_unauthorized_delegate ... ok
test commands::init::rad_init_detached_head ... ok
test commands::id::rad_id_multi_delegate ... ok
test commands::init::rad_init_bare ... ok
test commands::init::rad_init_existing ... ok
test commands::init::rad_init_existing_bare ... ok
test commands::init::rad_init_no_git ... ok
test commands::init::rad_init_no_seed ... ok
test commands::init::rad_init_private ... ok
test commands::init::rad_init_private_no_seed ... ok
test commands::init::rad_init_private_clone ... ok
test commands::init::rad_init_private_clone_seed ... ok
test commands::inbox::rad_inbox ... ok
test commands::init::rad_init_private_seed ... ok
test commands::init::rad_init_sync_not_connected ... ok
test commands::init::rad_init_sync_preferred ... ok
test commands::init::rad_init_with_existing_remote ... ok
test commands::init::rad_publish ... ok
test commands::issue::rad_issue ... ok
test commands::jj::rad_jj_bare ... ignored, the bare repository does not have a `rad` remote, and so it cannot determine the RID of the repository
test commands::jj::rad_jj_colocated_patch ... ok
test commands::issue::rad_issue_list ... ok
test commands::node::rad_node_connect ... ok
test commands::node::rad_node_connect_without_address ... ok
test commands::patch::rad_merge_after_update ... ok
test commands::node::rad_node ... ok
test commands::patch::rad_merge_no_ff ... ok
test commands::patch::rad_merge_via_push ... ok
test commands::patch::rad_patch ... ok
test commands::patch::rad_patch_ahead_behind ... ok
test commands::patch::rad_patch_change_base ... ok
test commands::patch::rad_patch_checkout ... ok
test commands::init::rad_init_sync_timeout ... ok
test commands::init::rad_init_sync_and_clone ... ok
test commands::patch::rad_patch_checkout_revision ... ok
test commands::patch::rad_patch_detached_head ... ok
test commands::patch::rad_patch_checkout_force ... ok
test commands::patch::rad_patch_draft ... ok
test commands::patch::rad_patch_diff ... ok
test commands::patch::rad_patch_fetch_2 ... ok
test commands::patch::rad_patch_edit ... ok
test commands::patch::rad_patch_fetch_1 ... ok
test commands::patch::rad_patch_merge_draft ... ok
test commands::patch::rad_patch_delete ... ok
test commands::patch::rad_patch_magic_push ... ok
test commands::patch::rad_patch_merge_into_canonical_ref_branch ... ok
test commands::patch::rad_patch_merge_wrong_branch ... ok
test commands::patch::rad_patch_merge_on_first_push ... ok
test commands::patch::rad_patch_merge_unauthorized_branch ... ok
test commands::patch::rad_patch_open_explore ... ok
test commands::patch::rad_patch_revert_merge ... ok
test commands::patch::rad_patch_revert_custom_branch ... ok
test commands::patch::rad_patch_update ... ok
test commands::patch::rad_patch_review_no_options ... ok
test commands::patch::rad_patch_via_push ... ok
test commands::policy::rad_block ... ok
test commands::patch::rad_review_by_hunk ... ok
test commands::policy::rad_seed_and_follow ... ok
test commands::policy::rad_seed_policy_allow_no_scope ... ok
test commands::policy::rad_seed_scope ... ok
test commands::policy::rad_unseed ... ok
test commands::policy::rad_seed_many ... ok
test commands::policy::rad_unseed_many ... ok
test commands::sigpipe::config ... ok
test commands::sigpipe::help ... ok
test commands::patch::rad_push_and_pull_patches ... ok
test commands::sigpipe::rad_self ... ok
test commands::remote::rad_remote ... ok
test commands::sync::rad_sync_without_node ... ok
test commands::sync::rad_sync ... ok
test commands::utility::framework_home ... ok
test commands::utility::rad_auth ... ok
test commands::utility::rad_auth_errors ... ok
test commands::patch::rad_patch_pull_update ... ok
test commands::utility::rad_config ... ok
test commands::utility::rad_diff ... ok
test commands::utility::rad_clean ... ok
test commands::utility::rad_help ... ok
test commands::utility::rad_inspect ... ok
test commands::utility::rad_key_mismatch ... ok
test commands::utility::rad_self ... ok
test commands::utility::rad_warn_ipv6 ... ok
test commands::utility::rad_warn_old_nodes ... ok
test commands::sync::rad_fetch ... ok
test commands::watch::rad_watch ... ok
test rad_remote ... ok
test commands::workflow::rad_workflow ... ok
test commands::sync::test_replication_via_seed ... ok
test commands::utility::rad_fork ... ok
test result: ok. 123 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 75.48s
Running unittests src/lib.rs (target/debug/deps/radicle_cli_test-914a3b3458da1b01)
running 3 tests
test tests::test_parse ... ok
test tests::test_run ... ok
test tests::test_example_spaced_brackets ... ok
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_cob-6af742c220ef4354)
running 9 tests
test object::tests::test_serde ... ok
test tests::git::roundtrip ... ok
test tests::git::list_cobs ... ok
test tests::git::traverse_cobs ... ok
test tests::parse_refstr ... ok
test tests::invalid_parse_refstr ... ok
test type_name::test::invalid_typenames ... ok
test type_name::test::valid_typenames ... ok
test tests::git::update_cob ... ok
test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
Running unittests src/lib.rs (target/debug/deps/radicle_core-5ab1e6915524c7ca)
running 4 tests
test repo::test::valid ... ok
test repo::test::invalid ... ok
test repo::test::assert_prop_roundtrip_parse ... ok
test repo::serde_impls::test::assert_prop_roundtrip_serde_json ... ok
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_crypto-a260bd681cb2a820)
running 11 tests
test ssh::agent::test::test_agent_encoding_remove ... ok
test ssh::agent::test::test_agent_encoding_sign ... ok
test ssh::fmt::test::test_key ... ok
test ssh::fmt::test::test_fingerprint ... ok
test ssh::keystore::tests::test_init_no_passphrase ... ok
test tests::prop_encode_decode ... ok
test tests::test_e25519_dh ... ok
test tests::test_encode_decode ... ok
test tests::prop_key_equality ... ok
test ssh::keystore::tests::test_signer ... ok
test ssh::keystore::tests::test_init_passphrase ... ok
test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.82s
Running unittests src/lib.rs (target/debug/deps/radicle_dag-cba03ea2f40c887a)
running 20 tests
test tests::test_contains ... ok
test tests::test_cycle ... ok
test tests::test_dependencies ... ok
test tests::test_diamond ... ok
test tests::test_fold_diamond ... ok
test tests::test_fold_multiple_roots ... ok
test tests::test_fold_reject ... ok
test tests::test_fold_sorting_1 ... ok
test tests::test_fold_sorting_2 ... ok
test tests::test_get ... ok
test tests::test_len ... ok
test tests::test_is_empty ... ok
test tests::test_merge_1 ... ok
test tests::test_merge_2 ... ok
test tests::test_prune_1 ... ok
test tests::test_complex ... ok
test tests::test_prune_2 ... ok
test tests::test_remove ... ok
test tests::test_siblings ... ok
test tests::test_prune_by_sorting ... ok
test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_fetch-0cdd8ef9fd53c852)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_git_metadata-10d7506669fe8c72)
running 24 tests
test commit::parse::test::error::invalid_author ... ok
test commit::parse::test::error::invalid_committer ... ok
test commit::parse::test::error::invalid_format_continuation_without_preceding_header ... ok
test commit::parse::test::error::missing_author ... ok
test commit::parse::test::error::missing_committer ... ok
test commit::parse::test::error::invalid_parent ... ok
test commit::parse::test::error::invalid_tree ... ok
test commit::parse::test::error::missing_header_body_separator ... ok
test commit::parse::test::error::missing_tree_empty_header ... ok
test commit::parse::test::error::missing_tree_wrong_first_line ... ok
test commit::parse::test::success::commit_last_paragraph_kept_in_message_when_not_all_trailers ... ok
test commit::parse::test::success::commit_with_extra_headers ... ok
test commit::parse::test::success::commit_with_multiline_gpgsig ... ok
test commit::parse::test::success::merge_commit ... ok
test commit::parse::test::success::commit_gpgsig_is_preserved_and_strip_removes_it ... ok
test commit::parse::test::success::commit_with_single_parent ... ok
test commit::parse::test::success::commit_with_trailers ... ok
test commit::parse::test::success::root_commit ... ok
test commit::parse::test::unit::body_no_paragraph_separator_means_no_trailers ... ok
test commit::parse::test::success::roundtrip ... ok
test commit::parse::test::unit::body_last_paragraph_not_trailers_stays_in_message ... ok
test commit::parse::test::unit::trailers_accepts_empty_input ... ok
test commit::parse::test::unit::trailers_rejects_invalid_token_chars ... ok
test commit::parse::test::unit::trailers_rejects_line_without_separator ... ok
test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_git_ref_format-53cacdde7021555b)
running 9 tests
test test::component ... ok
test test::component_invalid - should panic ... ok
test test::qualified_invalid - should panic ... ok
test test::pattern ... ok
test test::qualified ... ok
test test::qualified_pattern ... ok
test test::qualified_pattern_invalid - should panic ... ok
test test::refname ... ok
test test::refname_invalid - should panic ... ok
test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_localtime-834cec7348dd66f7)
running 1 test
test serde_impls::test::test_localtime ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_log-c7a44cc83fe87a10)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_node-b9419126af0f6ea0)
running 84 tests
test reactor::timer::tests::test_next ... ok
test reactor::timer::tests::test_wake ... ok
test reactor::timer::tests::test_wake_exact ... ok
test control::tests::test_control_socket ... ok
test control::tests::test_seed_unseed ... ok
test fingerprint::tests::matching ... ok
test tests::announcement_rebroadcast ... ok
test tests::announcement_rebroadcast_timestamp_filtered ... ok
test tests::announcement_rebroadcast_duplicates ... ok
test tests::connection_kept_alive ... ok
test tests::disconnecting_unresponsive_peer ... ok
test tests::announcement_relay ... ok
test tests::e2e::fetch_does_not_contain_rad_sigrefs_parent ... ok
test tests::e2e::missing_default_branch ... ok
test tests::e2e::missing_delegate_default_branch ... ok
test tests::e2e::test_block_prevents_connection ... ok
test tests::e2e::test_block_active_connection ... ok
test tests::e2e::test_block_prevents_fetch ... ok
test tests::e2e::test_background_foreground_fetch ... ok
test tests::e2e::test_catchup_on_refs_announcements ... ok
test tests::e2e::test_channel_reader_limit ... ok
test tests::e2e::test_clone ... ok
test tests::e2e::test_connection_crossing ... ok
test tests::e2e::test_dont_fetch_owned_refs ... ok
test tests::e2e::test_fetch_emits_canonical_ref_update_partial_glob ... ok
test tests::e2e::test_concurrent_fetches ... ok
test tests::e2e::test_fetch_followed_remotes ... ok
test tests::e2e::test_fetch_preserve_owned_refs ... ok
test tests::e2e::test_fetch_unseeded ... ok
test tests::announcement_message_amplification ... ok
test tests::e2e::test_fetch_emits_canonical_ref_update ... ok
test tests::e2e::test_fetch_up_to_date ... ok
test tests::e2e::test_inventory_sync_basic ... ok
test tests::e2e::test_large_fetch ... ok
test tests::e2e::test_migrated_clone ... ok
test tests::e2e::test_missing_remote ... ok
test tests::e2e::test_multiple_offline_inits ... ok
test tests::e2e::test_non_fast_forward_identity_doc ... ok
test tests::e2e::test_non_fast_forward_sigrefs ... ok
test tests::e2e::test_outdated_delegate_sigrefs ... ok
test tests::e2e::test_outdated_sigrefs ... ok
test tests::e2e::test_replication ... ok
test tests::e2e::test_inventory_sync_bridge ... ok
test tests::e2e::test_replication_invalid ... ok
test tests::e2e::test_inventory_sync_ring ... ok
test tests::fetch_missing_inventory_on_gossip ... ok
test tests::fetch_missing_inventory_on_schedule ... ok
test tests::e2e::test_inventory_sync_star ... ok
test tests::inventory_decode ... ok
test tests::inbound_connection ... ok
test tests::e2e::test_replication_ref_in_sigrefs ... ok
test tests::init_and_seed ... ok
test tests::inventory_relay ... ok
test tests::inventory_relay_bad_timestamp ... ok
test tests::inventory_sync ... ok
test tests::maintain_connections_failed_attempt ... ok
test tests::maintain_connections_same_second_loop ... ok
test tests::maintain_connections_transient ... ok
test tests::orphaned_fetch_blocks_repo_from_all_nodes ... ok
test tests::maintain_connections ... ok
test tests::outbound_connection ... ok
test tests::persistent_peer_connect ... ok
test tests::persistent_peer_reconnect_attempt ... ok
test tests::persistent_peer_reconnect_success ... ok
test tests::ping_response ... ok
test tests::queued_fetch_from_ann_same_rid ... ok
test tests::queued_fetch_from_command_same_rid ... ok
test tests::queued_fetch_max_capacity ... ok
test tests::redundant_connect ... ok
test tests::refs_announcement_fetch_trusted_no_inventory ... ok
test tests::refs_announcement_followed ... ok
test tests::refs_announcement_no_subscribe ... ok
test tests::inventory_pruning ... ok
test tests::refs_announcement_offline ... ok
test tests::refs_synced_event ... ok
test tests::refs_announcement_relay_private ... ok
test tests::refs_announcement_relay_public ... ok
test wire::test::test_inventory_ann_with_extension ... ok
test wire::test::test_pong_message_with_extension ... ok
test tests::seeding ... ok
test tests::seed_repo_subscribe ... ok
test wire::test::worker_result_clears_active_when_peer_connected ... ok
test wire::test::worker_result_clears_active_when_peer_disconnecting ... ok
test tests::prop_inventory_exchange_dense ... ok
test result: ok. 84 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 16.60s
Running unittests src/main.rs (target/debug/deps/radicle_node-f4d9b2ba46909bdb)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_oid-7fbb25cf4c2a40a1)
running 10 tests
test fmt::test::fixture ... ok
test fmt::test::git2 ... ok
test fmt::test::zero ... ok
test git2::test::zero ... ok
test gix::test::zero ... ok
test str::test::fixture ... ok
test fmt::test::gix ... ok
test str::test::zero ... ok
test str::test::git2_roundtrip ... ok
test str::test::gix_roundtrip ... ok
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_protocol-d4ee71d427a8967a)
running 100 tests
test deserializer::test::test_decode_next ... ok
test deserializer::test::test_unparsed ... ok
test deserializer::test::prop_decode_next ... ok
test fetcher::service::tests::test_fetch_coalescing_different_refs ... ok
test fetcher::test::queue::properties::capacity::bounded ... ok
test fetcher::test::queue::properties::capacity::rejection ... ok
test fetcher::test::queue::properties::dequeue::empty_queue_returns_none ... ok
test fetcher::test::queue::properties::dequeue::drained_queue_returns_none ... ok
test fetcher::test::queue::properties::dequeue::enables_reenqueue ... ok
test fetcher::test::queue::properties::capacity::capacity_reached_returns_same_item ... ok
test fetcher::test::queue::properties::capacity::restored_after_dequeue ... ok
test fetcher::test::queue::properties::fifo::interleaved_operations ... ok
test fetcher::test::queue::properties::fifo::ordering ... ok
test fetcher::test::queue::properties::equality::reflexive ... ok
test fetcher::test::queue::properties::equality::symmetric ... ok
test fetcher::test::queue::properties::merge::different_rid_accepted ... ok
test fetcher::test::queue::properties::equality::transitive ... ok
test fetcher::test::queue::properties::merge::longer_timeout_preserved ... ok
test fetcher::test::queue::properties::merge::combines_refs ... ok
test fetcher::test::queue::properties::merge::does_not_increase_queue_length ... ok
test fetcher::test::queue::unit::capacity_takes_precedence_over_merge_for_new_items ... ok
test fetcher::test::queue::unit::empty_refs_items_can_be_equal ... ok
test fetcher::test::queue::unit::max_timeout_accepted ... ok
test fetcher::test::queue::unit::merge_preserves_position_in_queue ... ok
test fetcher::test::queue::unit::zero_timeout_accepted ... ok
test fetcher::test::state::command::cancel::cancellation_is_isolated ... ok
test fetcher::test::state::command::cancel::non_existent_returns_unexpected ... ok
test fetcher::test::state::command::cancel::ongoing_and_queued ... ok
test fetcher::test::state::command::cancel::single_ongoing ... ok
test fetcher::test::state::command::fetch::fetch_after_previous_completed ... ok
test fetcher::test::state::command::fetch::fetch_at_capacity_enqueues ... ok
test fetcher::test::state::command::fetch::fetch_different_repo_same_node_within_capacity ... ok
test fetcher::test::state::command::fetch::fetch_duplicate_returns_already_fetching ... ok
test fetcher::test::state::command::fetch::fetch_queue_merge_empty_refs_fetches_all ... ok
test fetcher::test::state::command::fetch::fetch_queue_merge_takes_longer_timeout ... ok
test fetcher::test::state::command::fetch::fetch_queue_merges_already_queued ... ok
test fetcher::test::state::command::fetch::fetch_queue_rejected_capacity_reached ... ok
test fetcher::test::state::command::fetch::fetch_same_repo_different_nodes_queues_second ... ok
test fetcher::test::queue::properties::merge::empty_refs_fetches_all ... ok
test fetcher::test::state::command::fetch::fetch_same_repo_different_refs_enqueues ... ok
test fetcher::test::state::command::fetch::fetch_start_first_fetch_for_node ... ok
test fetcher::test::state::command::fetched::complete_one_of_multiple ... ok
test fetcher::test::state::command::fetched::complete_single_ongoing ... ok
test fetcher::test::state::command::fetched::non_existent_returns_not_found ... ok
test fetcher::test::state::command::fetched::stale_from_does_not_clear_active ... ok
test fetcher::test::state::command::fetched::complete_then_dequeue_fifo ... ok
test fetcher::test::state::concurrent::fetched_then_cancel ... ok
test fetcher::test::state::concurrent::interleaved_operations ... ok
test fetcher::test::state::config::min_queue_size ... ok
test fetcher::test::state::dequeue::cannot_dequeue_while_node_at_capacity ... ok
test fetcher::test::state::dequeue::empty_queue_returns_none ... ok
test fetcher::test::state::dequeue::maintains_fifo_order ... ok
test fetcher::test::state::invariant::queue_integrity_after_merge ... ok
test fetcher::test::queue::properties::merge::succeed_when_at_capacity ... ok
test fetcher::test::state::multinode::independent_queues ... ok
test service::filter::test::compatible ... ok
test service::filter::test::test_parameters ... ok
test service::filter::test::test_sizes ... ok
test fetcher::test::queue::properties::merge::same_rid_merges_anywhere_in_queue ... ok
test service::limiter::test::test_limiter_different_rates ... ok
test service::limiter::test::test_limiter_multi ... ok
test service::limiter::test::test_limiter_refill ... ok
test service::gossip::store::test::test_announced ... ok
test fetcher::test::state::config::high_concurrency ... ok
test service::message::tests::test_inventory_limit ... ok
test service::message::tests::test_ref_remote_limit ... ok
test wire::frame::test::test_encode_git_large ... ok
test wire::frame::test::test_stream_id ... ok
test fetcher::test::state::multinode::high_count ... ok
test wire::message::tests::prop_roundtrip_address ... ok
test service::message::tests::prop_refs_announcement_signing ... ok
test wire::message::tests::prop_zero_bytes_encode_decode ... ok
test wire::message::tests::test_inv_ann_max_size ... ok
test wire::message::tests::test_node_ann_max_size ... ok
test wire::message::tests::test_ping_encode_size_overflow - should panic ... ok
test wire::message::tests::test_pingpong_encode_max_size ... ok
test wire::message::tests::test_pong_encode_size_overflow - should panic ... ok
test service::message::tests::test_node_announcement_validate ... ok
test wire::tests::prop_oid ... ok
test wire::tests::prop_roundtrip_filter ... ok
test wire::tests::prop_roundtrip_publickey ... ok
test wire::tests::prop_roundtrip_refs ... ok
test wire::tests::prop_roundtrip_repoid ... ok
test wire::tests::prop_roundtrip_tuple ... ok
test wire::tests::prop_roundtrip_u16 ... ok
test wire::tests::prop_roundtrip_u32 ... ok
test wire::tests::prop_roundtrip_u64 ... ok
test wire::tests::prop_roundtrip_vec ... ok
test wire::tests::prop_signature ... ok
test wire::tests::prop_string ... ok
test wire::tests::test_alias ... ok
test wire::tests::test_bounded_vec_limit ... ok
test wire::tests::test_filter_invalid ... ok
test wire::tests::test_string ... ok
test wire::varint::test::prop_roundtrip_varint ... ok
test wire::varint::test::test_encode_overflow - should panic ... ok
test wire::varint::test::test_encoding ... ok
test wire::message::tests::prop_roundtrip_message ... ok
test wire::message::tests::prop_message_decoder ... ok
test wire::message::tests::test_refs_ann_max_size ... ok
test result: ok. 100 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.83s
running 12 tests
test protocol::tests::test_fetch ... ok
test protocol::tests::test_capabilities ... ok
test protocol::tests::test_empty ... ok
test protocol::tests::test_fetch_whitespace ... ok
test protocol::tests::test_invalid ... ok
test protocol::tests::test_list ... ok
test protocol::tests::test_list_for_push ... ok
test protocol::tests::test_option ... ok
test protocol::tests::test_option_whitespace_preservation ... ok
test protocol::tests::test_push ... ok
test protocol::tests::test_push_force ... ok
test protocol::tests::test_push_delete ... ok
test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/main.rs (target/debug/deps/git_remote_rad-70fc004759922c41)
Running unittests src/main.rs (target/debug/deps/radicle_schemars-69d244e5e7a8e8bd)
Running unittests src/lib.rs (target/debug/deps/radicle_signals-3c6a43adea3f1f99)
Running unittests src/lib.rs (target/debug/deps/radicle_systemd-e493431dcbdbcb38)
Running unittests src/lib.rs (target/debug/deps/radicle_term-4b216b71d82931e2)
running 22 tests
test ansi::tests::wrapping ... ok
test ansi::tests::colors_enabled ... ok
test ansi::tests::colors_disabled ... ok
test cell::test::test_width ... ok
test element::test::test_spaced ... ok
test ansi::tests::no_color_disables_colors_not_styles ... ok
test element::test::test_width ... ok
test element::test::test_truncate ... ok
test table::test::test_table ... ok
test table::test::test_table_border ... ok
test table::test::test_table_border_maximized ... ok
test table::test::test_table_border_truncated ... ok
test table::test::test_table_truncate ... ok
test table::test::test_table_unicode ... ok
test table::test::test_table_unicode_truncate ... ok
test table::test::test_truncate ... ok
test textarea::test::test_wrapping_code_block ... ok
test textarea::test::test_wrapping_fenced_block ... ok
test textarea::test::test_wrapping ... ok
test textarea::test::test_wrapping_paragraphs ... ok
test vstack::test::test_vstack_maximize ... ok
test vstack::test::test_vstack ... ok
test result: ok. 22 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/lib.rs (target/debug/deps/radicle_windows-73a4d59102760b64)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle
running 1 test
test crates/radicle/src/cob/patch/encoding/review.rs - cob::patch::encoding::review::Review (line 23) ... ignored
test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_cli
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_cli_test
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_cob
running 1 test
test crates/radicle-cob/src/backend/stable.rs - backend::stable::with_advanced_timestamp (line 56) ... ignored
test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
all doctests ran in 0.09s; merged doctests compilation took 0.08s
Doc-tests radicle_core
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_crypto
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_dag
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_fetch
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_git_metadata
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_git_ref_format
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_localtime
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_log
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_node
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_oid
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_protocol
running 6 tests
test crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::truncate (line 50) ... ok
test crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::push (line 122) ... ok
test crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::max (line 96) ... ok
test crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::collect_from (line 30) ... ok
test crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::with_capacity (line 66) ... ok
test crates/radicle-protocol/src/bounded.rs - bounded::BoundedVec<T,N>::unbound (line 149) ... ok
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
all doctests ran in 0.39s; merged doctests compilation took 0.38s
Doc-tests radicle_signals
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_systemd
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests radicle_term
running 1 test
test crates/radicle-term/src/table.rs - table (line 4) ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
all doctests ran in 0.16s; merged doctests compilation took 0.15s
Doc-tests radicle_windows
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Exit code: 0
{
"response": "finished",
"result": "success"
}