diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/sub_commands/send.rs | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/src/sub_commands/send.rs b/src/sub_commands/send.rs index 1633cb8..c3b3fda 100644 --- a/src/sub_commands/send.rs +++ b/src/sub_commands/send.rs | |||
| @@ -472,41 +472,38 @@ pub fn event_is_cover_letter(event: &nostr::Event) -> bool { | |||
| 472 | && event.iter_tags().any(|t| t.as_vec()[1].eq("root")) | 472 | && event.iter_tags().any(|t| t.as_vec()[1].eq("root")) |
| 473 | && event.iter_tags().any(|t| t.as_vec()[1].eq("cover-letter")) | 473 | && event.iter_tags().any(|t| t.as_vec()[1].eq("cover-letter")) |
| 474 | } | 474 | } |
| 475 | |||
| 476 | pub fn commit_msg_from_patch(patch: &nostr::Event) -> Result<String> { | ||
| 477 | if let Ok(msg) = tag_value(patch, "description") { | ||
| 478 | Ok(msg) | ||
| 479 | } else { | ||
| 480 | let start_index = patch | ||
| 481 | .content | ||
| 482 | .find("] ") | ||
| 483 | .context("event is not formatted as a patch or cover letter")? | ||
| 484 | + 2; | ||
| 485 | let end_index = patch.content[start_index..] | ||
| 486 | .find("\ndiff --git") | ||
| 487 | .unwrap_or(patch.content.len()); | ||
| 488 | Ok(patch.content[start_index..end_index].to_string()) | ||
| 489 | } | ||
| 490 | } | ||
| 491 | |||
| 492 | pub fn commit_msg_from_patch_oneliner(patch: &nostr::Event) -> Result<String> { | ||
| 493 | Ok(commit_msg_from_patch(patch)? | ||
| 494 | .split('\n') | ||
| 495 | .collect::<Vec<&str>>()[0] | ||
| 496 | .to_string()) | ||
| 497 | } | ||
| 498 | |||
| 475 | pub fn event_to_cover_letter(event: &nostr::Event) -> Result<CoverLetter> { | 499 | pub fn event_to_cover_letter(event: &nostr::Event) -> Result<CoverLetter> { |
| 476 | if !event_is_patch_set_root(event) { | 500 | if !event_is_patch_set_root(event) { |
| 477 | bail!("event is not a patch set root event (root patch or cover letter)") | 501 | bail!("event is not a patch set root event (root patch or cover letter)") |
| 478 | } | 502 | } |
| 479 | let title_index = event | ||
| 480 | .content | ||
| 481 | .find("] ") | ||
| 482 | .context("event is not formatted as a patch or cover letter")? | ||
| 483 | + 2; | ||
| 484 | let description_index = event.content[title_index..] | ||
| 485 | .find('\n') | ||
| 486 | .unwrap_or(event.content.len() - 1 - title_index) | ||
| 487 | + title_index; | ||
| 488 | |||
| 489 | let description_index_end = event.content[title_index..] | ||
| 490 | .find("\ndiff --git") | ||
| 491 | .unwrap_or(event.content.len() - 1); | ||
| 492 | |||
| 493 | let title = if let Ok(msg) = tag_value(event, "description") { | ||
| 494 | msg.split('\n').collect::<Vec<&str>>()[0].to_string() | ||
| 495 | } else { | ||
| 496 | event.content[title_index..description_index].to_string() | ||
| 497 | }; | ||
| 498 | 503 | ||
| 499 | let description = if let Ok(msg) = tag_value(event, "description") { | 504 | let title = commit_msg_from_patch_oneliner(event)?; |
| 500 | if let Some((_before, after)) = msg.split_once('\n') { | 505 | let full = commit_msg_from_patch(event)?; |
| 501 | after.trim().to_string() | 506 | let description = full[title.len()..].trim().to_string(); |
| 502 | } else { | ||
| 503 | String::new() | ||
| 504 | } | ||
| 505 | } else { | ||
| 506 | event.content[description_index..=description_index_end] | ||
| 507 | .trim() | ||
| 508 | .to_string() | ||
| 509 | }; | ||
| 510 | 507 | ||
| 511 | Ok(CoverLetter { | 508 | Ok(CoverLetter { |
| 512 | title: title.clone(), | 509 | title: title.clone(), |