upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/bin/git_remote_nostr/push.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/git_remote_nostr/push.rs')
-rw-r--r--src/bin/git_remote_nostr/push.rs25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/bin/git_remote_nostr/push.rs b/src/bin/git_remote_nostr/push.rs
index e1c94f8..b64cdd9 100644
--- a/src/bin/git_remote_nostr/push.rs
+++ b/src/bin/git_remote_nostr/push.rs
@@ -14,6 +14,7 @@ use git_events::{
14}; 14};
15use git2::{Oid, Repository}; 15use git2::{Oid, Repository};
16use ngit::{ 16use ngit::{
17 accept_maintainership::accept_maintainership_with_defaults,
17 client::{self, get_event_from_cache_by_id}, 18 client::{self, get_event_from_cache_by_id},
18 git::{self, nostr_url::NostrUrlDecoded}, 19 git::{self, nostr_url::NostrUrlDecoded},
19 git_events::{ 20 git_events::{
@@ -50,7 +51,7 @@ pub async fn run_push(
50 repo_ref: &RepoRef, 51 repo_ref: &RepoRef,
51 stdin: &Stdin, 52 stdin: &Stdin,
52 initial_refspec: &str, 53 initial_refspec: &str,
53 client: &Client, 54 client: &mut Client,
54 list_outputs: Option<HashMap<String, (HashMap<String, String>, bool)>>, 55 list_outputs: Option<HashMap<String, (HashMap<String, String>, bool)>>,
55 title_description: Option<(String, String)>, 56 title_description: Option<(String, String)>,
56) -> Result<()> { 57) -> Result<()> {
@@ -127,7 +128,7 @@ pub async fn run_push(
127 repo_ref, 128 repo_ref,
128 &git_state_refspecs, 129 &git_state_refspecs,
129 &proposal_refspecs, 130 &proposal_refspecs,
130 client, 131 client, // &mut Client
131 existing_state, 132 existing_state,
132 &term, 133 &term,
133 title_description.as_ref(), 134 title_description.as_ref(),
@@ -182,7 +183,7 @@ async fn create_and_publish_events_and_proposals(
182 repo_ref: &RepoRef, 183 repo_ref: &RepoRef,
183 git_server_refspecs: &Vec<String>, 184 git_server_refspecs: &Vec<String>,
184 proposal_refspecs: &Vec<String>, 185 proposal_refspecs: &Vec<String>,
185 client: &Client, 186 client: &mut Client,
186 existing_state: HashMap<String, String>, 187 existing_state: HashMap<String, String>,
187 term: &Term, 188 term: &Term,
188 title_description: Option<&(String, String)>, 189 title_description: Option<&(String, String)>,
@@ -216,16 +217,14 @@ async fn create_and_publish_events_and_proposals(
216 .clone() 217 .clone()
217 .is_some_and(|ms| ms.contains(&user_ref.public_key)) 218 .is_some_and(|ms| ms.contains(&user_ref.public_key))
218 { 219 {
219 for refspec in git_server_refspecs { 220 // Auto-accept co-maintainership: publish the user's own announcement
220 let (_, to) = refspec_to_from_to(refspec).unwrap(); 221 // with defaults before proceeding with the push. The announcement is
221 eprintln!( 222 // required (not just for consent, but to prevent scammers from
222 "error {to} you have been offered co-maintainership of '{}'. to accept, run `ngit init` which will publish your own repository announcement. use `ngit init -d` to accept with defaults and no interactive prompts.", 223 // attributing a person's state events to a fake project with the same
223 repo_ref.name, 224 // identifier). See docs/design/co-maintainer-announcement-rationale.md.
224 ); 225 accept_maintainership_with_defaults(git_repo, repo_ref, &user_ref, client, &signer)
225 } 226 .await
226 if proposal_refspecs.is_empty() { 227 .context("failed to auto-accept co-maintainership")?;
227 return Ok((vec![], true));
228 }
229 } 228 }
230 229
231 let mut events = vec![]; 230 let mut events = vec![];