upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/sub_commands/prs/list.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-02-13 06:27:34 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2024-02-13 06:27:34 +0000
commit3112576195aef212622d27ad9164336796c1953e (patch)
tree0e897bcb8309c2d4c8f33d7c1590c2dcc0577508 /src/sub_commands/prs/list.rs
parent9cd3e43b899b23b7f6e75276fa3d19bf9550f8fd (diff)
feat(prs-create)!: pr to nip34-like cover letter
up the pr event type to a nip34-like cover letter format this sets the building blocks in place to enable simplier clients to use the 'cover letter' feature in `git format-patch` to create the experience as a pr event
Diffstat (limited to 'src/sub_commands/prs/list.rs')
-rw-r--r--src/sub_commands/prs/list.rs28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/sub_commands/prs/list.rs b/src/sub_commands/prs/list.rs
index 88b325b..bc85eed 100644
--- a/src/sub_commands/prs/list.rs
+++ b/src/sub_commands/prs/list.rs
@@ -8,8 +8,8 @@ use crate::{
8 cli_interactor::{Interactor, InteractorPrompt, PromptChoiceParms, PromptConfirmParms}, 8 cli_interactor::{Interactor, InteractorPrompt, PromptChoiceParms, PromptConfirmParms},
9 client::Connect, 9 client::Connect,
10 git::{Repo, RepoActions}, 10 git::{Repo, RepoActions},
11 repo_ref, 11 repo_ref::{self},
12 sub_commands::prs::create::{PATCH_KIND, PR_KIND}, 12 sub_commands::prs::create::{event_to_cover_letter, PATCH_KIND, PR_KIND},
13 Cli, 13 Cli,
14}; 14};
15 15
@@ -20,6 +20,7 @@ pub struct SubCommandArgs {
20 open_only: bool, 20 open_only: bool,
21} 21}
22 22
23#[allow(clippy::too_many_lines)]
23pub async fn launch( 24pub async fn launch(
24 _cli_args: &Cli, 25 _cli_args: &Cli,
25 _pr_args: &super::SubCommandArgs, 26 _pr_args: &super::SubCommandArgs,
@@ -56,7 +57,7 @@ pub async fn launch(
56 vec![ 57 vec![
57 nostr::Filter::default() 58 nostr::Filter::default()
58 .kind(nostr::Kind::Custom(PR_KIND)) 59 .kind(nostr::Kind::Custom(PR_KIND))
59 .reference(format!("r-{root_commit}")), 60 .reference(format!("{root_commit}")),
60 ], 61 ],
61 ) 62 )
62 .await? 63 .await?
@@ -65,7 +66,7 @@ pub async fn launch(
65 e.kind.as_u64() == PR_KIND 66 e.kind.as_u64() == PR_KIND
66 && e.tags 67 && e.tags
67 .iter() 68 .iter()
68 .any(|t| t.as_vec().len() > 1 && t.as_vec()[1].eq(&format!("r-{root_commit}"))) 69 .any(|t| t.as_vec().len() > 1 && t.as_vec()[1].eq(&format!("{root_commit}")))
69 }) 70 })
70 .map(std::borrow::ToOwned::to_owned) 71 .map(std::borrow::ToOwned::to_owned)
71 .collect(); 72 .collect();
@@ -92,8 +93,8 @@ pub async fn launch(
92 pr_events 93 pr_events
93 .iter() 94 .iter()
94 .map(|e| { 95 .map(|e| {
95 if let Ok(name) = tag_value(e, "name") { 96 if let Ok(cl) = event_to_cover_letter(e) {
96 name 97 cl.title
97 } else { 98 } else {
98 e.id.to_string() 99 e.id.to_string()
99 } 100 }
@@ -131,7 +132,19 @@ pub async fn launch(
131 let most_recent_pr_patch_chain = get_most_recent_patch_with_ancestors(commits_events) 132 let most_recent_pr_patch_chain = get_most_recent_patch_with_ancestors(commits_events)
132 .context("cannot get most recent patch for PR")?; 133 .context("cannot get most recent patch for PR")?;
133 134
134 let branch_name = tag_value(&pr_events[selected_index], "branch-name")?; 135 let branch_name: String = if let Ok(cl) = event_to_cover_letter(&pr_events[selected_index]) {
136 if let Some(name) = cl.branch_name {
137 name
138 } else {
139 cl.title
140 .replace(' ', "-")
141 .chars()
142 .filter(|c| c.is_ascii_alphanumeric() || c.eq(&'/'))
143 .collect()
144 }
145 } else {
146 bail!("Placeholder not a cover letter")
147 };
135 148
136 let applied = git_repo 149 let applied = git_repo
137 .apply_patch_chain(&branch_name, most_recent_pr_patch_chain) 150 .apply_patch_chain(&branch_name, most_recent_pr_patch_chain)
@@ -145,7 +158,6 @@ pub async fn launch(
145 applied.len(), 158 applied.len(),
146 ); 159 );
147 } 160 }
148
149 Ok(()) 161 Ok(())
150} 162}
151 163