rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5 heartwoodb33dc3341634f3fcc549efc9707eda8590a8423c
{
"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": "Created",
"patch": {
"id": "bc69c2c2c0b942166e7286576b50e05f80763076",
"author": {
"id": "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"alias": "fintohaps"
},
"title": "cli/sync: migrate to clap",
"state": {
"status": "open",
"conflicts": []
},
"before": "6cfed884bf37cba1e0d8e97fa8b0e94df4a04b1f",
"after": "b33dc3341634f3fcc549efc9707eda8590a8423c",
"commits": [
"b33dc3341634f3fcc549efc9707eda8590a8423c"
],
"target": "6cfed884bf37cba1e0d8e97fa8b0e94df4a04b1f",
"labels": [],
"assignees": [],
"revisions": [
{
"id": "bc69c2c2c0b942166e7286576b50e05f80763076",
"author": {
"id": "did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM",
"alias": "fintohaps"
},
"description": "Due to the idiosyncracies of this command there are a few things to note about\nthis migration.\n\nThe `rad sync` command acts as a default subcommand in itself, in that it has\noptions that do not apply to its subcommand, `rad sync status`. This means that\nthe options will print with `rad sync --help`, but they will not print with `rad\nsync status`.\n\nThe `--inventory` flag is not compatible with any of the other flags and\noptions, thus they are all marked with `conflicts_with`. This cannot be done for\na positional argument, so `clap` will \"helpfully\" print out the usage, for\nexample, as:\n\n error: the argument '--inventory' cannot be used with '--fetch'\n\n Usage: rad sync --inventory [RID]\n\n For more information, try '--help'.\n\nWhich is incorrect, since `RID` is ignored. This is explained in the `--help`\ndocumentation for `--inventory`.",
"base": "6cfed884bf37cba1e0d8e97fa8b0e94df4a04b1f",
"oid": "b33dc3341634f3fcc549efc9707eda8590a8423c",
"timestamp": 1761049917
}
]
}
}
{
"response": "triggered",
"run_id": {
"id": "b2b8f63a-2f94-4973-9c6f-045a0bf65e93"
},
"info_url": "https://cci.rad.levitte.org//b2b8f63a-2f94-4973-9c6f-045a0bf65e93.html"
}
Started at: 2025-10-21 17:50:06.958686+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/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/
╭────────────────────────────────────╮
│ heartwood │
│ Radicle Heartwood Protocol & Stack │
│ 125 issues · 15 patches │
╰────────────────────────────────────╯
Run `cd ./.` to go to the repository directory.
Exit code: 0
$ rad patch checkout bc69c2c2c0b942166e7286576b50e05f80763076
✓ Switched to branch patch/bc69c2c at revision bc69c2c
✓ Branch patch/bc69c2c setup to track rad/patches/bc69c2c2c0b942166e7286576b50e05f80763076
Exit code: 0
$ git config advice.detachedHead false
Exit code: 0
$ git checkout b33dc3341634f3fcc549efc9707eda8590a8423c
HEAD is now at b33dc334 cli/sync: migrate to clap
Exit code: 0
$ git show b33dc3341634f3fcc549efc9707eda8590a8423c
commit b33dc3341634f3fcc549efc9707eda8590a8423c
Author: Fintan Halpenny <fintan.halpenny@gmail.com>
Date: Tue Oct 21 12:18:12 2025 +0100
cli/sync: migrate to clap
Due to the idiosyncracies of this command there are a few things to note about
this migration.
The `rad sync` command acts as a default subcommand in itself, in that it has
options that do not apply to its subcommand, `rad sync status`. This means that
the options will print with `rad sync --help`, but they will not print with `rad
sync status`.
The `--inventory` flag is not compatible with any of the other flags and
options, thus they are all marked with `conflicts_with`. This cannot be done for
a positional argument, so `clap` will "helpfully" print out the usage, for
example, as:
error: the argument '--inventory' cannot be used with '--fetch'
Usage: rad sync --inventory [RID]
For more information, try '--help'.
Which is incorrect, since `RID` is ignored. This is explained in the `--help`
documentation for `--inventory`.
diff --git a/crates/radicle-cli/src/commands/help.rs b/crates/radicle-cli/src/commands/help.rs
index 56275003..8a90e6e7 100644
--- a/crates/radicle-cli/src/commands/help.rs
+++ b/crates/radicle-cli/src/commands/help.rs
@@ -130,7 +130,10 @@ const COMMANDS: &[CommandItem] = &[
name: "stats",
about: crate::commands::stats::ABOUT,
},
- CommandItem::Lexopt(crate::commands::sync::HELP),
+ CommandItem::Clap {
+ name: "sync",
+ about: crate::commands::sync::ABOUT,
+ },
CommandItem::Clap {
name: "watch",
about: crate::commands::watch::ABOUT,
diff --git a/crates/radicle-cli/src/commands/sync.rs b/crates/radicle-cli/src/commands/sync.rs
index 93297659..14a6eab1 100644
--- a/crates/radicle-cli/src/commands/sync.rs
+++ b/crates/radicle-cli/src/commands/sync.rs
@@ -1,9 +1,8 @@
+mod args;
+
use std::cmp::Ordering;
use std::collections::BTreeMap;
-use std::collections::BTreeSet;
use std::collections::HashSet;
-use std::ffi::OsString;
-use std::str::FromStr;
use std::time;
use anyhow::{anyhow, Context as _};
@@ -23,266 +22,14 @@ use radicle_term::Element;
use crate::node::SyncReporting;
use crate::node::SyncSettings;
use crate::terminal as term;
-use crate::terminal::args::{Args, Error, Help};
use crate::terminal::format::Author;
use crate::terminal::{Table, TableOptions};
-pub const HELP: Help = Help {
- name: "sync",
- description: "Sync repositories to the network",
- version: env!("RADICLE_VERSION"),
- usage: r#"
-Usage
-
- rad sync [--fetch | --announce] [<rid>] [<option>...]
- rad sync --inventory [<option>...]
- rad sync status [<rid>] [<option>...]
-
- By default, the current repository is synchronized both ways.
- If an <rid> is specified, that repository is synced instead.
-
- The process begins by fetching changes from connected seeds,
- followed by announcing local refs to peers, thereby prompting
- them to fetch from us.
-
- When `--fetch` is specified, any number of seeds may be given
- using the `--seed` option, eg. `--seed <nid>@<addr>:<port>`.
-
- When `--replicas` is specified, the given replication factor will try
- to be matched. For example, `--replicas 5` will sync with 5 seeds.
-
- The synchronization process can be configured using `--replicas <min>` and
- `--replicas-max <max>`. If these options are used independently, then the
- replication factor is taken as the given `<min>`/`<max>` value. If the
- options are used together, then the replication factor has a minimum and
- maximum bound.
-
- For fetching, the synchronization process will be considered successful if
- at least `<min>` seeds were fetched from *or* all preferred seeds were
- fetched from. If `<max>` is specified then the process will continue and
- attempt to sync with `<max>` seeds.
-
- For reference announcing, the synchronization process will be considered
- successful if at least `<min>` seeds were pushed to *and* all preferred
- seeds were pushed to.
-
- When `--fetch` or `--announce` are specified on their own, this command
- will only fetch or announce.
-
- If `--inventory` is specified, the node's inventory is announced to
- the network. This mode does not take an `<rid>`.
-
-Commands
-
- status Display the sync status of a repository
-
-Options
-
- --sort-by <field> Sort the table by column (options: nid, alias, status)
- -f, --fetch Turn on fetching (default: true)
- -a, --announce Turn on ref announcing (default: true)
- -i, --inventory Turn on inventory announcing (default: false)
- --timeout <secs> How many seconds to wait while syncing
- --seed <nid> Sync with the given node (may be specified multiple times)
- -r, --replicas <count> Sync with a specific number of seeds
- --replicas-max <count> Sync with an upper bound number of seeds
- -v, --verbose Verbose output
- --debug Print debug information afer sync
- --help Print help
-"#,
-};
-
-#[derive(Debug, Clone, PartialEq, Eq, Default)]
-pub enum Operation {
- Synchronize(SyncMode),
- #[default]
- Status,
-}
-
-#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
-pub enum SortBy {
- Nid,
- Alias,
- #[default]
- Status,
-}
-
-impl FromStr for SortBy {
- type Err = &'static str;
-
- fn from_str(s: &str) -> Result<Self, Self::Err> {
- match s {
- "nid" => Ok(Self::Nid),
- "alias" => Ok(Self::Alias),
- "status" => Ok(Self::Status),
- _ => Err("invalid `--sort-by` field"),
- }
- }
-}
-
-#[derive(Debug, Clone, PartialEq, Eq)]
-pub enum SyncMode {
- Repo {
- settings: SyncSettings,
- direction: SyncDirection,
- },
- Inventory,
-}
-
-impl Default for SyncMode {
- fn default() -> Self {
- Self::Repo {
- settings: SyncSettings::default(),
- direction: SyncDirection::default(),
- }
- }
-}
-
-#[derive(Debug, Default, PartialEq, Eq, Clone)]
-pub enum SyncDirection {
- Fetch,
- Announce,
- #[default]
- Both,
-}
-
-#[derive(Default, Debug)]
-pub struct Options {
- pub rid: Option<RepoId>,
- pub debug: bool,
- pub verbose: bool,
- pub sort_by: SortBy,
- pub op: Operation,
-}
-
-impl Args for Options {
- fn from_args(args: Vec<OsString>) -> anyhow::Result<(Self, Vec<OsString>)> {
- use lexopt::prelude::*;
-
- let mut parser = lexopt::Parser::from_args(args);
- let mut verbose = false;
- let mut timeout = time::Duration::from_secs(9);
- let mut rid = None;
- let mut fetch = false;
- let mut announce = false;
- let mut inventory = false;
- let mut debug = false;
- let mut replicas = None;
- let mut max_replicas = None;
- let mut seeds = BTreeSet::new();
- let mut sort_by = SortBy::default();
- let mut op: Option<Operation> = None;
-
- while let Some(arg) = parser.next()? {
- match arg {
- Long("debug") => {
- debug = true;
- }
- Long("verbose") | Short('v') => {
- verbose = true;
- }
- Long("fetch") | Short('f') => {
- fetch = true;
- }
- Long("replicas") | Short('r') => {
- let val = parser.value()?;
- let count = term::args::number(&val)?;
-
- if count == 0 {
- anyhow::bail!("value for `--replicas` must be greater than zero");
- }
- replicas = Some(count);
- }
- Long("replicas-max") => {
- let val = parser.value()?;
- let count = term::args::number(&val)?;
-
- if count == 0 {
- anyhow::bail!("value for `--replicas-max` must be greater than zero");
- }
- max_replicas = Some(count);
- }
- Long("seed") => {
- let val = parser.value()?;
- let nid = term::args::nid(&val)?;
-
- seeds.insert(nid);
- }
- Long("announce") | Short('a') => {
- announce = true;
- }
- Long("inventory") | Short('i') => {
- inventory = true;
- }
- Long("sort-by") if matches!(op, Some(Operation::Status)) => {
- let value = parser.value()?;
- sort_by = value.parse()?;
- }
- Long("timeout") | Short('t') => {
- let value = parser.value()?;
- let secs = term::args::parse_value("timeout", value)?;
-
- timeout = time::Duration::from_secs(secs);
- }
- Long("help") | Short('h') => {
- return Err(Error::Help.into());
- }
- Value(val) if rid.is_none() => match val.to_string_lossy().as_ref() {
- "s" | "status" => {
- op = Some(Operation::Status);
- }
- _ => {
- rid = Some(term::args::rid(&val)?);
- }
- },
- arg => {
- return Err(anyhow!(arg.unexpected()));
- }
- }
- }
-
- let sync = if inventory && fetch {
- anyhow::bail!("`--inventory` cannot be used with `--fetch`");
- } else if inventory {
- SyncMode::Inventory
- } else {
- let direction = match (fetch, announce) {
- (true, true) | (false, false) => SyncDirection::Both,
- (true, false) => SyncDirection::Fetch,
- (false, true) => SyncDirection::Announce,
- };
- let mut settings = SyncSettings::default().timeout(timeout);
-
- let replicas = match (replicas, max_replicas) {
- (None, None) => sync::ReplicationFactor::default(),
- (None, Some(min)) => sync::ReplicationFactor::must_reach(min),
- (Some(min), None) => sync::ReplicationFactor::must_reach(min),
- (Some(min), Some(max)) => sync::ReplicationFactor::range(min, max),
- };
- settings.replicas = replicas;
- if !seeds.is_empty() {
- settings.seeds = seeds;
- }
- SyncMode::Repo {
- settings,
- direction,
- }
- };
-
- Ok((
- Options {
- rid,
- debug,
- verbose,
- sort_by,
- op: op.unwrap_or(Operation::Synchronize(sync)),
- },
- vec![],
- ))
- }
-}
+pub use args::Args;
+pub(crate) use args::ABOUT;
+use args::{Command, SortBy, SyncDirection, SyncMode};
-pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
+pub fn run(args: Args, ctx: impl term::Context) -> anyhow::Result<()> {
let profile = ctx.profile()?;
let mut node = radicle::Node::new(profile.socket());
if !node.is_running() {
@@ -290,10 +37,12 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
"to sync a repository, your node must be running. To start it, run `rad node start`"
);
}
+ let verbose = args.verbose;
+ let debug = args.verbose;
- match &options.op {
- Operation::Status => {
- let rid = match options.rid {
+ match args.command {
+ Some(Command::Status { rid, sort_by }) => {
+ let rid = match rid {
Some(rid) => rid,
None => {
let (_, rid) = radicle::rad::cwd()
@@ -301,37 +50,41 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
rid
}
};
- sync_status(rid, &mut node, &profile, &options)?;
+ sync_status(rid, &mut node, &profile, &sort_by, verbose)?;
}
- Operation::Synchronize(SyncMode::Repo {
- settings,
- direction,
- }) => {
- let rid = match options.rid {
- Some(rid) => rid,
- None => {
- let (_, rid) = radicle::rad::cwd()
- .context("Current directory is not a Radicle repository")?;
- rid
- }
- };
- let settings = settings.clone().with_profile(&profile);
+ None => match SyncMode::from(args.sync) {
+ SyncMode::Repo {
+ rid,
+ settings,
+ direction,
+ } => {
+ let rid = match rid {
+ Some(rid) => rid,
+ None => {
+ let (_, rid) = radicle::rad::cwd()
+ .context("Current directory is not a Radicle repository")?;
+ rid
+ }
+ };
+ let settings = settings.clone().with_profile(&profile);
- if [SyncDirection::Fetch, SyncDirection::Both].contains(direction) {
- if !profile.policies()?.is_seeding(&rid)? {
- anyhow::bail!("repository {rid} is not seeded");
+ if matches!(direction, SyncDirection::Fetch | SyncDirection::Both) {
+ if !profile.policies()?.is_seeding(&rid)? {
+ anyhow::bail!("repository {rid} is not seeded");
+ }
+ let result = fetch(rid, settings.clone(), &mut node, &profile)?;
+ display_fetch_result(&result, verbose)
+ }
+ if matches!(direction, SyncDirection::Announce | SyncDirection::Both) {
+ announce_refs(rid, settings, &mut node, &profile, verbose, debug)?;
}
- let result = fetch(rid, settings.clone(), &mut node, &profile)?;
- display_fetch_result(&result, options.verbose)
}
- if [SyncDirection::Announce, SyncDirection::Both].contains(direction) {
- announce_refs(rid, settings, &mut node, &profile, &options)?;
+ SyncMode::Inventory => {
+ announce_inventory(node)?;
}
- }
- Operation::Synchronize(SyncMode::Inventory) => {
- announce_inventory(node)?;
- }
+ },
}
+
Ok(())
}
@@ -339,7 +92,8 @@ fn sync_status(
rid: RepoId,
node: &mut Node,
profile: &Profile,
- options: &Options,
+ sort_by: &SortBy,
+ verbose: bool,
) -> anyhow::Result<()> {
const SYMBOL_STATE: &str = "?";
const SYMBOL_STATE_UNKNOWN: &str = "•";
@@ -358,7 +112,7 @@ fn sync_status(
]);
table.divider();
- sort_seeds_by(local_nid, &mut seeds, &aliases, &options.sort_by);
+ sort_seeds_by(local_nid, &mut seeds, &aliases, sort_by);
let seeds = seeds.into_iter().flat_map(|seed| {
let (status, head, time) = match seed.sync {
@@ -386,7 +140,7 @@ fn sync_status(
term::format::oid(oid),
term::format::timestamp(timestamp),
),
- None if options.verbose => (
+ None if verbose => (
term::format::dim(SYMBOL_STATE_UNKNOWN),
term::paint(String::new()),
term::paint(String::new()),
@@ -394,7 +148,7 @@ fn sync_status(
None => return None,
};
- let (alias, nid) = Author::new(&seed.nid, profile, options.verbose).labels();
+ let (alias, nid) = Author::new(&seed.nid, profile, verbose).labels();
Some([
nid,
@@ -448,7 +202,8 @@ fn announce_refs(
settings: SyncSettings,
node: &mut Node,
profile: &Profile,
- options: &Options,
+ verbose: bool,
+ debug: bool,
) -> anyhow::Result<()> {
let Ok(repo) = profile.storage.repository(rid) else {
return Err(anyhow!(
@@ -470,14 +225,14 @@ fn announce_refs(
&repo,
settings,
SyncReporting {
- debug: options.debug,
+ debug,
..SyncReporting::default()
},
node,
profile,
)?;
if let Some(result) = result {
- print_announcer_result(&result, options.verbose)
+ print_announcer_result(&result, verbose)
}
Ok(())
diff --git a/crates/radicle-cli/src/commands/sync/args.rs b/crates/radicle-cli/src/commands/sync/args.rs
new file mode 100644
index 00000000..17535ecc
--- /dev/null
+++ b/crates/radicle-cli/src/commands/sync/args.rs
@@ -0,0 +1,254 @@
+use std::str::FromStr;
+use std::time;
+
+use clap::{Parser, Subcommand, ValueEnum};
+
+use radicle::{
+ node::{sync, NodeId},
+ prelude::RepoId,
+};
+
+use crate::node::SyncSettings;
+
+pub(crate) const ABOUT: &str = "Sync repositories to the network";
+
+const LONG_ABOUT: &str = r#"
+By default, the current repository is synchronized both ways.
+If an <RID> is specified, that repository is synced instead.
+
+The process begins by fetching changes from connected seeds,
+followed by announcing local refs to peers, thereby prompting
+them to fetch from us.
+
+When `--fetch` is specified, any number of seeds may be given
+using the `--seed` option, eg. `--seed <NID>@<ADDR>:<PORT>`.
+
+When `--replicas` is specified, the given replication factor will try
+to be matched. For example, `--replicas 5` will sync with 5 seeds.
+
+The synchronization process can be configured using `--replicas <MIN>` and
+`--replicas-max <MAX>`. If these options are used independently, then the
+replication factor is taken as the given `<MIN>`/`<MAX>` value. If the
+options are used together, then the replication factor has a minimum and
+maximum bound.
+
+For fetching, the synchronization process will be considered successful if
+at least `<MIN>` seeds were fetched from *or* all preferred seeds were
+fetched from. If `<MAX>` is specified then the process will continue and
+attempt to sync with `<MAX>` seeds.
+
+For reference announcing, the synchronization process will be considered
+successful if at least `<MIN>` seeds were pushed to *and* all preferred
+seeds were pushed to.
+
+When `--fetch` or `--announce` are specified on their own, this command
+will only fetch or announce.
+
+If `--inventory` is specified, the node's inventory is announced to
+the network. This mode does not take an `<RID>`.
+"#;
+
+#[derive(Parser, Debug)]
+#[clap(about = ABOUT, long_about = LONG_ABOUT, disable_version_flag = true)]
+pub struct Args {
+ #[clap(subcommand)]
+ pub(super) command: Option<Command>,
+
+ #[clap(flatten)]
+ pub(super) sync: SyncArgs,
+
+ /// Enable debug information when synchronizing
+ #[arg(long)]
+ pub(super) debug: bool,
+
+ /// Enable verbose information when synchronizing
+ #[arg(long, short)]
+ pub(super) verbose: bool,
+}
+
+#[derive(Parser, Debug)]
+pub(super) struct SyncArgs {
+ /// Enable fetching [default: true]
+ ///
+ /// Providing --announce without --fetch will disable fetching
+ #[arg(long, short, conflicts_with = "inventory")]
+ fetch: bool,
+
+ /// Enable announcing [default: true]
+ ///
+ /// Providing --fetch without --announce will disable announcing
+ #[arg(long, short, conflicts_with = "inventory")]
+ announce: bool,
+
+ /// Synchronize with the given node (may be specified multiple times)
+ #[arg(
+ long = "seed",
+ value_name = "NID",
+ action = clap::ArgAction::Append,
+ conflicts_with = "inventory",
+ )]
+ seeds: Vec<NodeId>,
+
+ /// How many seconds to wait while synchronizing
+ #[arg(
+ long,
+ short,
+ default_value_t = 9,
+ value_name = "SECS",
+ conflicts_with = "inventory"
+ )]
+ timeout: u64,
+
+ /// The repository to perform the synchronizing for [default: cwd]
+ rid: Option<RepoId>,
+
+ /// Synchronize with a specific number of seeds
+ ///
+ /// The value must be greater than zero
+ #[arg(
+ long,
+ short,
+ value_name = "COUNT",
+ value_parser = replicas_non_zero,
+ conflicts_with = "inventory",
+ )]
+ replicas: Option<usize>,
+
+ /// Synchronize with an upper bound number of seeds
+ ///
+ /// The value must be greater than zero
+ #[arg(
+ long,
+ value_name = "COUNT",
+ value_parser = replicas_non_zero,
+ conflicts_with = "inventory",
+ )]
+ max_replicas: Option<usize>,
+
+ /// Enable announcing inventory [default: false]
+ ///
+ /// --inventory is a standalone mode and is not compatible with the other
+ /// options
+ ///
+ /// <RID> is ignored when announcing --inventory
+ #[arg(long, short)]
+ inventory: bool,
+}
+
+impl SyncArgs {
+ fn direction(&self) -> SyncDirection {
+ match (self.fetch, self.announce) {
+ (true, true) | (false, false) => SyncDirection::Both,
+ (true, false) => SyncDirection::Fetch,
+ (false, true) => SyncDirection::Announce,
+ }
+ }
+
+ fn timeout(&self) -> time::Duration {
+ time::Duration::from_secs(self.timeout)
+ }
+
+ fn replication(&self) -> sync::ReplicationFactor {
+ match (self.replicas, self.max_replicas) {
+ (None, None) => sync::ReplicationFactor::default(),
+ (None, Some(min)) => sync::ReplicationFactor::must_reach(min),
+ (Some(min), None) => sync::ReplicationFactor::must_reach(min),
+ (Some(min), Some(max)) => sync::ReplicationFactor::range(min, max),
+ }
+ }
+}
+
+#[derive(Subcommand, Debug)]
+pub(super) enum Command {
+ /// Display the sync status of a repository
+ #[clap(alias = "s")]
+ Status {
+ /// The repository to display the status for [default: cwd]
+ rid: Option<RepoId>,
+ /// Sort the table by column
+ #[arg(long, value_name = "FIELD", value_enum, default_value_t)]
+ sort_by: SortBy,
+ },
+}
+
+/// Sort the status table by the provided field
+#[derive(ValueEnum, Clone, Copy, Debug, Default, PartialEq, Eq)]
+pub(super) enum SortBy {
+ /// The NID of the entry
+ Nid,
+ /// The alias of the entry
+ Alias,
+ /// The status of the entry
+ #[default]
+ Status,
+}
+
+impl FromStr for SortBy {
+ type Err = &'static str;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ match s {
+ "nid" => Ok(Self::Nid),
+ "alias" => Ok(Self::Alias),
+ "status" => Ok(Self::Status),
+ _ => Err("invalid `--sort-by` field"),
+ }
+ }
+}
+
+/// Whether we are performing a fetch/announce of a repository or only
+/// announcing the node's inventory
+pub(super) enum SyncMode {
+ /// Fetch and/or announce a repositories references
+ Repo {
+ /// The repository being synchronized
+ rid: Option<RepoId>,
+ /// The settings for fetch/announce
+ settings: SyncSettings,
+ /// The direction of the synchronization
+ direction: SyncDirection,
+ },
+ /// Announce the node's inventory
+ Inventory,
+}
+
+impl From<SyncArgs> for SyncMode {
+ fn from(args: SyncArgs) -> Self {
+ if args.inventory {
+ Self::Inventory
+ } else {
+ assert!(!args.inventory);
+ let direction = args.direction();
+ let mut settings = SyncSettings::default()
+ .timeout(args.timeout())
+ .replicas(args.replication());
+ if !args.seeds.is_empty() {
+ settings.seeds = args.seeds.into_iter().collect();
+ }
+ Self::Repo {
+ rid: args.rid,
+ settings,
+ direction,
+ }
+ }
+ }
+}
+
+/// The direction of the [`SyncMode`]
+#[derive(Debug, PartialEq, Eq)]
+pub(super) enum SyncDirection {
+ /// Only fetching
+ Fetch,
+ /// Only announcing
+ Announce,
+ /// Both fetching and announcing
+ Both,
+}
+
+fn replicas_non_zero(s: &str) -> Result<usize, String> {
+ let r = usize::from_str(s).map_err(|_| format!("{s} is not a number"))?;
+ if r == 0 {
+ return Err(format!("{s} must be a value greater than zero"));
+ }
+ Ok(r)
+}
diff --git a/crates/radicle-cli/src/main.rs b/crates/radicle-cli/src/main.rs
index 5b61332f..f5d2404d 100644
--- a/crates/radicle-cli/src/main.rs
+++ b/crates/radicle-cli/src/main.rs
@@ -79,6 +79,7 @@ enum Commands {
#[command(name = "self")]
RadSelf(rad_self::Args),
Stats(stats::Args),
+ Sync(sync::Args),
Unblock(unblock::Args),
Unfollow(unfollow::Args),
Unseed(unseed::Args),
@@ -318,7 +319,9 @@ pub(crate) fn run_other(exe: &str, args: &[OsString]) -> Result<(), Option<anyho
}
}
"sync" => {
- term::run_command_args::<sync::Options, _>(sync::HELP, sync::run, args.to_vec());
+ if let Some(Commands::Sync(args)) = CliArgs::parse().command {
+ term::run_command_fn(sync::run, args);
+ }
}
"seed" => {
if let Some(Commands::Seed(args)) = CliArgs::parse().command {
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 cargo test --workspace --no-fail-fast '
Commands:
$ podman run --name b2b8f63a-2f94-4973-9c6f-045a0bf65e93 -v /opt/radcis/ci.rad.levitte.org/cci/state/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/s:/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/s:ro -v /opt/radcis/ci.rad.levitte.org/cci/state/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w:/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w -w /b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w -v /opt/radcis/ci.rad.levitte.org/.radicle:/${id}/.radicle:ro -e RAD_HOME=/${id}/.radicle rust:bookworm bash /b2b8f63a-2f94-4973-9c6f-045a0bf65e93/s/script.sh
+ export 'RUSTDOCFLAGS=-D warnings'
+ RUSTDOCFLAGS='-D warnings'
+ cargo --version
info: syncing channel updates for '1.90-x86_64-unknown-linux-gnu'
info: latest update on 2025-09-18, rust version 1.90.0 (1159e78c4 2025-09-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.90.0 (840b83a10 2025-07-30)
+ rustc --version
rustc 1.90.0 (1159e78c4 2025-09-14)
+ cargo fmt --check
+ cargo clippy --all-targets --workspace -- --deny warnings
Updating crates.io index
Downloading crates ...
Downloaded litrs v0.4.1
Downloaded heapless v0.8.0
Downloaded dyn-clone v1.0.17
Downloaded cbc v0.1.2
Downloaded displaydoc v0.2.5
Downloaded base64ct v1.6.0
Downloaded bit-vec v0.8.0
Downloaded hash32 v0.3.1
Downloaded email_address v0.2.9
Downloaded git-ref-format v0.5.0
Downloaded home v0.5.9
Downloaded addr2line v0.24.2
Downloaded block-padding v0.3.3
Downloaded borrow-or-share v0.2.2
Downloaded aho-corasick v1.1.3
Downloaded crc32fast v1.5.0
Downloaded amplify v4.6.0
Downloaded bytes v1.10.1
Downloaded cyphergraphy v0.3.0
Downloaded backtrace v0.3.75
Downloaded emojis v0.6.4
Downloaded crossterm v0.25.0
Downloaded clap_builder v4.5.44
Downloaded chrono v0.4.38
Downloaded crypto-common v0.1.6
Downloaded autocfg v1.2.0
Downloaded digest v0.10.7
Downloaded chacha20poly1305 v0.10.1
Downloaded anstyle v1.0.11
Downloaded ctr v0.9.2
Downloaded faster-hex v0.10.0
Downloaded anstream v0.6.13
Downloaded aes v0.8.4
Downloaded ff v0.13.0
Downloaded pem-rfc7468 v0.7.0
Downloaded escargot v0.5.10
Downloaded clap_derive v4.5.41
Downloaded ecdsa v0.16.9
Downloaded arc-swap v1.7.1
Downloaded data-encoding v2.5.0
Downloaded multibase v0.9.1
Downloaded base-x v0.2.11
Downloaded erased-serde v0.4.6
Downloaded derive_more v2.0.1
Downloaded num-traits v0.2.19
Downloaded convert_case v0.7.1
Downloaded colored v2.1.0
Downloaded blowfish v0.9.1
Downloaded ascii v1.1.0
Downloaded amplify_num v0.5.2
Downloaded aead v0.5.2
Downloaded block-buffer v0.10.4
Downloaded bit-set v0.8.0
Downloaded colorchoice v1.0.0
Downloaded adler2 v2.0.0
Downloaded lock_api v0.4.14
Downloaded diff v0.1.13
Downloaded generic-array v0.14.7
Downloaded derive_more-impl v2.0.1
Downloaded fastrand v2.3.0
Downloaded env_filter v0.1.3
Downloaded const-oid v0.9.6
Downloaded gix-chunk v0.4.11
Downloaded fast-glob v0.3.3
Downloaded gix-refspec v0.31.0
Downloaded pkcs8 v0.10.2
Downloaded bstr v1.12.0
Downloaded rand v0.8.5
Downloaded mio v0.8.11
Downloaded rustix v0.38.34
Downloaded sem_safe v0.2.0
Downloaded heck v0.5.0
Downloaded filetime v0.2.23
Downloaded icu_provider_macros v1.5.0
Downloaded jsonschema v0.30.0
Downloaded memmap2 v0.9.8
Downloaded litemap v0.7.5
Downloaded num-rational v0.4.2
Downloaded hashbrown v0.15.5
Downloaded sval_fmt v2.14.1
Downloaded mio v1.0.4
Downloaded bytecount v0.6.8
Downloaded libc v0.2.174
Downloaded regex-syntax v0.8.5
Downloaded tinystr v0.7.6
Downloaded tracing-log v0.2.0
Downloaded icu_locid_transform v1.5.0
Downloaded nonempty v0.9.0
Downloaded percent-encoding v2.3.1
Downloaded object v0.36.7
Downloaded tree-sitter-c v0.23.2
Downloaded typenum v1.17.0
Downloaded url v2.5.4
Downloaded phf v0.11.3
Downloaded ppv-lite86 v0.2.17
Downloaded gix-protocol v0.51.0
Downloaded siphasher v1.0.1
Downloaded writeable v0.5.5
Downloaded value-bag v1.11.1
Downloaded polyval v0.6.2
Downloaded ssh-cipher v0.2.0
Downloaded pin-project-lite v0.2.16
Downloaded gix-validate v0.10.0
Downloaded num-cmp v0.1.0
Downloaded pkg-config v0.3.30
Downloaded vcpkg v0.2.15
Downloaded zlib-rs v0.5.2
Downloaded unit-prefix v0.5.1
Downloaded os_info v3.12.0
Downloaded rand_chacha v0.3.1
Downloaded miniz_oxide v0.8.8
Downloaded yansi v0.5.1
Downloaded quote v1.0.41
Downloaded memchr v2.7.2
Downloaded itertools v0.14.0
Downloaded regex-automata v0.1.10
Downloaded itoa v1.0.11
Downloaded gix-shallow v0.5.0
Downloaded idna v1.0.3
Downloaded shell-words v1.1.0
Downloaded gix-quote v0.6.0
Downloaded gix-credentials v0.30.0
Downloaded systemd-journal-logger v2.2.2
Downloaded overload v0.1.1
Downloaded matchers v0.1.0
Downloaded linux-raw-sys v0.4.13
Downloaded strsim v0.11.1
Downloaded libgit2-sys v0.17.0+1.8.1
Downloaded walkdir v2.5.0
Downloaded winnow v0.7.13
Downloaded zerofrom-derive v0.1.6
Downloaded schemars v1.0.4
Downloaded zerovec-derive v0.10.3
Downloaded xattr v1.3.1
Downloaded tempfile v3.23.0
Downloaded sha3 v0.10.8
Downloaded tree-sitter-toml-ng v0.6.0
Downloaded siphasher v0.3.11
Downloaded tree-sitter-css v0.23.1
Downloaded tree-sitter-md v0.3.2
Downloaded yoke v0.7.5
Downloaded uuid-simd v0.8.0
Downloaded tree-sitter v0.24.4
Downloaded zerocopy v0.7.35
Downloaded snapbox v0.4.17
Downloaded tinyvec_macros v0.1.1
Downloaded tree-sitter-html v0.23.2
Downloaded syn v2.0.106
Downloaded syn v1.0.109
Downloaded yoke-derive v0.7.5
Downloaded utf16_iter v1.0.5
Downloaded unicode-ident v1.0.12
Downloaded socket2 v0.5.7
Downloaded ssh-encoding v0.2.0
Downloaded sqlite3-src v0.5.1
Downloaded tree-sitter-highlight v0.24.4
Downloaded tree-sitter-bash v0.23.3
Downloaded unicode-normalization v0.1.23
Downloaded vsimd v0.8.0
Downloaded serde v1.0.219
Downloaded sval_ref v2.14.1
Downloaded toml_writer v1.0.2
Downloaded regex-automata v0.4.9
Downloaded timeago v0.4.2
Downloaded tokio v1.47.1
Downloaded unicode-display-width v0.3.0
Downloaded toml_datetime v0.7.0
Downloaded thiserror v2.0.12
Downloaded tree-sitter-rust v0.23.2
Downloaded thiserror v1.0.69
Downloaded signals_receipts v0.2.0
Downloaded zerovec v0.10.4
Downloaded tree-sitter-go v0.23.4
Downloaded sha1 v0.10.6
Downloaded unicode-segmentation v1.11.0
Downloaded tree-sitter-python v0.23.4
Downloaded test-log-macros v0.2.18
Downloaded subtle v2.5.0
Downloaded sqlite3-sys v0.15.2
Downloaded serde-untagged v0.1.7
Downloaded unicode-width v0.2.1
Downloaded tinyvec v1.6.0
Downloaded tar v0.4.40
Downloaded smallvec v1.15.1
Downloaded rand_core v0.6.4
Downloaded write16 v1.0.0
Downloaded utf8parse v0.2.1
Downloaded sha1-checked v0.10.0
Downloaded radicle-git-ext v0.10.0
Downloaded signal-hook v0.3.18
Downloaded serde_derive_internals v0.29.1
Downloaded value-bag-serde1 v1.11.1
Downloaded universal-hash v0.5.1
Downloaded tree-sitter-ruby v0.23.1
Downloaded tracing-subscriber v0.3.19
Downloaded toml v0.9.5
Downloaded serde_derive v1.0.219
Downloaded regex-syntax v0.6.29
Downloaded structured-logger v1.0.4
Downloaded sqlite v0.32.0
Downloaded regex v1.11.1
Downloaded version_check v0.9.4
Downloaded stable_deref_trait v1.2.0
Downloaded socks5-client v0.4.1
Downloaded sharded-slab v0.1.7
Downloaded serde_json v1.0.140
Downloaded rustix v1.0.7
Downloaded p521 v0.13.3
Downloaded zeroize v1.7.0
Downloaded value-bag-sval2 v1.11.1
Downloaded uuid v1.16.0
Downloaded tree-sitter-json v0.24.8
Downloaded tree-sitter-typescript v0.23.2
Downloaded tracing v0.1.41
Downloaded serde_spanned v1.0.0
Downloaded rsa v0.9.6
Downloaded qcheck-macros v1.0.0
Downloaded proc-macro2 v1.0.101
Downloaded zerofrom v0.1.6
Downloaded unicode-width v0.1.11
Downloaded sval v2.14.1
Downloaded signature v1.6.4
Downloaded sha2 v0.10.8
Downloaded typeid v1.0.3
Downloaded thread_local v1.1.9
Downloaded synstructure v0.13.1
Downloaded sval_serde v2.14.1
Downloaded similar v2.5.0
Downloaded signal-hook-registry v1.4.5
Downloaded serde_fmt v1.0.3
Downloaded sec1 v0.7.3
Downloaded scopeguard v1.2.0
Downloaded schemars_derive v1.0.4
Downloaded same-file v1.0.6
Downloaded ryu v1.0.17
Downloaded rustc-demangle v0.1.26
Downloaded rfc6979 v0.4.0
Downloaded ref-cast v1.0.24
Downloaded qcheck v1.0.0
Downloaded proc-macro-error-attr2 v2.0.0
Downloaded poly1305 v0.8.0
Downloaded pkcs1 v0.7.5
Downloaded phf_shared v0.11.3
Downloaded paste v1.0.15
Downloaded num-integer v0.1.46
Downloaded tracing-core v0.1.34
Downloaded thiserror-impl v2.0.12
Downloaded thiserror-impl v1.0.69
Downloaded test-log v0.2.18
Downloaded sval_nested v2.14.1
Downloaded sval_json v2.14.1
Downloaded sval_dynamic v2.14.1
Downloaded sval_buffer v2.14.1
Downloaded streaming-iterator v0.1.9
Downloaded spki v0.7.3
Downloaded signal-hook-mio v0.2.4
Downloaded shlex v1.3.0
Downloaded scrypt v0.11.0
Downloaded radicle-std-ext v0.1.1
Downloaded jobserver v0.1.31
Downloaded idna_adapter v1.2.0
Downloaded icu_normalizer v1.5.0
Downloaded iana-time-zone v0.1.60
Downloaded gix-utils v0.3.0
Downloaded gix-trace v0.1.13
Downloaded gix-sec v0.12.0
Downloaded gix-diff v0.53.0
Downloaded ghash v0.5.1
Downloaded getrandom v0.2.15
Downloaded tree-sitter-language v0.1.2
Downloaded spin v0.9.8
Downloaded referencing v0.30.0
Downloaded ref-cast-impl v1.0.24
Downloaded prodash v30.0.1
Downloaded proc-macro-error2 v2.0.1
Downloaded primeorder v0.13.6
Downloaded portable-atomic v1.11.0
Downloaded keccak v0.1.5
Downloaded hashbrown v0.14.3
Downloaded fxhash v0.2.1
Downloaded p384 v0.13.0
Downloaded lazy_static v1.5.0
Downloaded utf8_iter v1.0.4
Downloaded nu-ansi-term v0.46.0
Downloaded form_urlencoded v1.2.1
Downloaded gix-actor v0.35.4
Downloaded num v0.4.3
Downloaded indicatif v0.18.0
Downloaded gix-lock v18.0.0
Downloaded gix-commitgraph v0.29.0
Downloaded gix-command v0.6.2
Downloaded pretty_assertions v1.4.0
Downloaded parking_lot v0.12.5
Downloaded libm v0.2.8
Downloaded gix-revision v0.35.0
Downloaded gix-hashtable v0.9.0
Downloaded git2 v0.19.0
Downloaded ssh-key v0.6.6
Downloaded signature v2.2.0
Downloaded linux-raw-sys v0.9.4
Downloaded lexopt v0.3.0
Downloaded indexmap v2.2.6
Downloaded icu_collections v1.5.0
Downloaded fraction v0.15.3
Downloaded snapbox-macros v0.3.8
Downloaded salsa20 v0.10.2
Downloaded pbkdf2 v0.12.2
Downloaded once_cell v1.21.3
Downloaded num-complex v0.4.6
Downloaded num-bigint-dig v0.8.4
Downloaded log v0.4.27
Downloaded libz-sys v1.1.16
Downloaded icu_locid v1.5.0
Downloaded gix-odb v0.70.0
Downloaded gix-fs v0.16.1
Downloaded gix-features v0.43.1
Downloaded git-ref-format-macro v0.5.0
Downloaded either v1.11.0
Downloaded ed25519 v1.5.3
Downloaded parking_lot_core v0.9.12
Downloaded p256 v0.13.2
Downloaded outref v0.5.2
Downloaded num-iter v0.1.45
Downloaded normalize-line-endings v0.3.0
Downloaded newline-converter v0.3.0
Downloaded jiff-static v0.2.15
Downloaded env_logger v0.11.8
Downloaded der v0.7.9
Downloaded crossbeam-channel v0.5.15
Downloaded clap v4.5.44
Downloaded bcrypt-pbkdf v0.10.0
Downloaded jiff v0.2.15
Downloaded human-panic v2.0.3
Downloaded gix-path v0.10.20
Downloaded base64 v0.22.1
Downloaded base64 v0.21.7
Downloaded anyhow v1.0.82
Downloaded equivalent v1.0.1
Downloaded clap_lex v0.7.5
Downloaded opaque-debug v0.3.1
Downloaded crossterm v0.29.0
Downloaded gix-traverse v0.47.0
Downloaded noise-framework v0.4.0
Downloaded gix-pack v0.60.0
Downloaded fancy-regex v0.14.0
Downloaded data-encoding-macro-internal v0.1.12
Downloaded amplify_derive v4.0.0
Downloaded icu_provider v1.5.0
Downloaded icu_properties_data v1.5.1
Downloaded git-ref-format-core v0.5.0
Downloaded errno v0.3.13
Downloaded bytesize v2.0.1
Downloaded icu_locid_transform_data v1.5.1
Downloaded hmac v0.12.1
Downloaded gix-transport v0.48.0
Downloaded gix-packetline v0.19.1
Downloaded gix-object v0.50.2
Downloaded dunce v1.0.5
Downloaded data-encoding-macro v0.1.14
Downloaded ct-codecs v1.1.1
Downloaded anstyle-query v1.0.2
Downloaded gix-ref v0.53.1
Downloaded gix-prompt v0.11.1
Downloaded gix-date v0.10.5
Downloaded cpufeatures v0.2.12
Downloaded ec25519 v0.1.0
Downloaded cfg-if v1.0.0
Downloaded ahash v0.8.11
Downloaded group v0.13.0
Downloaded gix-url v0.32.0
Downloaded gix-tempfile v18.0.0
Downloaded gix-revwalk v0.21.0
Downloaded gix-negotiate v0.21.0
Downloaded gix-hash v0.19.0
Downloaded gix-config-value v0.15.1
Downloaded gimli v0.31.1
Downloaded getrandom v0.3.3
Downloaded fluent-uri v0.3.2
Downloaded cyphernet v0.5.2
Downloaded crypto-bigint v0.5.5
Downloaded chacha20 v0.9.1
Downloaded cc v1.2.2
Downloaded num-bigint v0.4.6
Downloaded maybe-async v0.2.10
Downloaded localtime v1.3.1
Downloaded libz-rs-sys v0.5.2
Downloaded inout v0.1.3
Downloaded icu_properties v1.5.1
Downloaded icu_normalizer_data v1.5.1
Downloaded elliptic-curve v0.13.8
Downloaded document-features v0.2.11
Downloaded cypheraddr v0.4.0
Downloaded base32 v0.4.0
Downloaded anstyle-parse v0.2.3
Downloaded amplify_syn v2.0.1
Downloaded crossbeam-utils v0.8.19
Downloaded cipher v0.4.4
Downloaded base16ct v0.2.0
Downloaded aes-gcm v0.10.3
Downloaded flate2 v1.1.1
Downloaded byteorder v1.5.0
Downloaded radicle-surf v0.25.0
Downloaded inquire v0.7.5
Downloaded bloomy v1.2.0
Downloaded bitflags v1.3.2
Downloaded console v0.16.0
Downloaded bitflags v2.9.1
Compiling libc v0.2.174
Compiling proc-macro2 v1.0.101
Compiling unicode-ident v1.0.12
Compiling quote v1.0.41
Checking cfg-if v1.0.0
Compiling shlex v1.3.0
Compiling version_check v0.9.4
Compiling jobserver v0.1.31
Checking memchr v2.7.2
Compiling cc v1.2.2
Checking getrandom v0.2.15
Compiling typenum v1.17.0
Compiling generic-array v0.14.7
Compiling syn v2.0.106
Checking rand_core v0.6.4
Compiling serde v1.0.219
Checking aho-corasick v1.1.3
Checking regex-syntax v0.8.5
Checking smallvec v1.15.1
Checking crypto-common v0.1.6
Checking subtle v2.5.0
Checking stable_deref_trait v1.2.0
Checking cpufeatures v0.2.12
Checking once_cell v1.21.3
Compiling parking_lot_core v0.9.12
Checking fastrand v2.3.0
Checking scopeguard v1.2.0
Checking lock_api v0.4.14
Checking block-buffer v0.10.4
Compiling thiserror v2.0.12
Checking digest v0.10.7
Checking parking_lot v0.12.5
Compiling crc32fast v1.5.0
Checking tinyvec_macros v0.1.1
Checking byteorder v1.5.0
Checking regex-automata v0.4.9
Checking tinyvec v1.6.0
Compiling typeid v1.0.3
Checking gix-trace v0.1.13
Checking bitflags v2.9.1
Checking home v0.5.9
Compiling synstructure v0.13.1
Checking unicode-normalization v0.1.23
Checking gix-utils v0.3.0
Checking zlib-rs v0.5.2
Checking same-file v1.0.6
Compiling serde_derive v1.0.219
Compiling thiserror-impl v2.0.12
Checking bstr v1.12.0
Checking libz-rs-sys v0.5.2
Compiling zerofrom-derive v0.1.6
Checking flate2 v1.1.1
Checking walkdir v2.5.0
Compiling yoke-derive v0.7.5
Checking gix-validate v0.10.0
Checking gix-path v0.10.20
Checking prodash v30.0.1
Checking gix-features v0.43.1
Checking zerofrom v0.1.6
Compiling zerovec-derive v0.10.3
Compiling displaydoc v0.2.5
Checking yoke v0.7.5
Checking itoa v1.0.11
Compiling heapless v0.8.0
Checking hash32 v0.3.1
Checking zeroize v1.7.0
Compiling pkg-config v0.3.30
Checking zerovec v0.10.4
Compiling thiserror v1.0.69
Compiling icu_locid_transform_data v1.5.1
Checking writeable v0.5.5
Checking litemap v0.7.5
Checking tinystr v0.7.6
Checking faster-hex v0.10.0
Compiling thiserror-impl v1.0.69
Compiling icu_provider_macros v1.5.0
Checking icu_locid v1.5.0
Compiling icu_properties_data v1.5.1
Compiling rustix v1.0.7
Checking icu_provider v1.5.0
Checking sha1 v0.10.6
Checking block-padding v0.3.3
Checking erased-serde v0.4.6
Checking serde_fmt v1.0.3
Compiling icu_normalizer_data v1.5.1
Checking linux-raw-sys v0.9.4
Checking inout v0.1.3
Checking sha1-checked v0.10.0
Checking icu_locid_transform v1.5.0
Checking value-bag-serde1 v1.11.1
Checking value-bag v1.11.1
Checking log v0.4.27
Checking icu_collections v1.5.0
Compiling getrandom v0.3.3
Compiling syn v1.0.109
Checking icu_properties v1.5.1
Checking gix-hash v0.19.0
Checking cipher v0.4.4
Checking write16 v1.0.0
Checking utf8_iter v1.0.4
Checking utf16_iter v1.0.5
Checking percent-encoding v2.3.1
Checking form_urlencoded v1.2.1
Checking sha2 v0.10.8
Compiling vcpkg v0.2.15
Checking icu_normalizer v1.5.0
Checking universal-hash v0.5.1
Checking opaque-debug v0.3.1
Checking idna_adapter v1.2.0
Checking tempfile v3.23.0
Compiling libz-sys v1.1.16
Checking idna v1.0.3
Compiling autocfg v1.2.0
Checking url v2.5.4
Compiling num-traits v0.2.19
Compiling libgit2-sys v0.17.0+1.8.1
Compiling amplify_syn v2.0.1
Checking hashbrown v0.14.3
Compiling serde_json v1.0.140
Checking signature v1.6.4
Checking equivalent v1.0.1
Checking ed25519 v1.5.3
Checking indexmap v2.2.6
Checking aead v0.5.2
Checking amplify_num v0.5.2
Checking ryu v1.0.17
Checking ct-codecs v1.1.1
Compiling amplify_derive v4.0.0
Compiling ref-cast v1.0.24
Checking ascii v1.1.0
Checking ec25519 v0.1.0
Checking poly1305 v0.8.0
Checking git-ref-format-core v0.5.0
Checking chacha20 v0.9.1
Compiling ref-cast-impl v1.0.24
Checking amplify v4.6.0
Checking polyval v0.6.2
Checking cyphergraphy v0.3.0
Compiling sqlite3-src v0.5.1
Checking hmac v0.12.1
Checking dyn-clone v1.0.17
Checking base64ct v1.6.0
Checking keccak v0.1.5
Checking pbkdf2 v0.12.2
Checking sha3 v0.10.8
Checking pem-rfc7468 v0.7.0
Checking ghash v0.5.1
Checking ctr v0.9.2
Checking aes v0.8.4
Checking rand v0.8.5
Compiling crossbeam-utils v0.8.19
Checking base32 v0.4.0
Compiling data-encoding v2.5.0
Checking cypheraddr v0.4.0
Checking qcheck v1.0.0
Compiling data-encoding-macro-internal v0.1.12
Checking aes-gcm v0.10.3
Checking ssh-encoding v0.2.0
Checking chacha20poly1305 v0.10.1
Checking cbc v0.1.2
Checking blowfish v0.9.1
Compiling serde_derive_internals v0.29.1
Checking data-encoding-macro v0.1.14
Checking bcrypt-pbkdf v0.10.0
Checking ssh-cipher v0.2.0
Compiling schemars_derive v1.0.4
Checking noise-framework v0.4.0
Checking socks5-client v0.4.1
Checking signature v2.2.0
Checking base-x v0.2.11
Checking multibase v0.9.1
Checking ssh-key v0.6.6
Checking schemars v1.0.4
Checking crossbeam-channel v0.5.15
Checking cyphernet v0.5.2
Checking radicle-ssh v0.10.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-ssh)
Checking jiff v0.2.15
Checking lazy_static v1.5.0
Checking nonempty v0.9.0
Checking siphasher v1.0.1
Checking radicle-git-metadata v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-git-metadata)
Checking radicle-dag v0.10.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-dag)
Checking winnow v0.7.13
Checking hashbrown v0.15.5
Checking gix-date v0.10.5
Checking anstyle-query v1.0.2
Checking gix-actor v0.35.4
Checking gix-hashtable v0.9.0
Checking radicle-git-ref-format v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-git-ref-format)
Checking utf8parse v0.2.1
Checking base64 v0.21.7
Checking iana-time-zone v0.1.60
Checking chrono v0.4.38
Checking anstyle-parse v0.2.3
Checking gix-object v0.50.2
Checking colored v2.1.0
Checking serde-untagged v0.1.7
Checking bytesize v2.0.1
Checking localtime v1.3.1
Checking memmap2 v0.9.8
Checking colorchoice v1.0.0
Checking tree-sitter-language v0.1.2
Checking fast-glob v0.3.3
Checking anstyle v1.0.11
Checking dunce v1.0.5
Checking gix-chunk v0.4.11
Checking anstream v0.6.13
Checking gix-commitgraph v0.29.0
Checking gix-fs v0.16.1
Checking gix-revwalk v0.21.0
Checking gix-tempfile v18.0.0
Checking mio v1.0.4
Checking gix-quote v0.6.0
Checking sem_safe v0.2.0
Checking errno v0.3.13
Checking either v1.11.0
Checking shell-words v1.1.0
Checking gix-command v0.6.2
Checking signals_receipts v0.2.0
Compiling signal-hook v0.3.18
Compiling object v0.36.7
Checking gix-lock v18.0.0
Checking gix-url v0.32.0
Checking gix-config-value v0.15.1
Checking gix-sec v0.12.0
Checking signal-hook-registry v1.4.5
Compiling rustix v0.38.34
Checking gimli v0.31.1
Checking adler2 v2.0.0
Checking miniz_oxide v0.8.8
Checking gix-prompt v0.11.1
Checking addr2line v0.24.2
Checking radicle-signals v0.11.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-signals)
Checking gix-traverse v0.47.0
Checking gix-revision v0.35.0
Checking sqlite3-sys v0.15.2
Checking sqlite v0.32.0
Checking gix-diff v0.53.0
Checking radicle-crypto v0.14.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-crypto)
Checking mio v0.8.11
Checking gix-packetline v0.19.1
Compiling tree-sitter v0.24.4
Compiling linux-raw-sys v0.4.13
Compiling unicode-segmentation v1.11.0
Checking rustc-demangle v0.1.26
Compiling anyhow v1.0.82
Checking backtrace v0.3.75
Compiling convert_case v0.7.1
Checking gix-transport v0.48.0
Checking signal-hook-mio v0.2.4
Checking gix-pack v0.60.0
Checking gix-refspec v0.31.0
Checking gix-credentials v0.30.0
Checking gix-ref v0.53.1
Checking gix-shallow v0.5.0
Checking gix-negotiate v0.21.0
Checking regex v1.11.1
Compiling maybe-async v0.2.10
Compiling proc-macro-error-attr2 v2.0.0
Compiling portable-atomic v1.11.0
Checking arc-swap v1.7.1
Checking gix-odb v0.70.0
Checking gix-protocol v0.51.0
Compiling proc-macro-error2 v2.0.1
Compiling xattr v1.3.1
Compiling derive_more-impl v2.0.1
Compiling filetime v0.2.23
Checking uuid v1.16.0
Compiling litrs v0.4.1
Checking bytes v1.10.1
Checking bitflags v1.3.2
Checking lexopt v0.3.0
Checking unicode-width v0.2.1
Checking crossterm v0.25.0
Compiling document-features v0.2.11
Checking console v0.16.0
Checking derive_more v2.0.1
Compiling tar v0.4.40
Compiling git-ref-format-macro v0.5.0
Checking newline-converter v0.3.0
Checking snapbox-macros v0.3.8
Checking salsa20 v0.10.2
Checking fxhash v0.2.1
Checking unit-prefix v0.5.1
Checking normalize-line-endings v0.3.0
Checking streaming-iterator v0.1.9
Checking siphasher v0.3.11
Checking unicode-width v0.1.11
Checking similar v2.5.0
Checking bloomy v1.2.0
Checking inquire v0.7.5
Checking snapbox v0.4.17
Checking indicatif v0.18.0
Compiling radicle-surf v0.25.0
Checking scrypt v0.11.0
Checking git-ref-format v0.5.0
Checking crossterm v0.29.0
Checking unicode-display-width v0.3.0
Checking systemd-journal-logger v2.2.2
Checking serde_spanned v1.0.0
Checking toml_datetime v0.7.0
Compiling tree-sitter-md v0.3.2
Compiling tree-sitter-css v0.23.1
Compiling tree-sitter-ruby v0.23.1
Compiling tree-sitter-bash v0.23.3
Compiling tree-sitter-toml-ng v0.6.0
Compiling tree-sitter-go v0.23.4
Compiling tree-sitter-json v0.24.8
Compiling tree-sitter-c v0.23.2
Compiling tree-sitter-rust v0.23.2
Compiling tree-sitter-python v0.23.4
Compiling tree-sitter-html v0.23.2
Compiling tree-sitter-typescript v0.23.2
Checking clap_lex v0.7.5
Checking radicle-std-ext v0.1.1
Checking strsim v0.11.1
Compiling heck v0.5.0
Checking toml_writer v1.0.2
Checking pin-project-lite v0.2.16
Checking tokio v1.47.1
Compiling clap_derive v4.5.41
Checking toml v0.9.5
Checking clap_builder v4.5.44
Checking os_info v3.12.0
Compiling radicle-node v0.16.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-node)
Compiling radicle-cli v0.17.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-cli)
Checking yansi v0.5.1
Checking diff v0.1.13
Checking pretty_assertions v1.4.0
Checking human-panic v2.0.3
Checking clap v4.5.44
Checking structured-logger v1.0.4
Checking radicle-systemd v0.11.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-systemd)
Checking tree-sitter-highlight v0.24.4
Checking itertools v0.14.0
Checking num-integer v0.1.46
Compiling qcheck-macros v1.0.0
Checking socket2 v0.5.7
Checking timeago v0.4.2
Compiling escargot v0.5.10
Checking num-bigint v0.4.6
Compiling ahash v0.8.11
Checking num-iter v0.1.45
Checking num-complex v0.4.6
Checking num-rational v0.4.2
Checking env_filter v0.1.3
Checking zerocopy v0.7.35
Checking borrow-or-share v0.2.2
Checking bit-vec v0.8.0
Checking fluent-uri v0.3.2
Checking bit-set v0.8.0
Checking env_logger v0.11.8
Checking num v0.4.3
Checking phf_shared v0.11.3
Compiling test-log-macros v0.2.18
Checking outref v0.5.2
Checking vsimd v0.8.0
Compiling paste v1.0.15
Compiling radicle-remote-helper v0.14.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-remote-helper)
Checking uuid-simd v0.8.0
Checking test-log v0.2.18
Checking phf v0.11.3
Checking referencing v0.30.0
Checking fraction v0.15.3
Checking fancy-regex v0.14.0
Checking email_address v0.2.9
Checking bytecount v0.6.8
Checking num-cmp v0.1.0
Checking base64 v0.22.1
Checking emojis v0.6.4
Checking jsonschema v0.30.0
Checking git2 v0.19.0
Checking radicle-oid v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-oid)
Checking radicle-git-ext v0.10.0
Checking radicle-term v0.16.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-term)
Checking radicle-cob v0.17.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-cob)
Checking radicle v0.20.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle)
Checking radicle-fetch v0.16.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-fetch)
Checking radicle-cli-test v0.13.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-cli-test)
Checking radicle-protocol v0.4.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-protocol)
Checking radicle-schemars v0.6.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-schemars)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 52.47s
+ cargo build --all-targets --workspace
Compiling libc v0.2.174
Compiling cfg-if v1.0.0
Compiling shlex v1.3.0
Compiling memchr v2.7.2
Compiling typenum v1.17.0
Compiling serde v1.0.219
Compiling generic-array v0.14.7
Compiling aho-corasick v1.1.3
Compiling jobserver v0.1.31
Compiling getrandom v0.2.15
Compiling cc v1.2.2
Compiling rand_core v0.6.4
Compiling crypto-common v0.1.6
Compiling regex-syntax v0.8.5
Compiling smallvec v1.15.1
Compiling subtle v2.5.0
Compiling stable_deref_trait v1.2.0
Compiling once_cell v1.21.3
Compiling cpufeatures v0.2.12
Compiling fastrand v2.3.0
Compiling scopeguard v1.2.0
Compiling regex-automata v0.4.9
Compiling lock_api v0.4.14
Compiling parking_lot_core v0.9.12
Compiling block-buffer v0.10.4
Compiling digest v0.10.7
Compiling parking_lot v0.12.5
Compiling thiserror v2.0.12
Compiling bitflags v2.9.1
Compiling byteorder v1.5.0
Compiling tinyvec_macros v0.1.1
Compiling tinyvec v1.6.0
Compiling crc32fast v1.5.0
Compiling gix-trace v0.1.13
Compiling typeid v1.0.3
Compiling home v0.5.9
Compiling erased-serde v0.4.6
Compiling serde_fmt v1.0.3
Compiling unicode-normalization v0.1.23
Compiling zlib-rs v0.5.2
Compiling value-bag-serde1 v1.11.1
Compiling same-file v1.0.6
Compiling gix-utils v0.3.0
Compiling walkdir v2.5.0
Compiling zerofrom v0.1.6
Compiling value-bag v1.11.1
Compiling bstr v1.12.0
Compiling prodash v30.0.1
Compiling gix-validate v0.10.0
Compiling yoke v0.7.5
Compiling gix-path v0.10.20
Compiling log v0.4.27
Compiling zerovec v0.10.4
Compiling itoa v1.0.11
Compiling libz-rs-sys v0.5.2
Compiling flate2 v1.1.1
Compiling gix-features v0.43.1
Compiling hash32 v0.3.1
Compiling zeroize v1.7.0
Compiling heapless v0.8.0
Compiling tinystr v0.7.6
Compiling writeable v0.5.5
Compiling litemap v0.7.5
Compiling icu_locid v1.5.0
Compiling faster-hex v0.10.0
Compiling icu_locid_transform_data v1.5.1
Compiling sha1 v0.10.6
Compiling block-padding v0.3.3
Compiling icu_provider v1.5.0
Compiling linux-raw-sys v0.9.4
Compiling icu_locid_transform v1.5.0
Compiling thiserror v1.0.69
Compiling inout v0.1.3
Compiling sha1-checked v0.10.0
Compiling icu_properties_data v1.5.1
Compiling icu_collections v1.5.0
Compiling gix-hash v0.19.0
Compiling rustix v1.0.7
Compiling icu_properties v1.5.1
Compiling cipher v0.4.4
Compiling icu_normalizer_data v1.5.1
Compiling write16 v1.0.0
Compiling utf8_iter v1.0.4
Compiling utf16_iter v1.0.5
Compiling getrandom v0.3.3
Compiling percent-encoding v2.3.1
Compiling sha2 v0.10.8
Compiling form_urlencoded v1.2.1
Compiling libz-sys v1.1.16
Compiling universal-hash v0.5.1
Compiling opaque-debug v0.3.1
Compiling libgit2-sys v0.17.0+1.8.1
Compiling icu_normalizer v1.5.0
Compiling equivalent v1.0.1
Compiling signature v1.6.4
Compiling hashbrown v0.14.3
Compiling idna_adapter v1.2.0
Compiling idna v1.0.3
Compiling tempfile v3.23.0
Compiling indexmap v2.2.6
Compiling url v2.5.4
Compiling ed25519 v1.5.3
Compiling aead v0.5.2
Compiling amplify_num v0.5.2
Compiling ryu v1.0.17
Compiling ct-codecs v1.1.1
Compiling ascii v1.1.0
Compiling ec25519 v0.1.0
Compiling serde_json v1.0.140
Compiling amplify v4.6.0
Compiling num-traits v0.2.19
Compiling poly1305 v0.8.0
Compiling chacha20 v0.9.1
Compiling git-ref-format-core v0.5.0
Compiling ref-cast v1.0.24
Compiling cyphergraphy v0.3.0
Compiling polyval v0.6.2
Compiling sqlite3-src v0.5.1
Compiling hmac v0.12.1
Compiling dyn-clone v1.0.17
Compiling base64ct v1.6.0
Compiling keccak v0.1.5
Compiling pbkdf2 v0.12.2
Compiling pem-rfc7468 v0.7.0
Compiling sha3 v0.10.8
Compiling ghash v0.5.1
Compiling aes v0.8.4
Compiling ctr v0.9.2
Compiling rand v0.8.5
Compiling base32 v0.4.0
Compiling qcheck v1.0.0
Compiling cypheraddr v0.4.0
Compiling aes-gcm v0.10.3
Compiling ssh-encoding v0.2.0
Compiling chacha20poly1305 v0.10.1
Compiling cbc v0.1.2
Compiling blowfish v0.9.1
Compiling data-encoding v2.5.0
Compiling ssh-cipher v0.2.0
Compiling data-encoding-macro v0.1.14
Compiling bcrypt-pbkdf v0.10.0
Compiling noise-framework v0.4.0
Compiling socks5-client v0.4.1
Compiling crossbeam-utils v0.8.19
Compiling base-x v0.2.11
Compiling signature v2.2.0
Compiling crossbeam-channel v0.5.15
Compiling ssh-key v0.6.6
Compiling multibase v0.9.1
Compiling cyphernet v0.5.2
Compiling schemars v1.0.4
Compiling radicle-ssh v0.10.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-ssh)
Compiling lazy_static v1.5.0
Compiling jiff v0.2.15
Compiling nonempty v0.9.0
Compiling siphasher v1.0.1
Compiling radicle-git-metadata v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-git-metadata)
Compiling radicle-dag v0.10.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-dag)
Compiling winnow v0.7.13
Compiling gix-date v0.10.5
Compiling hashbrown v0.15.5
Compiling anstyle-query v1.0.2
Compiling gix-hashtable v0.9.0
Compiling gix-actor v0.35.4
Compiling radicle-git-ref-format v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-git-ref-format)
Compiling iana-time-zone v0.1.60
Compiling utf8parse v0.2.1
Compiling base64 v0.21.7
Compiling anstyle-parse v0.2.3
Compiling chrono v0.4.38
Compiling gix-object v0.50.2
Compiling colored v2.1.0
Compiling sqlite3-sys v0.15.2
Compiling serde-untagged v0.1.7
Compiling sqlite v0.32.0
Compiling localtime v1.3.1
Compiling bytesize v2.0.1
Compiling memmap2 v0.9.8
Compiling radicle-crypto v0.14.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-crypto)
Compiling colorchoice v1.0.0
Compiling tree-sitter-language v0.1.2
Compiling dunce v1.0.5
Compiling anstyle v1.0.11
Compiling fast-glob v0.3.3
Compiling anstream v0.6.13
Compiling gix-chunk v0.4.11
Compiling gix-commitgraph v0.29.0
Compiling adler2 v2.0.0
Compiling gix-fs v0.16.1
Compiling gix-revwalk v0.21.0
Compiling gix-tempfile v18.0.0
Compiling mio v1.0.4
Compiling gix-quote v0.6.0
Compiling errno v0.3.13
Compiling sem_safe v0.2.0
Compiling unicode-segmentation v1.11.0
Compiling either v1.11.0
Compiling shell-words v1.1.0
Compiling gix-command v0.6.2
Compiling signals_receipts v0.2.0
Compiling gix-lock v18.0.0
Compiling gix-url v0.32.0
Compiling gix-config-value v0.15.1
Compiling gix-sec v0.12.0
Compiling signal-hook-registry v1.4.5
Compiling gimli v0.31.1
Compiling gix-prompt v0.11.1
Compiling signal-hook v0.3.18
Compiling radicle-signals v0.11.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-signals)
Compiling object v0.36.7
Compiling gix-revision v0.35.0
Compiling addr2line v0.24.2
Compiling gix-traverse v0.47.0
Compiling miniz_oxide v0.8.8
Compiling gix-diff v0.53.0
Compiling gix-packetline v0.19.1
Compiling mio v0.8.11
Compiling tree-sitter v0.24.4
Compiling rustc-demangle v0.1.26
Compiling rustix v0.38.34
Compiling backtrace v0.3.75
Compiling signal-hook-mio v0.2.4
Compiling gix-pack v0.60.0
Compiling gix-transport v0.48.0
Compiling gix-refspec v0.31.0
Compiling gix-credentials v0.30.0
Compiling gix-ref v0.53.1
Compiling gix-shallow v0.5.0
Compiling convert_case v0.7.1
Compiling gix-negotiate v0.21.0
Compiling regex v1.11.1
Compiling arc-swap v1.7.1
Compiling gix-odb v0.70.0
Compiling gix-protocol v0.51.0
Compiling derive_more-impl v2.0.1
Compiling xattr v1.3.1
Compiling uuid v1.16.0
Compiling filetime v0.2.23
Compiling bitflags v1.3.2
Compiling unicode-width v0.2.1
Compiling bytes v1.10.1
Compiling lexopt v0.3.0
Compiling console v0.16.0
Compiling git-ref-format-macro v0.5.0
Compiling crossterm v0.25.0
Compiling tar v0.4.40
Compiling derive_more v2.0.1
Compiling portable-atomic v1.11.0
Compiling anyhow v1.0.82
Compiling newline-converter v0.3.0
Compiling snapbox-macros v0.3.8
Compiling salsa20 v0.10.2
Compiling fxhash v0.2.1
Compiling streaming-iterator v0.1.9
Compiling siphasher v0.3.11
Compiling normalize-line-endings v0.3.0
Compiling similar v2.5.0
Compiling unicode-width v0.1.11
Compiling unit-prefix v0.5.1
Compiling inquire v0.7.5
Compiling indicatif v0.18.0
Compiling snapbox v0.4.17
Compiling bloomy v1.2.0
Compiling radicle-surf v0.25.0
Compiling scrypt v0.11.0
Compiling crossterm v0.29.0
Compiling git-ref-format v0.5.0
Compiling unicode-display-width v0.3.0
Compiling systemd-journal-logger v2.2.2
Compiling tree-sitter-md v0.3.2
Compiling tree-sitter-json v0.24.8
Compiling tree-sitter-ruby v0.23.1
Compiling tree-sitter-rust v0.23.2
Compiling tree-sitter-html v0.23.2
Compiling tree-sitter-python v0.23.4
Compiling tree-sitter-go v0.23.4
Compiling tree-sitter-typescript v0.23.2
Compiling tree-sitter-css v0.23.1
Compiling tree-sitter-toml-ng v0.6.0
Compiling tree-sitter-c v0.23.2
Compiling tree-sitter-bash v0.23.3
Compiling serde_spanned v1.0.0
Compiling toml_datetime v0.7.0
Compiling toml_writer v1.0.2
Compiling pin-project-lite v0.2.16
Compiling strsim v0.11.1
Compiling clap_lex v0.7.5
Compiling radicle-std-ext v0.1.1
Compiling clap_builder v4.5.44
Compiling toml v0.9.5
Compiling tokio v1.47.1
Compiling os_info v3.12.0
Compiling radicle-cli v0.17.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-cli)
Compiling radicle-node v0.16.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-node)
Compiling diff v0.1.13
Compiling yansi v0.5.1
Compiling pretty_assertions v1.4.0
Compiling human-panic v2.0.3
Compiling clap v4.5.44
Compiling structured-logger v1.0.4
Compiling radicle-systemd v0.11.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-systemd)
Compiling tree-sitter-highlight v0.24.4
Compiling itertools v0.14.0
Compiling num-integer v0.1.46
Compiling socket2 v0.5.7
Compiling timeago v0.4.2
Compiling escargot v0.5.10
Compiling num-bigint v0.4.6
Compiling num-iter v0.1.45
Compiling num-complex v0.4.6
Compiling num-rational v0.4.2
Compiling env_filter v0.1.3
Compiling bit-vec v0.8.0
Compiling zerocopy v0.7.35
Compiling borrow-or-share v0.2.2
Compiling bit-set v0.8.0
Compiling fluent-uri v0.3.2
Compiling env_logger v0.11.8
Compiling ahash v0.8.11
Compiling num v0.4.3
Compiling phf_shared v0.11.3
Compiling vsimd v0.8.0
Compiling outref v0.5.2
Compiling radicle-remote-helper v0.14.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-remote-helper)
Compiling phf v0.11.3
Compiling uuid-simd v0.8.0
Compiling referencing v0.30.0
Compiling test-log v0.2.18
Compiling fraction v0.15.3
Compiling fancy-regex v0.14.0
Compiling email_address v0.2.9
Compiling bytecount v0.6.8
Compiling num-cmp v0.1.0
Compiling base64 v0.22.1
Compiling emojis v0.6.4
Compiling jsonschema v0.30.0
Compiling git2 v0.19.0
Compiling radicle-oid v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-oid)
Compiling radicle-git-ext v0.10.0
Compiling radicle-term v0.16.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-term)
Compiling radicle-cob v0.17.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-cob)
Compiling radicle v0.20.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle)
Compiling radicle-fetch v0.16.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-fetch)
Compiling radicle-protocol v0.4.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-protocol)
Compiling radicle-cli-test v0.13.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-cli-test)
Compiling radicle-schemars v0.6.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-schemars)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 17s
+ cargo doc --workspace --no-deps
Checking regex-automata v0.4.9
Compiling syn v1.0.109
Checking idna v1.0.3
Checking radicle-ssh v0.10.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-ssh)
Compiling num-traits v0.2.19
Checking url v2.5.4
Checking radicle-git-metadata v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-git-metadata)
Checking git2 v0.19.0
Checking radicle-dag v0.10.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-dag)
Checking chrono v0.4.38
Checking bstr v1.12.0
Compiling amplify_syn v2.0.1
Checking gix-validate v0.10.0
Checking gix-path v0.10.20
Checking git-ref-format-core v0.5.0
Compiling data-encoding-macro-internal v0.1.12
Checking gix-features v0.43.1
Compiling amplify_derive v4.0.0
Checking gix-date v0.10.5
Checking gix-hash v0.19.0
Checking gix-actor v0.35.4
Checking gix-hashtable v0.9.0
Checking radicle-oid v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-oid)
Checking gix-object v0.50.2
Checking data-encoding-macro v0.1.14
Checking gix-commitgraph v0.29.0
Checking multibase v0.9.1
Checking radicle-git-ref-format v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-git-ref-format)
Checking gix-fs v0.16.1
Checking gix-quote v0.6.0
Checking gix-command v0.6.2
Checking gix-tempfile v18.0.0
Checking gix-url v0.32.0
Checking gix-lock v18.0.0
Checking gix-revwalk v0.21.0
Checking gix-config-value v0.15.1
Checking gix-diff v0.53.0
Checking gix-revision v0.35.0
Checking gix-traverse v0.47.0
Checking gix-prompt v0.11.1
Checking radicle-signals v0.11.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-signals)
Checking gix-packetline v0.19.1
Checking amplify v4.6.0
Checking regex v1.11.1
Checking gix-transport v0.48.0
Checking gix-refspec v0.31.0
Checking tree-sitter v0.24.4
Checking cyphergraphy v0.3.0
Checking gix-pack v0.60.0
Checking git-ref-format v0.5.0
Checking cypheraddr v0.4.0
Checking noise-framework v0.4.0
Checking gix-credentials v0.30.0
Checking socks5-client v0.4.1
Checking gix-negotiate v0.21.0
Checking gix-ref v0.53.1
Checking cyphernet v0.5.2
Checking radicle-crypto v0.14.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-crypto)
Checking gix-shallow v0.5.0
Checking radicle-git-ext v0.10.0
Checking radicle-cob v0.17.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-cob)
Checking gix-odb v0.70.0
Checking uuid v1.16.0
Checking gix-protocol v0.51.0
Compiling radicle-cli v0.17.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-cli)
Checking human-panic v2.0.3
Checking radicle-surf v0.25.0
Checking tree-sitter-toml-ng v0.6.0
Checking radicle v0.20.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle)
Checking radicle-term v0.16.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-term)
Checking tree-sitter-highlight v0.24.4
Compiling radicle-node v0.16.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-node)
Checking radicle-systemd v0.11.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-systemd)
Documenting radicle-systemd v0.11.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-systemd)
Documenting radicle v0.20.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle)
Documenting radicle-cob v0.17.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-cob)
Documenting radicle-term v0.16.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-term)
Documenting radicle-crypto v0.14.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-crypto)
Documenting radicle-signals v0.11.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-signals)
Documenting radicle-oid v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-oid)
Documenting radicle-git-ref-format v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-git-ref-format)
Documenting radicle-git-metadata v0.1.0 (/b2b8f63a-2f94-4973-9c6f-045a0bf65e93/w/crates/radicle-git-metadata)
error: unresolved link to `::qcheck::Arbitrary`
--> crates/radicle-oid/src/lib.rs:55:28
|
55 | //! [`qcheck::Arbitrary`]: ::qcheck::Arbitrary
| ^^^^^^^^^^^^^^^^^^^ no item named `` in scope
|
= note: `-D rustdoc::broken-intra-doc-links` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(rustdoc::broken_intra_doc_links)]`
error: unresolved link to `::radicle_git_ref_format::Component`
--> crates/radicle-oid/src/lib.rs:61:44
|
61 | //! [`radicle_git_ref_format::Component`]: ::radicle_git_ref_format::Component
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `` in scope
error: unresolved link to `::radicle_git_ref_format::RefString`
--> crates/radicle-oid/src/lib.rs:62:44
|
62 | //! [`radicle_git_ref_format::RefString`]: ::radicle_git_ref_format::RefString
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `` in scope
error: could not document `radicle-oid`
warning: build failed, waiting for other jobs to finish...
Exit code: 101
{
"response": "finished",
"result": "failure"
}