From 027ccb943e75ce289d2f4e7a069703d89def6d53 Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Thu, 20 Apr 2023 21:07:10 +0200 Subject: [PATCH] cli: implement the rad remote list command Implementing the `rad remote list` command in order to be able to list all the radicle remotes added to the repository Signed-off-by: Vincenzo Palazzo --- radicle-cli/src/commands/remote/list.rs | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 radicle-cli/src/commands/remote/list.rs diff --git a/radicle-cli/src/commands/remote/list.rs b/radicle-cli/src/commands/remote/list.rs new file mode 100644 index 00000000..1a94798b --- /dev/null +++ b/radicle-cli/src/commands/remote/list.rs @@ -0,0 +1,35 @@ +use radicle_term::{Element, Table}; + +use crate::git; +use crate::terminal as term; + +#[inline] +fn format_direction(d: &git::Direction) -> String { + match d { + git::Direction::Fetch => "fetch".to_owned(), + git::Direction::Push => "push".to_owned(), + } +} + +pub fn run(repo: &git::Repository) -> anyhow::Result<()> { + let mut table = Table::default(); + let remotes = git::rad_remotes(repo)?; + for r in remotes { + for spec in r.refspecs() { + let dir = spec.direction(); + let url = r.url.clone(); + let name = r.name.clone(); + let nid_row = url.namespace.map_or( + term::format::dim("This is the canonical upstream".to_string()), + |namespace| term::format::highlight(namespace.to_string()), + ); + table.push([ + term::format::badge_positive(format_direction(&dir)), + term::format::highlight(name.to_owned()), + nid_row, + ]); + } + } + table.print(); + Ok(()) +}