upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2026-02-26 12:24:40 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2026-02-26 15:26:16 +0000
commitdc6c20d29ea4456eee1dbc2aa8757fe955d1afc7 (patch)
tree6230652be620a4647ffe1ad26c654b61f36cedac /src
parent237ab4ebcdc5bf58f98958db5375d56baf8046a0 (diff)
fix: report per-relay publish results in send_events summary
Change send_events() return type from Result<()> to Result<Vec<(String, bool)>> so callers can inspect which relays accepted events. Update the finish message to show "Published to X/N relays (failed: ...)" instead of the unconditional "Published ... to nostr relays".
Diffstat (limited to 'src')
-rw-r--r--src/bin/git_remote_nostr/push.rs2
-rw-r--r--src/bin/ngit/sub_commands/init.rs2
-rw-r--r--src/bin/ngit/sub_commands/repo/accept.rs2
-rw-r--r--src/bin/ngit/sub_commands/send.rs2
-rw-r--r--src/lib/accept_maintainership.rs2
-rw-r--r--src/lib/client.rs37
-rw-r--r--src/lib/login/fresh.rs2
-rw-r--r--src/lib/push.rs2
8 files changed, 40 insertions, 11 deletions
diff --git a/src/bin/git_remote_nostr/push.rs b/src/bin/git_remote_nostr/push.rs
index 06624f4..91b01b9 100644
--- a/src/bin/git_remote_nostr/push.rs
+++ b/src/bin/git_remote_nostr/push.rs
@@ -298,7 +298,7 @@ async fn create_and_publish_events_and_proposals(
298 // TODO check whether tip of each branch pushed is on at least one git server 298 // TODO check whether tip of each branch pushed is on at least one git server
299 // before broadcasting the nostr state 299 // before broadcasting the nostr state
300 if !events.is_empty() { 300 if !events.is_empty() {
301 send_events( 301 let _relay_results = send_events(
302 client, 302 client,
303 Some(git_repo.get_path()?), 303 Some(git_repo.get_path()?),
304 events, 304 events,
diff --git a/src/bin/ngit/sub_commands/init.rs b/src/bin/ngit/sub_commands/init.rs
index 5ff57d5..021a33e 100644
--- a/src/bin/ngit/sub_commands/init.rs
+++ b/src/bin/ngit/sub_commands/init.rs
@@ -1266,7 +1266,7 @@ async fn publish_and_finalize(
1266 // Step 5: Publish events 1266 // Step 5: Publish events
1267 client.set_signer(signer).await; 1267 client.set_signer(signer).await;
1268 1268
1269 send_events( 1269 let _ = send_events(
1270 client, 1270 client,
1271 Some(git_repo_path), 1271 Some(git_repo_path),
1272 events, 1272 events,
diff --git a/src/bin/ngit/sub_commands/repo/accept.rs b/src/bin/ngit/sub_commands/repo/accept.rs
index 5564b77..eaea107 100644
--- a/src/bin/ngit/sub_commands/repo/accept.rs
+++ b/src/bin/ngit/sub_commands/repo/accept.rs
@@ -212,7 +212,7 @@ async fn accept_with_grasp_servers(
212 212
213 client.set_signer(signer.clone()).await; 213 client.set_signer(signer.clone()).await;
214 214
215 send_events( 215 let _ = send_events(
216 client, 216 client,
217 Some(git_repo.get_path()?), 217 Some(git_repo.get_path()?),
218 vec![repo_event], 218 vec![repo_event],
diff --git a/src/bin/ngit/sub_commands/send.rs b/src/bin/ngit/sub_commands/send.rs
index 6b18e84..86af2d3 100644
--- a/src/bin/ngit/sub_commands/send.rs
+++ b/src/bin/ngit/sub_commands/send.rs
@@ -409,7 +409,7 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs, no_fetch: bool) -> Re
409 events 409 events
410 }; 410 };
411 411
412 send_events( 412 let _ = send_events(
413 &client, 413 &client,
414 Some(git_repo_path), 414 Some(git_repo_path),
415 events.clone(), 415 events.clone(),
diff --git a/src/lib/accept_maintainership.rs b/src/lib/accept_maintainership.rs
index 086b858..3375ca3 100644
--- a/src/lib/accept_maintainership.rs
+++ b/src/lib/accept_maintainership.rs
@@ -149,7 +149,7 @@ pub async fn accept_maintainership_with_defaults(
149 149
150 client.set_signer(signer.clone()).await; 150 client.set_signer(signer.clone()).await;
151 151
152 send_events( 152 let _ = send_events(
153 client, 153 client,
154 Some(git_repo.get_path()?), 154 Some(git_repo.get_path()?),
155 vec![repo_event], 155 vec![repo_event],
diff --git a/src/lib/client.rs b/src/lib/client.rs
index 2a4e081..c5c38cf 100644
--- a/src/lib/client.rs
+++ b/src/lib/client.rs
@@ -2447,7 +2447,7 @@ pub async fn send_events(
2447 repo_read_relays: Vec<RelayUrl>, 2447 repo_read_relays: Vec<RelayUrl>,
2448 animate: bool, 2448 animate: bool,
2449 silent: bool, 2449 silent: bool,
2450) -> Result<()> { 2450) -> Result<Vec<(String, bool)>> {
2451 // Only include default relays as fallback when there are no repo relays 2451 // Only include default relays as fallback when there are no repo relays
2452 // (bootstrapping case, e.g. new account signup). When repo relays exist, 2452 // (bootstrapping case, e.g. new account signup). When repo relays exist,
2453 // trust the repo and user relay configuration. 2453 // trust the repo and user relay configuration.
@@ -2614,7 +2614,7 @@ pub async fn send_events(
2614 })?; 2614 })?;
2615 2615
2616 #[allow(clippy::borrow_deref_ref)] 2616 #[allow(clippy::borrow_deref_ref)]
2617 join_all(relays.iter().map(|&relay| { 2617 let relay_results: Vec<(String, bool)> = join_all(relays.iter().map(|&relay| {
2618 let reveal_state_clone = reveal_state.clone(); 2618 let reveal_state_clone = reveal_state.clone();
2619 let my_write_relays = my_write_relays.clone(); 2619 let my_write_relays = my_write_relays.clone();
2620 let repo_read_relays = repo_read_relays.clone(); 2620 let repo_read_relays = repo_read_relays.clone();
@@ -2691,6 +2691,7 @@ pub async fn send_events(
2691 pb.set_style(pb_after_style_succeeded.clone()); 2691 pb.set_style(pb_after_style_succeeded.clone());
2692 finish_bar(&pb, String::new(), &reveal_state_clone); 2692 finish_bar(&pb, String::new(), &reveal_state_clone);
2693 } 2693 }
2694 (relay_clean.to_string(), !failed)
2694 } 2695 }
2695 })) 2696 }))
2696 .await; 2697 .await;
@@ -2700,12 +2701,40 @@ pub async fn send_events(
2700 if let Some(handle) = timer_handle { 2701 if let Some(handle) = timer_handle {
2701 handle.abort(); 2702 handle.abort();
2702 } 2703 }
2704
2705 let succeeded_count = relay_results.iter().filter(|(_, ok)| *ok).count();
2706 let total_count = relay_results.len();
2707 let failed_relays: Vec<&str> = relay_results
2708 .iter()
2709 .filter(|(_, ok)| !*ok)
2710 .map(|(url, _)| {
2711 url.strip_prefix("wss://")
2712 .or_else(|| url.strip_prefix("ws://"))
2713 .unwrap_or(url)
2714 .trim_end_matches('/')
2715 })
2716 .collect();
2717
2718 let finish_message = if succeeded_count == total_count {
2719 format!("Published {events_description} to {total_count} relays")
2720 } else if succeeded_count > 0 {
2721 format!(
2722 "Published {events_description} to {succeeded_count}/{total_count} relays (failed: {})",
2723 failed_relays.join(" ")
2724 )
2725 } else {
2726 format!(
2727 "failed to publish {events_description} to any relay (failed: {})",
2728 failed_relays.join(" ")
2729 )
2730 };
2731
2703 if let Some((_, spinner)) = &spinner_multi { 2732 if let Some((_, spinner)) = &spinner_multi {
2704 spinner.set_style(ProgressStyle::with_template("{msg}").unwrap()); 2733 spinner.set_style(ProgressStyle::with_template("{msg}").unwrap());
2705 spinner.finish_with_message(format!("Published {events_description} to nostr relays")); 2734 spinner.finish_with_message(finish_message);
2706 } 2735 }
2707 2736
2708 Ok(()) 2737 Ok(relay_results)
2709} 2738}
2710 2739
2711/// Builds a human-readable description of what is being published, e.g. 2740/// Builds a human-readable description of what is being published, e.g.
diff --git a/src/lib/login/fresh.rs b/src/lib/login/fresh.rs
index 2f6becf..e81b74a 100644
--- a/src/lib/login/fresh.rs
+++ b/src/lib/login/fresh.rs
@@ -810,7 +810,7 @@ pub async fn signup_non_interactive(
810 save_event_in_global_cache(git_repo_path, &relay_list).await?; 810 save_event_in_global_cache(git_repo_path, &relay_list).await?;
811 811
812 if publish { 812 if publish {
813 send_events( 813 let _ = send_events(
814 client, 814 client,
815 git_repo_path, 815 git_repo_path,
816 vec![profile, relay_list], 816 vec![profile, relay_list],
diff --git a/src/lib/push.rs b/src/lib/push.rs
index 5544066..7374fb0 100644
--- a/src/lib/push.rs
+++ b/src/lib/push.rs
@@ -665,7 +665,7 @@ pub async fn select_servers_push_refs_and_generate_pr_or_pr_update_event(
665 }; 665 };
666 // pubish event to my-relays and my-fork-relays 666 // pubish event to my-relays and my-fork-relays
667 new_grasp_server_events.push(updated_user_repo_ref.to_event(signer).await?); 667 new_grasp_server_events.push(updated_user_repo_ref.to_event(signer).await?);
668 send_events( 668 let _ = send_events(
669 client, 669 client,
670 Some(git_repo_path), 670 Some(git_repo_path),
671 new_grasp_server_events, 671 new_grasp_server_events,