upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/client.rs10
-rw-r--r--src/lib/git_events.rs13
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
93pub 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)]
95pub async fn generate_patch_event( 108pub async fn generate_patch_event(