diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2024-09-13 16:20:06 +0100 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2024-09-13 16:20:06 +0100 |
| commit | 97743676edd19d31807574b03b2498e7ed786a63 (patch) | |
| tree | 67fc6321bba7879c7b367fbaf7b8e2663e1c5b45 /src/bin/ngit/sub_commands | |
| parent | 5e958f48e58712736e6394f15b91997ba5231e01 (diff) | |
fix(ngit): `pull` and `push` find pr from branch
as since `cl.get_branch_name` has been introduced branch names
could be prefixed with a pr and sometimes postfixed with an event id
Diffstat (limited to 'src/bin/ngit/sub_commands')
| -rw-r--r-- | src/bin/ngit/sub_commands/pull.rs | 19 | ||||
| -rw-r--r-- | src/bin/ngit/sub_commands/push.rs | 18 |
2 files changed, 30 insertions, 7 deletions
diff --git a/src/bin/ngit/sub_commands/pull.rs b/src/bin/ngit/sub_commands/pull.rs index b66422d..b331dbe 100644 --- a/src/bin/ngit/sub_commands/pull.rs +++ b/src/bin/ngit/sub_commands/pull.rs | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | use anyhow::{bail, Context, Result}; | 1 | use anyhow::{bail, Context, Result}; |
| 2 | use nostr_sdk::PublicKey; | ||
| 2 | 3 | ||
| 3 | use crate::{ | 4 | use crate::{ |
| 4 | client::{ | 5 | client::{ |
| @@ -32,19 +33,29 @@ pub async fn launch() -> Result<()> { | |||
| 32 | let client = Client::default(); | 33 | let client = Client::default(); |
| 33 | 34 | ||
| 34 | let repo_coordinates = get_repo_coordinates(&git_repo, &client).await?; | 35 | let repo_coordinates = get_repo_coordinates(&git_repo, &client).await?; |
| 35 | |||
| 36 | fetching_with_report(git_repo_path, &client, &repo_coordinates).await?; | 36 | fetching_with_report(git_repo_path, &client, &repo_coordinates).await?; |
| 37 | 37 | ||
| 38 | let repo_ref = get_repo_ref_from_cache(git_repo_path, &repo_coordinates).await?; | 38 | let repo_ref = get_repo_ref_from_cache(git_repo_path, &repo_coordinates).await?; |
| 39 | 39 | ||
| 40 | let public_key_if_known = | ||
| 41 | if let Ok(Some(npub)) = git_repo.get_git_config_item("nostr.npub", None) { | ||
| 42 | PublicKey::parse(npub).ok() | ||
| 43 | } else { | ||
| 44 | None | ||
| 45 | }; | ||
| 46 | |||
| 40 | let proposal_root_event = | 47 | let proposal_root_event = |
| 41 | get_proposals_and_revisions_from_cache(git_repo_path, repo_ref.coordinates()) | 48 | get_proposals_and_revisions_from_cache(git_repo_path, repo_ref.coordinates()) |
| 42 | .await? | 49 | .await? |
| 43 | .iter() | 50 | .iter() |
| 44 | .find(|e| { | 51 | .find(|e| { |
| 45 | event_to_cover_letter(e) | 52 | event_to_cover_letter(e).is_ok_and(|cl| { |
| 46 | .is_ok_and(|cl| cl.get_branch_name().is_ok_and(|s| s.eq(&branch_name))) | 53 | cl.branch_name.eq(&branch_name) |
| 47 | && !event_is_revision_root(e) | 54 | || (public_key_if_known |
| 55 | .is_some_and(|public_key| e.author().eq(&public_key)) | ||
| 56 | && branch_name.eq(&format!("pr/{}", cl.branch_name))) | ||
| 57 | || cl.get_branch_name().is_ok_and(|s| s.eq(&branch_name)) | ||
| 58 | }) && !event_is_revision_root(e) | ||
| 48 | }) | 59 | }) |
| 49 | .context("cannot find proposal that matches the current branch name")? | 60 | .context("cannot find proposal that matches the current branch name")? |
| 50 | .clone(); | 61 | .clone(); |
diff --git a/src/bin/ngit/sub_commands/push.rs b/src/bin/ngit/sub_commands/push.rs index 79065fc..3ec6ff9 100644 --- a/src/bin/ngit/sub_commands/push.rs +++ b/src/bin/ngit/sub_commands/push.rs | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | use anyhow::{bail, Context, Result}; | 1 | use anyhow::{bail, Context, Result}; |
| 2 | use ngit::{client::send_events, git_events::tag_value}; | 2 | use ngit::{client::send_events, git_events::tag_value}; |
| 3 | use nostr_sdk::PublicKey; | ||
| 3 | 4 | ||
| 4 | use crate::{ | 5 | use crate::{ |
| 5 | cli::Cli, | 6 | cli::Cli, |
| @@ -52,14 +53,25 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> { | |||
| 52 | 53 | ||
| 53 | let repo_ref = get_repo_ref_from_cache(git_repo_path, &repo_coordinates).await?; | 54 | let repo_ref = get_repo_ref_from_cache(git_repo_path, &repo_coordinates).await?; |
| 54 | 55 | ||
| 56 | let public_key_if_known = | ||
| 57 | if let Ok(Some(npub)) = git_repo.get_git_config_item("nostr.npub", None) { | ||
| 58 | PublicKey::parse(npub).ok() | ||
| 59 | } else { | ||
| 60 | None | ||
| 61 | }; | ||
| 62 | |||
| 55 | let proposal_root_event = | 63 | let proposal_root_event = |
| 56 | get_proposals_and_revisions_from_cache(git_repo_path, repo_ref.coordinates()) | 64 | get_proposals_and_revisions_from_cache(git_repo_path, repo_ref.coordinates()) |
| 57 | .await? | 65 | .await? |
| 58 | .iter() | 66 | .iter() |
| 59 | .find(|e| { | 67 | .find(|e| { |
| 60 | event_to_cover_letter(e) | 68 | event_to_cover_letter(e).is_ok_and(|cl| { |
| 61 | .is_ok_and(|cl| cl.get_branch_name().is_ok_and(|s| s.eq(&branch_name))) | 69 | cl.branch_name.eq(&branch_name) |
| 62 | && !event_is_revision_root(e) | 70 | || (public_key_if_known |
| 71 | .is_some_and(|public_key| e.author().eq(&public_key)) | ||
| 72 | && branch_name.eq(&format!("pr/{}", cl.branch_name))) | ||
| 73 | || cl.get_branch_name().is_ok_and(|s| s.eq(&branch_name)) | ||
| 74 | }) && !event_is_revision_root(e) | ||
| 63 | }) | 75 | }) |
| 64 | .context("cannot find proposal that matches the current branch name")? | 76 | .context("cannot find proposal that matches the current branch name")? |
| 65 | .clone(); | 77 | .clone(); |