diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2024-02-13 06:27:34 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2024-02-13 06:27:34 +0000 |
| commit | 3112576195aef212622d27ad9164336796c1953e (patch) | |
| tree | 0e897bcb8309c2d4c8f33d7c1590c2dcc0577508 /src/sub_commands/prs/list.rs | |
| parent | 9cd3e43b899b23b7f6e75276fa3d19bf9550f8fd (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.rs | 28 |
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)] | ||
| 23 | pub async fn launch( | 24 | pub 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 | ||