From e41d67544c15ad49915f9a6d28b30df6f1841939 Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Thu, 25 May 2023 13:08:45 +0200 Subject: [PATCH] cob: Add `reviewers` field on `Patch` We aren't ready to support this yet from an end-user perspective, but we add it in the COB already to prepare. --- radicle-httpd/src/api/json.rs | 1 + radicle-httpd/src/api/v1/projects.rs | 9 +++++++++ radicle/src/cob/patch.rs | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/radicle-httpd/src/api/json.rs b/radicle-httpd/src/api/json.rs index 8f97f009..31368180 100644 --- a/radicle-httpd/src/api/json.rs +++ b/radicle-httpd/src/api/json.rs @@ -130,6 +130,7 @@ pub(crate) fn patch( "timestamp": m.timestamp }) }).collect::>(), + "reviewers": patch.reviewers().collect::>(), "revisions": patch.revisions().map(|(id, rev)| { json!({ "id": id, diff --git a/radicle-httpd/src/api/v1/projects.rs b/radicle-httpd/src/api/v1/projects.rs index 678ad1e0..15257096 100644 --- a/radicle-httpd/src/api/v1/projects.rs +++ b/radicle-httpd/src/api/v1/projects.rs @@ -1741,6 +1741,7 @@ mod routes { "target": "delegates", "tags": [], "merges": [], + "reviewers": [], "revisions": [ { "id": CONTRIBUTOR_PATCH_ID, @@ -1779,6 +1780,7 @@ mod routes { "target": "delegates", "tags": [], "merges": [], + "reviewers": [], "revisions": [ { "id": CONTRIBUTOR_PATCH_ID, @@ -1856,6 +1858,7 @@ mod routes { "target": "delegates", "tags": [], "merges": [], + "reviewers": [], "revisions": [ { "id": CREATED_PATCH_ID, @@ -1918,6 +1921,7 @@ mod routes { "design" ], "merges": [], + "reviewers": [], "revisions": [ { "id": CONTRIBUTOR_PATCH_ID, @@ -1977,6 +1981,7 @@ mod routes { "target": "delegates", "tags": [], "merges": [], + "reviewers": [], "revisions": [ { "id": CONTRIBUTOR_PATCH_ID, @@ -2048,6 +2053,7 @@ mod routes { "target": "delegates", "tags": [], "merges": [], + "reviewers": [], "revisions": [ { "id": CONTRIBUTOR_PATCH_ID, @@ -2129,6 +2135,7 @@ mod routes { "target": "delegates", "tags": [], "merges": [], + "reviewers": [], "revisions": [ { "id": CONTRIBUTOR_PATCH_ID, @@ -2224,6 +2231,7 @@ mod routes { "target": "delegates", "tags": [], "merges": [], + "reviewers": [], "revisions": [ { "id": CONTRIBUTOR_PATCH_ID, @@ -2315,6 +2323,7 @@ mod routes { "commit": PARENT, "timestamp": TIMESTAMP, }], + "reviewers": [], "revisions": [ { "id": CONTRIBUTOR_PATCH_ID, diff --git a/radicle/src/cob/patch.rs b/radicle/src/cob/patch.rs index d1775961..d84ec090 100644 --- a/radicle/src/cob/patch.rs +++ b/radicle/src/cob/patch.rs @@ -170,6 +170,8 @@ pub struct Patch { /// List of patch revisions. The initial changeset is part of the /// first revision. revisions: GMap>, + /// Users assigned to review this patch. + reviewers: LWWSet, /// Timeline of operations. timeline: GSet<(Lamport, EntryId)>, } @@ -182,6 +184,7 @@ impl Semilattice for Patch { self.merges.merge(other.merges); self.tags.merge(other.tags); self.revisions.merge(other.revisions); + self.reviewers.merge(other.reviewers); self.timeline.merge(other.timeline); } } @@ -195,6 +198,7 @@ impl Default for Patch { tags: LWWSet::default(), merges: LWWMap::default(), revisions: GMap::default(), + reviewers: LWWSet::default(), timeline: GSet::default(), } } @@ -263,6 +267,11 @@ impl Patch { }) } + /// List of patch reviewers. + pub fn reviewers(&self) -> impl Iterator + '_ { + self.reviewers.iter().map(Did::from) + } + /// Get the merges. pub fn merges(&self) -> impl Iterator { self.merges