diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2025-07-18 17:33:11 +0100 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2025-07-18 17:33:11 +0100 |
| commit | a3d4c8eaa263f4adb174ac81c4248fa200e1857e (patch) | |
| tree | 0b786013c3b3da67123e2ff02f95b7c41eb8dfc0 /src/lib | |
| parent | 3eb2354edb8e76428625d5645e110c30aa1ccc2a (diff) | |
feat(pr): fetch pr and pr updates from clone urls
we try and get them from clone urls of repo and fallback to
those specified by contributor
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/client.rs | 10 | ||||
| -rw-r--r-- | src/lib/git_events.rs | 13 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/lib/client.rs b/src/lib/client.rs index 1f3b08c..091d68d 100644 --- a/src/lib/client.rs +++ b/src/lib/client.rs | |||
| @@ -49,7 +49,8 @@ use crate::{ | |||
| 49 | git::{Repo, RepoActions, get_git_config_item}, | 49 | git::{Repo, RepoActions, get_git_config_item}, |
| 50 | git_events::{ | 50 | git_events::{ |
| 51 | KIND_PULL_REQUEST, KIND_PULL_REQUEST_UPDATE, event_is_cover_letter, | 51 | KIND_PULL_REQUEST, KIND_PULL_REQUEST_UPDATE, event_is_cover_letter, |
| 52 | event_is_patch_set_root, event_is_revision_root, status_kinds, | 52 | event_is_patch_set_root, event_is_revision_root, event_is_valid_pr_or_pr_update, |
| 53 | status_kinds, | ||
| 53 | }, | 54 | }, |
| 54 | login::{get_likely_logged_in_user, user::get_user_ref_from_cache}, | 55 | login::{get_likely_logged_in_user, user::get_user_ref_from_cache}, |
| 55 | repo_ref::RepoRef, | 56 | repo_ref::RepoRef, |
| @@ -1824,6 +1825,7 @@ pub async fn get_proposals_and_revisions_from_cache( | |||
| 1824 | .await? | 1825 | .await? |
| 1825 | .iter() | 1826 | .iter() |
| 1826 | .filter(|e| event_is_patch_set_root(e) || e.kind.eq(&KIND_PULL_REQUEST)) | 1827 | .filter(|e| event_is_patch_set_root(e) || e.kind.eq(&KIND_PULL_REQUEST)) |
| 1828 | .filter(|e| e.kind.eq(&Kind::GitPatch) || event_is_valid_pr_or_pr_update(e)) | ||
| 1827 | .cloned() | 1829 | .cloned() |
| 1828 | .collect::<Vec<nostr::Event>>(); | 1830 | .collect::<Vec<nostr::Event>>(); |
| 1829 | proposals.sort_by_key(|e| e.created_at); | 1831 | proposals.sort_by_key(|e| e.created_at); |
| @@ -1874,7 +1876,11 @@ pub async fn get_all_proposal_patch_pr_pr_update_events_from_cache( | |||
| 1874 | .iter() | 1876 | .iter() |
| 1875 | .copied() | 1877 | .copied() |
| 1876 | .collect(); | 1878 | .collect(); |
| 1877 | commit_events.retain(|e| permissioned_users.contains(&e.pubkey)); | 1879 | |
| 1880 | commit_events.retain(|e| { | ||
| 1881 | permissioned_users.contains(&e.pubkey) | ||
| 1882 | && (e.kind.eq(&Kind::GitPatch) || event_is_valid_pr_or_pr_update(e)) | ||
| 1883 | }); | ||
| 1878 | 1884 | ||
| 1879 | let revision_roots: HashSet<nostr::EventId> = commit_events | 1885 | let revision_roots: HashSet<nostr::EventId> = commit_events |
| 1880 | .iter() | 1886 | .iter() |
diff --git a/src/lib/git_events.rs b/src/lib/git_events.rs index 7b25daf..09ec040 100644 --- a/src/lib/git_events.rs +++ b/src/lib/git_events.rs | |||
| @@ -90,6 +90,19 @@ pub fn patch_supports_commit_ids(event: &Event) -> bool { | |||
| 90 | .any(|t| !t.as_slice().is_empty() && t.as_slice()[0].eq("commit-pgp-sig")) | 90 | .any(|t| !t.as_slice().is_empty() && t.as_slice()[0].eq("commit-pgp-sig")) |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | pub fn event_is_valid_pr_or_pr_update(event: &Event) -> bool { | ||
| 94 | [KIND_PULL_REQUEST, KIND_PULL_REQUEST_UPDATE].contains(&event.kind) | ||
| 95 | && event.tags.iter().any(|t| { | ||
| 96 | t.as_slice().len().gt(&1) | ||
| 97 | && t.as_slice()[0].eq("c") | ||
| 98 | && git2::Oid::from_str(&t.as_slice()[1]).is_ok() | ||
| 99 | }) | ||
| 100 | && event | ||
| 101 | .tags | ||
| 102 | .iter() | ||
| 103 | .any(|t| t.as_slice().len().gt(&1) && t.as_slice()[0].eq("clone")) | ||
| 104 | } | ||
| 105 | |||
| 93 | #[allow(clippy::too_many_arguments)] | 106 | #[allow(clippy::too_many_arguments)] |
| 94 | #[allow(clippy::too_many_lines)] | 107 | #[allow(clippy::too_many_lines)] |
| 95 | pub async fn generate_patch_event( | 108 | pub async fn generate_patch_event( |