cli: show reviews on `rad patch list`
When running `rad patch list`, show the set of delegate reviews for each patch, with the following meaning for the symbols: - ✔: delegate has accepted the patch - ✗: delegate has rejected the patch - -: delegate has not made a verdict on the patch Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com> X-Clacks-Overhead: GNU Terry Pratchett
This commit is contained in:
parent
ce1e1f71ae
commit
14ce5fe7b1
|
|
@ -42,11 +42,11 @@ Patch can be listed.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ rad patch
|
$ rad patch
|
||||||
╭─────────────────────────────────────────────────────────────────────────────────────────╮
|
╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
|
||||||
│ ● ID Title Author Head + - Updated │
|
│ ● ID Title Author Reviews Head + - Updated │
|
||||||
├─────────────────────────────────────────────────────────────────────────────────────────┤
|
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
│ ● aa45913 Define power requirements z6MknSL…StBU8Vi (you) 3e674d1 +0 -0 now │
|
│ ● aa45913 Define power requirements z6MknSL…StBU8Vi (you) - 3e674d1 +0 -0 now │
|
||||||
╰─────────────────────────────────────────────────────────────────────────────────────────╯
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
||||||
```
|
```
|
||||||
|
|
||||||
Both issue and patch COBs can be listed.
|
Both issue and patch COBs can be listed.
|
||||||
|
|
|
||||||
|
|
@ -69,12 +69,12 @@ To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkE
|
||||||
```
|
```
|
||||||
```
|
```
|
||||||
$ rad patch --merged
|
$ rad patch --merged
|
||||||
╭────────────────────────────────────────────────────────────────────╮
|
╭─────────────────────────────────────────────────────────────────────────────╮
|
||||||
│ ● ID Title Author Head + - Updated │
|
│ ● ID Title Author Reviews Head + - Updated │
|
||||||
├────────────────────────────────────────────────────────────────────┤
|
├─────────────────────────────────────────────────────────────────────────────┤
|
||||||
│ ✔ [ ... ] Second change alice (you) daf349f +0 -0 now │
|
│ ✔ [ ... ] Second change alice (you) - daf349f +0 -0 now │
|
||||||
│ ✔ [ ... ] First change alice (you) 20aa5dd +0 -0 now │
|
│ ✔ [ ... ] First change alice (you) - 20aa5dd +0 -0 now │
|
||||||
╰────────────────────────────────────────────────────────────────────╯
|
╰─────────────────────────────────────────────────────────────────────────────╯
|
||||||
$ rad patch show 356f73863a8920455ff6e77cd9c805d68910551b
|
$ rad patch show 356f73863a8920455ff6e77cd9c805d68910551b
|
||||||
╭────────────────────────────────────────────────────────────────╮
|
╭────────────────────────────────────────────────────────────────╮
|
||||||
│ Title Second change │
|
│ Title Second change │
|
||||||
|
|
|
||||||
|
|
@ -45,11 +45,11 @@ To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkE
|
||||||
When listing, we see that it has one addition:
|
When listing, we see that it has one addition:
|
||||||
```
|
```
|
||||||
$ rad patch list
|
$ rad patch list
|
||||||
╭────────────────────────────────────────────────────────────────────────╮
|
╭─────────────────────────────────────────────────────────────────────────────────╮
|
||||||
│ ● ID Title Author Head + - Updated │
|
│ ● ID Title Author Reviews Head + - Updated │
|
||||||
├────────────────────────────────────────────────────────────────────────┤
|
├─────────────────────────────────────────────────────────────────────────────────┤
|
||||||
│ ● 217f050 Add Alan z6MknSL…StBU8Vi (you) 5c88a79 +1 -0 now │
|
│ ● 217f050 Add Alan z6MknSL…StBU8Vi (you) - 5c88a79 +1 -0 now │
|
||||||
╰────────────────────────────────────────────────────────────────────────╯
|
╰─────────────────────────────────────────────────────────────────────────────────╯
|
||||||
```
|
```
|
||||||
|
|
||||||
When showing the patch, we see that it is `ahead 1, behind 1`, since master has
|
When showing the patch, we see that it is `ahead 1, behind 1`, since master has
|
||||||
|
|
|
||||||
|
|
@ -96,12 +96,12 @@ And both patches:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ rad patch
|
$ rad patch
|
||||||
╭───────────────────────────────────────────────────────────────────────────────╮
|
╭────────────────────────────────────────────────────────────────────────────────────────╮
|
||||||
│ ● ID Title Author Head + - Updated │
|
│ ● ID Title Author Reviews Head + - Updated │
|
||||||
├───────────────────────────────────────────────────────────────────────────────┤
|
├────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
│ ● 6035d2f Add things #1 z6MknSL…StBU8Vi (you) 42d894a +0 -0 now │
|
│ ● 6035d2f Add things #1 z6MknSL…StBU8Vi (you) - 42d894a +0 -0 now │
|
||||||
│ ● 9580891 Add more things z6MknSL…StBU8Vi (you) 8b0ea80 +0 -0 now │
|
│ ● 9580891 Add more things z6MknSL…StBU8Vi (you) - 8b0ea80 +0 -0 now │
|
||||||
╰───────────────────────────────────────────────────────────────────────────────╯
|
╰────────────────────────────────────────────────────────────────────────────────────────╯
|
||||||
```
|
```
|
||||||
|
|
||||||
To update our patch, we simply push commits to the upstream branch:
|
To update our patch, we simply push commits to the upstream branch:
|
||||||
|
|
|
||||||
|
|
@ -35,11 +35,11 @@ It will now be listed as one of the project's open patches.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ rad patch
|
$ rad patch
|
||||||
╭─────────────────────────────────────────────────────────────────────────────────────────╮
|
╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
|
||||||
│ ● ID Title Author Head + - Updated │
|
│ ● ID Title Author Reviews Head + - Updated │
|
||||||
├─────────────────────────────────────────────────────────────────────────────────────────┤
|
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
│ ● aa45913 Define power requirements z6MknSL…StBU8Vi (you) 3e674d1 +0 -0 now │
|
│ ● aa45913 Define power requirements z6MknSL…StBU8Vi (you) - 3e674d1 +0 -0 now │
|
||||||
╰─────────────────────────────────────────────────────────────────────────────────────────╯
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
||||||
```
|
```
|
||||||
```
|
```
|
||||||
$ rad patch show aa45913e757cacd46972733bddee5472c78fa32a -p
|
$ rad patch show aa45913e757cacd46972733bddee5472c78fa32a -p
|
||||||
|
|
@ -75,11 +75,11 @@ We can also list only patches that we've authored.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ rad patch list --authored
|
$ rad patch list --authored
|
||||||
╭─────────────────────────────────────────────────────────────────────────────────────────╮
|
╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
|
||||||
│ ● ID Title Author Head + - Updated │
|
│ ● ID Title Author Reviews Head + - Updated │
|
||||||
├─────────────────────────────────────────────────────────────────────────────────────────┤
|
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
│ ● aa45913 Define power requirements z6MknSL…StBU8Vi (you) 3e674d1 +0 -0 now │
|
│ ● aa45913 Define power requirements z6MknSL…StBU8Vi (you) - 3e674d1 +0 -0 now │
|
||||||
╰─────────────────────────────────────────────────────────────────────────────────────────╯
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
||||||
```
|
```
|
||||||
|
|
||||||
We can also see that it set an upstream for our patch branch:
|
We can also see that it set an upstream for our patch branch:
|
||||||
|
|
@ -181,6 +181,12 @@ $ rad patch show aa45913
|
||||||
│ ↑ updated to 6e5a3b7b2ce27b32e7ccc2f0b3f4594897dde638 (27857ec) now │
|
│ ↑ updated to 6e5a3b7b2ce27b32e7ccc2f0b3f4594897dde638 (27857ec) now │
|
||||||
│ └─ ✓ accepted by z6MknSL…StBU8Vi (you) now │
|
│ └─ ✓ accepted by z6MknSL…StBU8Vi (you) now │
|
||||||
╰─────────────────────────────────────────────────────────────────────╯
|
╰─────────────────────────────────────────────────────────────────────╯
|
||||||
|
$ rad patch list
|
||||||
|
╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
|
||||||
|
│ ● ID Title Author Reviews Head + - Updated │
|
||||||
|
├──────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
|
│ ● aa45913 Define power requirements z6MknSL…StBU8Vi (you) ✔ 27857ec +0 -0 now │
|
||||||
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
||||||
```
|
```
|
||||||
|
|
||||||
If you make a mistake on the patch description, you can always change it!
|
If you make a mistake on the patch description, you can always change it!
|
||||||
|
|
|
||||||
|
|
@ -35,11 +35,11 @@ It will now be listed as one of the project's open patches.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ rad patch
|
$ rad patch
|
||||||
╭────────────────────────────────────────────────────────────────────────────────╮
|
╭─────────────────────────────────────────────────────────────────────────────────────────╮
|
||||||
│ ● ID Title Author Head + - Updated │
|
│ ● ID Title Author Reviews Head + - Updated │
|
||||||
├────────────────────────────────────────────────────────────────────────────────┤
|
├─────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
│ ● e4934b6 Define power requirements bob (you) 3e674d1 +0 -0 now │
|
│ ● e4934b6 Define power requirements bob (you) - 3e674d1 +0 -0 now │
|
||||||
╰────────────────────────────────────────────────────────────────────────────────╯
|
╰─────────────────────────────────────────────────────────────────────────────────────────╯
|
||||||
$ rad patch show e4934b6d9dbe01ce3c7fbb5b77a80d5f1dacdc46
|
$ rad patch show e4934b6d9dbe01ce3c7fbb5b77a80d5f1dacdc46
|
||||||
╭────────────────────────────────────────────────────╮
|
╭────────────────────────────────────────────────────╮
|
||||||
│ Title Define power requirements │
|
│ Title Define power requirements │
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use std::collections::BTreeSet;
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
|
|
||||||
use radicle::cob::patch;
|
use radicle::cob::patch;
|
||||||
use radicle::cob::patch::{Patch, PatchId};
|
use radicle::cob::patch::{Patch, PatchId};
|
||||||
|
|
@ -46,7 +46,7 @@ pub fn run(
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut table = Table::<9, term::Line>::new(TableOptions {
|
let mut table = Table::<10, term::Line>::new(TableOptions {
|
||||||
spacing: 2,
|
spacing: 2,
|
||||||
border: Some(term::colors::FAINT),
|
border: Some(term::colors::FAINT),
|
||||||
..TableOptions::default()
|
..TableOptions::default()
|
||||||
|
|
@ -58,6 +58,7 @@ pub fn run(
|
||||||
term::format::bold(String::from("Title")).into(),
|
term::format::bold(String::from("Title")).into(),
|
||||||
term::format::bold(String::from("Author")).into(),
|
term::format::bold(String::from("Author")).into(),
|
||||||
term::Line::blank(),
|
term::Line::blank(),
|
||||||
|
term::format::bold(String::from("Reviews")).into(),
|
||||||
term::format::bold(String::from("Head")).into(),
|
term::format::bold(String::from("Head")).into(),
|
||||||
term::format::bold(String::from("+")).into(),
|
term::format::bold(String::from("+")).into(),
|
||||||
term::format::bold(String::from("-")).into(),
|
term::format::bold(String::from("-")).into(),
|
||||||
|
|
@ -98,13 +99,39 @@ pub fn row(
|
||||||
patch: &Patch,
|
patch: &Patch,
|
||||||
repository: &Repository,
|
repository: &Repository,
|
||||||
profile: &Profile,
|
profile: &Profile,
|
||||||
) -> anyhow::Result<[term::Line; 9]> {
|
) -> anyhow::Result<[term::Line; 10]> {
|
||||||
let state = patch.state();
|
let state = patch.state();
|
||||||
let (_, revision) = patch.latest();
|
let (_, revision) = patch.latest();
|
||||||
let (from, to) = revision.range();
|
let (from, to) = revision.range();
|
||||||
let stats = common::diff_stats(repository.raw(), &from, &to)?;
|
let stats = common::diff_stats(repository.raw(), &from, &to)?;
|
||||||
let author = patch.author().id;
|
let author = patch.author().id;
|
||||||
let (alias, did) = Author::new(&author, profile).labels();
|
let (alias, did) = Author::new(&author, profile).labels();
|
||||||
|
let mut delegates = repository
|
||||||
|
.delegates()?
|
||||||
|
.into_iter()
|
||||||
|
.map(|delegate| (*delegate, term::format::patch::verdict(None)))
|
||||||
|
.collect::<BTreeMap<_, _>>();
|
||||||
|
for (key, review) in revision.reviews() {
|
||||||
|
delegates
|
||||||
|
.entry(*key)
|
||||||
|
.and_modify(|verdict| *verdict = term::format::patch::verdict(review.verdict()));
|
||||||
|
}
|
||||||
|
let n = delegates.len();
|
||||||
|
let reviews = delegates
|
||||||
|
.values()
|
||||||
|
.cloned()
|
||||||
|
.map(term::Label::from)
|
||||||
|
// TODO(finto): poor man's intersperse
|
||||||
|
// https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.intersperse
|
||||||
|
.enumerate()
|
||||||
|
.flat_map(|(i, label)| {
|
||||||
|
if i == n - 1 {
|
||||||
|
vec![label].into_iter()
|
||||||
|
} else {
|
||||||
|
vec![label, term::Label::space()].into_iter()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
Ok([
|
Ok([
|
||||||
match state {
|
match state {
|
||||||
|
|
@ -117,6 +144,7 @@ pub fn row(
|
||||||
term::format::default(patch.title().to_owned()).into(),
|
term::format::default(patch.title().to_owned()).into(),
|
||||||
alias.into(),
|
alias.into(),
|
||||||
did.into(),
|
did.into(),
|
||||||
|
reviews.into(),
|
||||||
term::format::secondary(term::format::oid(revision.head())).into(),
|
term::format::secondary(term::format::oid(revision.head())).into(),
|
||||||
term::format::positive(format!("+{}", stats.insertions())).into(),
|
term::format::positive(format!("+{}", stats.insertions())).into(),
|
||||||
term::format::negative(format!("-{}", stats.deletions())).into(),
|
term::format::negative(format!("-{}", stats.deletions())).into(),
|
||||||
|
|
|
||||||
|
|
@ -264,7 +264,15 @@ pub mod issue {
|
||||||
/// Patch formatting
|
/// Patch formatting
|
||||||
pub mod patch {
|
pub mod patch {
|
||||||
use super::*;
|
use super::*;
|
||||||
use radicle::patch::State;
|
use radicle::patch::{State, Verdict};
|
||||||
|
|
||||||
|
pub fn verdict(v: Option<Verdict>) -> term::Paint<String> {
|
||||||
|
match v {
|
||||||
|
Some(Verdict::Accept) => term::format::positive("✔".to_string()),
|
||||||
|
Some(Verdict::Reject) => term::format::negative("✗".to_string()),
|
||||||
|
None => term::format::dim("-".to_string()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Format patch state.
|
/// Format patch state.
|
||||||
pub fn state(s: &State) -> term::Paint<String> {
|
pub fn state(s: &State) -> term::Paint<String> {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue