upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/bin/ngit/sub_commands/list.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/ngit/sub_commands/list.rs')
-rw-r--r--src/bin/ngit/sub_commands/list.rs44
1 files changed, 41 insertions, 3 deletions
diff --git a/src/bin/ngit/sub_commands/list.rs b/src/bin/ngit/sub_commands/list.rs
index 7873fae..6d78a1f 100644
--- a/src/bin/ngit/sub_commands/list.rs
+++ b/src/bin/ngit/sub_commands/list.rs
@@ -1,4 +1,7 @@
1use std::{collections::HashSet, io::Write, ops::Add}; 1use std::{
2 collections::HashSet, io::Write, ops::Add,
3 process::{Command, Stdio},
4};
2 5
3use anyhow::{Context, Result, bail}; 6use anyhow::{Context, Result, bail};
4use ngit::{ 7use ngit::{
@@ -31,6 +34,21 @@ use crate::{
31 repo_ref::get_repo_coordinates_when_remote_unknown, 34 repo_ref::get_repo_coordinates_when_remote_unknown,
32}; 35};
33 36
37fn run_git_fetch(remote_name: &str) -> Result<()> {
38 println!("fetching from {remote_name}...");
39 let exit_status = Command::new("git")
40 .args(["fetch", remote_name])
41 .stdout(Stdio::inherit())
42 .stderr(Stdio::inherit())
43 .status()
44 .context("failed to run git fetch")?;
45
46 if !exit_status.success() {
47 bail!("git fetch {remote_name} exited with error: {exit_status}");
48 }
49 Ok(())
50}
51
34#[allow(clippy::too_many_lines)] 52#[allow(clippy::too_many_lines)]
35pub async fn launch(status: String, json: bool, id: Option<String>) -> Result<()> { 53pub async fn launch(status: String, json: bool, id: Option<String>) -> Result<()> {
36 if std::env::var("NGIT_INTERACTIVE_MODE").is_ok() { 54 if std::env::var("NGIT_INTERACTIVE_MODE").is_ok() {
@@ -44,7 +62,17 @@ pub async fn launch(status: String, json: bool, id: Option<String>) -> Result<()
44 62
45 let repo_coordinates = get_repo_coordinates_when_remote_unknown(&git_repo, &client).await?; 63 let repo_coordinates = get_repo_coordinates_when_remote_unknown(&git_repo, &client).await?;
46 64
47 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?; 65 let nostr_remote = git_repo
66 .get_first_nostr_remote_when_in_ngit_binary()
67 .await
68 .ok()
69 .flatten();
70
71 if let Some((remote_name, _)) = &nostr_remote {
72 run_git_fetch(remote_name)?;
73 } else {
74 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?;
75 }
48 76
49 let repo_ref = get_repo_ref_from_cache(Some(git_repo_path), &repo_coordinates).await?; 77 let repo_ref = get_repo_ref_from_cache(Some(git_repo_path), &repo_coordinates).await?;
50 78
@@ -285,7 +313,17 @@ async fn launch_interactive() -> Result<()> {
285 313
286 let repo_coordinates = get_repo_coordinates_when_remote_unknown(&git_repo, &client).await?; 314 let repo_coordinates = get_repo_coordinates_when_remote_unknown(&git_repo, &client).await?;
287 315
288 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?; 316 let nostr_remote = git_repo
317 .get_first_nostr_remote_when_in_ngit_binary()
318 .await
319 .ok()
320 .flatten();
321
322 if let Some((remote_name, _)) = &nostr_remote {
323 run_git_fetch(remote_name)?;
324 } else {
325 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?;
326 }
289 327
290 let repo_ref = get_repo_ref_from_cache(Some(git_repo_path), &repo_coordinates).await?; 328 let repo_ref = get_repo_ref_from_cache(Some(git_repo_path), &repo_coordinates).await?;
291 329