From 47d20003c0dee4a483d5b8c203d90adb0b29055c Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Tue, 15 Nov 2022 16:22:02 +0100 Subject: [PATCH] Implement `rad-patch` Signed-off-by: Alexis Sellier --- Cargo.lock | 7 + radicle-cli/Cargo.toml | 1 + radicle-cli/src/commands.rs | 2 + radicle-cli/src/commands/ls.rs | 2 +- radicle-cli/src/commands/patch.rs | 158 ++++++++++++ radicle-cli/src/commands/patch/common.rs | 162 ++++++++++++ radicle-cli/src/commands/patch/create.rs | 307 +++++++++++++++++++++++ radicle-cli/src/commands/patch/list.rs | 167 ++++++++++++ radicle-cli/src/lib.rs | 2 + radicle-cli/src/terminal/format.rs | 16 +- radicle-cli/src/terminal/patch.rs | 2 +- radicle/src/cob.rs | 9 +- radicle/src/cob/store.rs | 5 + radicle/src/rad.rs | 14 +- radicle/src/storage.rs | 2 +- radicle/src/storage/refs.rs | 11 + 16 files changed, 853 insertions(+), 14 deletions(-) create mode 100644 radicle-cli/src/commands/patch.rs create mode 100644 radicle-cli/src/commands/patch/common.rs create mode 100644 radicle-cli/src/commands/patch/create.rs create mode 100644 radicle-cli/src/commands/patch/list.rs diff --git a/Cargo.lock b/Cargo.lock index e3c63597..f924467a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1579,6 +1579,7 @@ dependencies = [ "radicle-crypto", "serde_json", "thiserror", + "timeago", "zeroize", ] @@ -2242,6 +2243,12 @@ dependencies = [ "time-core", ] +[[package]] +name = "timeago" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ec32dde57efb15c035ac074118d7f32820451395f28cb0524a01d4e94983b26" + [[package]] name = "tinyvec" version = "1.6.0" diff --git a/radicle-cli/Cargo.toml b/radicle-cli/Cargo.toml index f319f97a..e0357bf8 100644 --- a/radicle-cli/Cargo.toml +++ b/radicle-cli/Cargo.toml @@ -16,6 +16,7 @@ lexopt = { version = "0.2" } log = { version = "0.4", features = ["std"] } serde_json = { version = "1" } thiserror = { version = "1" } +timeago = { version = "0.3", default-features = false } zeroize = { version = "1.1" } [dependencies.radicle] diff --git a/radicle-cli/src/commands.rs b/radicle-cli/src/commands.rs index 5e58c099..46c3922c 100644 --- a/radicle-cli/src/commands.rs +++ b/radicle-cli/src/commands.rs @@ -14,6 +14,8 @@ pub mod rad_init; pub mod rad_inspect; #[path = "commands/ls.rs"] pub mod rad_ls; +#[path = "commands/patch.rs"] +pub mod rad_patch; #[path = "commands/push.rs"] pub mod rad_push; #[path = "commands/rm.rs"] diff --git a/radicle-cli/src/commands/ls.rs b/radicle-cli/src/commands/ls.rs index 6a8c57cb..692eddb3 100644 --- a/radicle-cli/src/commands/ls.rs +++ b/radicle-cli/src/commands/ls.rs @@ -51,7 +51,7 @@ pub fn run(_options: Options, ctx: impl term::Context) -> anyhow::Result<()> { let Ok(repo) = storage.repository(id) else { return }; let Ok((_, head)) = repo.head() else { return }; let Ok(Doc { payload, .. }) = repo.project_of(profile.id()) else { return }; - let head = term::format::oid(&head); + let head = term::format::oid(head); table.push([ term::format::bold(payload.name), term::format::tertiary(id), diff --git a/radicle-cli/src/commands/patch.rs b/radicle-cli/src/commands/patch.rs new file mode 100644 index 00000000..9147457b --- /dev/null +++ b/radicle-cli/src/commands/patch.rs @@ -0,0 +1,158 @@ +#[path = "patch/common.rs"] +mod common; +#[path = "patch/create.rs"] +mod create; +#[path = "patch/list.rs"] +mod list; + +use std::ffi::OsString; +use std::str::FromStr; + +use anyhow::anyhow; + +use radicle::cob::patch::PatchId; +use radicle::prelude::*; + +use crate::terminal as term; +use crate::terminal::args::{Args, Error, Help}; +use crate::terminal::patch::Comment; + +pub const HELP: Help = Help { + name: "patch", + description: "Work with radicle patches", + version: env!("CARGO_PKG_VERSION"), + usage: r#" +Usage + + rad patch [