upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/bin
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/git_remote_nostr/list.rs2
-rw-r--r--src/bin/git_remote_nostr/main.rs37
-rw-r--r--src/bin/git_remote_nostr/push.rs25
-rw-r--r--src/bin/git_remote_nostr/utils.rs4
-rw-r--r--src/bin/ngit/cli.rs26
-rw-r--r--src/bin/ngit/sub_commands/init.rs17
-rw-r--r--src/bin/ngit/sub_commands/list.rs6
-rw-r--r--src/bin/ngit/sub_commands/login.rs34
-rw-r--r--src/bin/ngit/sub_commands/pull.rs2
-rw-r--r--src/bin/ngit/sub_commands/push.rs16
-rw-r--r--src/bin/ngit/sub_commands/send.rs27
11 files changed, 86 insertions, 110 deletions
diff --git a/src/bin/git_remote_nostr/list.rs b/src/bin/git_remote_nostr/list.rs
index 92faa6b..daff1b6 100644
--- a/src/bin/git_remote_nostr/list.rs
+++ b/src/bin/git_remote_nostr/list.rs
@@ -35,7 +35,7 @@ pub async fn run_list(
35 for_push: bool, 35 for_push: bool,
36) -> Result<HashMap<String, HashMap<String, String>>> { 36) -> Result<HashMap<String, HashMap<String, String>>> {
37 let nostr_state = 37 let nostr_state =
38 if let Ok(nostr_state) = get_state_from_cache(git_repo.get_path()?, repo_ref).await { 38 if let Ok(nostr_state) = get_state_from_cache(Some(git_repo.get_path()?), repo_ref).await {
39 Some(nostr_state) 39 Some(nostr_state)
40 } else { 40 } else {
41 None 41 None
diff --git a/src/bin/git_remote_nostr/main.rs b/src/bin/git_remote_nostr/main.rs
index ed9fe9d..e4f97c7 100644
--- a/src/bin/git_remote_nostr/main.rs
+++ b/src/bin/git_remote_nostr/main.rs
@@ -15,7 +15,7 @@ use std::{
15use anyhow::{bail, Context, Result}; 15use anyhow::{bail, Context, Result};
16use client::{consolidate_fetch_reports, get_repo_ref_from_cache, Connect}; 16use client::{consolidate_fetch_reports, get_repo_ref_from_cache, Connect};
17use git::{nostr_url::NostrUrlDecoded, RepoActions}; 17use git::{nostr_url::NostrUrlDecoded, RepoActions};
18use ngit::{client, git, login}; 18use ngit::{client, git, login::existing::load_existing_login};
19use nostr::nips::nip01::Coordinate; 19use nostr::nips::nip01::Coordinate;
20use utils::read_line; 20use utils::read_line;
21 21
@@ -36,38 +36,17 @@ async fn main() -> Result<()> {
36 36
37 let mut client = Client::default(); 37 let mut client = Client::default();
38 38
39 if git_repo 39 if let Ok((signer, _, _)) =
40 .get_git_config_item("nostr.npub", None) 40 load_existing_login(&Some(&git_repo), &None, &None, &None, None, true, false).await
41 .is_ok_and(|x| x.is_some())
42 && (git_repo
43 .get_git_config_item("nostr.nsec", None)
44 .is_ok_and(|x| x.is_some())
45 || (git_repo
46 .get_git_config_item("nostr.bunker-uri", None)
47 .is_ok_and(|x| x.is_some())
48 && git_repo
49 .get_git_config_item("nostr.bunker-app-key", None)
50 .is_ok_and(|x| x.is_some())))
51 { 41 {
52 if let Ok((signer, _)) = login::launch( 42 // signer for to respond to relay auth request
53 &git_repo, 43 client.set_signer(signer).await;
54 &None,
55 &None,
56 &None,
57 &None,
58 Some(&client),
59 false,
60 true,
61 )
62 .await
63 {
64 client.set_signer(signer).await;
65 };
66 } 44 }
67 45
68 fetching_with_report_for_helper(git_repo_path, &client, &decoded_nostr_url.coordinates).await?; 46 fetching_with_report_for_helper(git_repo_path, &client, &decoded_nostr_url.coordinates).await?;
69 47
70 let repo_ref = get_repo_ref_from_cache(git_repo_path, &decoded_nostr_url.coordinates).await?; 48 let repo_ref =
49 get_repo_ref_from_cache(Some(git_repo_path), &decoded_nostr_url.coordinates).await?;
71 50
72 let stdin = io::stdin(); 51 let stdin = io::stdin();
73 let mut line = String::new(); 52 let mut line = String::new();
@@ -170,7 +149,7 @@ async fn fetching_with_report_for_helper(
170 let term = console::Term::stderr(); 149 let term = console::Term::stderr();
171 term.write_line("nostr: fetching...")?; 150 term.write_line("nostr: fetching...")?;
172 let (relay_reports, progress_reporter) = client 151 let (relay_reports, progress_reporter) = client
173 .fetch_all(git_repo_path, repo_coordinates, &HashSet::new()) 152 .fetch_all(Some(git_repo_path), repo_coordinates, &HashSet::new())
174 .await?; 153 .await?;
175 if !relay_reports.iter().any(std::result::Result::is_err) { 154 if !relay_reports.iter().any(std::result::Result::is_err) {
176 let _ = progress_reporter.clear(); 155 let _ = progress_reporter.clear();
diff --git a/src/bin/git_remote_nostr/push.rs b/src/bin/git_remote_nostr/push.rs
index 91c901a..7161c5d 100644
--- a/src/bin/git_remote_nostr/push.rs
+++ b/src/bin/git_remote_nostr/push.rs
@@ -8,7 +8,9 @@ use std::{
8 8
9use anyhow::{anyhow, bail, Context, Result}; 9use anyhow::{anyhow, bail, Context, Result};
10use auth_git2::GitAuthenticator; 10use auth_git2::GitAuthenticator;
11use client::{get_events_from_cache, get_state_from_cache, send_events, sign_event, STATE_KIND}; 11use client::{
12 get_events_from_local_cache, get_state_from_cache, send_events, sign_event, STATE_KIND,
13};
12use console::Term; 14use console::Term;
13use git::{sha1_to_oid, RepoActions}; 15use git::{sha1_to_oid, RepoActions};
14use git2::{Oid, Repository}; 16use git2::{Oid, Repository};
@@ -76,7 +78,7 @@ pub async fn run_push(
76 _ => list_from_remotes(&term, git_repo, &repo_ref.git_server, decoded_nostr_url), 78 _ => list_from_remotes(&term, git_repo, &repo_ref.git_server, decoded_nostr_url),
77 }; 79 };
78 80
79 let nostr_state = get_state_from_cache(git_repo.get_path()?, repo_ref).await; 81 let nostr_state = get_state_from_cache(Some(git_repo.get_path()?), repo_ref).await;
80 82
81 let existing_state = { 83 let existing_state = {
82 // if no state events - create from first git server listed 84 // if no state events - create from first git server listed
@@ -122,17 +124,8 @@ pub async fn run_push(
122 return Ok(()); 124 return Ok(());
123 } 125 }
124 126
125 let (signer, user_ref) = login::launch( 127 let (signer, user_ref, _) =
126 git_repo, 128 login::login_or_signup(&Some(git_repo), &None, &None, Some(client)).await?;
127 &None,
128 &None,
129 &None,
130 &None,
131 Some(client),
132 false,
133 false,
134 )
135 .await?;
136 129
137 if !repo_ref.maintainers.contains(&user_ref.public_key) { 130 if !repo_ref.maintainers.contains(&user_ref.public_key) {
138 for refspec in &git_server_refspecs { 131 for refspec in &git_server_refspecs {
@@ -306,7 +299,7 @@ pub async fn run_push(
306 term.write_line("broadcast to nostr relays:")?; 299 term.write_line("broadcast to nostr relays:")?;
307 send_events( 300 send_events(
308 client, 301 client,
309 git_repo.get_path()?, 302 Some(git_repo.get_path()?),
310 events, 303 events,
311 user_ref.relays.write(), 304 user_ref.relays.write(),
312 repo_ref.relays.clone(), 305 repo_ref.relays.clone(),
@@ -897,7 +890,7 @@ async fn get_merged_status_events(
897 // merge commit 890 // merge commit
898 for parent in commit.parents() { 891 for parent in commit.parents() {
899 // lookup parent id 892 // lookup parent id
900 let commit_events = get_events_from_cache( 893 let commit_events = get_events_from_local_cache(
901 git_repo.get_path()?, 894 git_repo.get_path()?,
902 vec![ 895 vec![
903 nostr::Filter::default() 896 nostr::Filter::default()
@@ -1045,7 +1038,7 @@ async fn get_proposal_and_revision_root_from_patch(
1045 .clone(), 1038 .clone(),
1046 )?; 1039 )?;
1047 1040
1048 get_events_from_cache( 1041 get_events_from_local_cache(
1049 git_repo.get_path()?, 1042 git_repo.get_path()?,
1050 vec![nostr::Filter::default().id(proposal_or_revision_id)], 1043 vec![nostr::Filter::default().id(proposal_or_revision_id)],
1051 ) 1044 )
diff --git a/src/bin/git_remote_nostr/utils.rs b/src/bin/git_remote_nostr/utils.rs
index a8bbd6f..b54ce6b 100644
--- a/src/bin/git_remote_nostr/utils.rs
+++ b/src/bin/git_remote_nostr/utils.rs
@@ -10,7 +10,7 @@ use anyhow::{bail, Context, Result};
10use git2::Repository; 10use git2::Repository;
11use ngit::{ 11use ngit::{
12 client::{ 12 client::{
13 get_all_proposal_patch_events_from_cache, get_events_from_cache, 13 get_all_proposal_patch_events_from_cache, get_events_from_local_cache,
14 get_proposals_and_revisions_from_cache, 14 get_proposals_and_revisions_from_cache,
15 }, 15 },
16 git::{ 16 git::{
@@ -108,7 +108,7 @@ pub async fn get_open_proposals(
108 .collect(); 108 .collect();
109 109
110 let statuses: Vec<nostr::Event> = { 110 let statuses: Vec<nostr::Event> = {
111 let mut statuses = get_events_from_cache( 111 let mut statuses = get_events_from_local_cache(
112 git_repo_path, 112 git_repo_path,
113 vec![ 113 vec![
114 nostr::Filter::default() 114 nostr::Filter::default()
diff --git a/src/bin/ngit/cli.rs b/src/bin/ngit/cli.rs
index d0f934e..b243f70 100644
--- a/src/bin/ngit/cli.rs
+++ b/src/bin/ngit/cli.rs
@@ -1,4 +1,6 @@
1use anyhow::{bail, Result};
1use clap::{Parser, Subcommand}; 2use clap::{Parser, Subcommand};
3use ngit::login::SignerInfo;
2 4
3use crate::sub_commands; 5use crate::sub_commands;
4 6
@@ -25,6 +27,30 @@ pub struct Cli {
25 pub disable_cli_spinners: bool, 27 pub disable_cli_spinners: bool,
26} 28}
27 29
30pub fn extract_signer_cli_arguments(args: &Cli) -> Result<Option<SignerInfo>> {
31 if let Some(nsec) = &args.nsec {
32 Ok(Some(SignerInfo::Nsec {
33 nsec: nsec.to_string(),
34 password: None,
35 npub: None,
36 }))
37 } else if let Some(bunker_uri) = args.bunker_uri.clone() {
38 if let Some(bunker_app_key) = args.bunker_app_key.clone() {
39 Ok(Some(SignerInfo::Bunker {
40 bunker_uri,
41 bunker_app_key,
42 npub: None,
43 }))
44 } else {
45 bail!("cli argument bunker-app-key must be supplied when bunker-uri is")
46 }
47 } else if args.bunker_app_key.is_some() {
48 bail!("cli argument bunker-uri must be supplied when bunker-app-key is")
49 } else {
50 Ok(None)
51 }
52}
53
28#[derive(Subcommand)] 54#[derive(Subcommand)]
29pub enum Commands { 55pub enum Commands {
30 /// update cache with latest updates from nostr 56 /// update cache with latest updates from nostr
diff --git a/src/bin/ngit/sub_commands/init.rs b/src/bin/ngit/sub_commands/init.rs
index aa43106..146a29c 100644
--- a/src/bin/ngit/sub_commands/init.rs
+++ b/src/bin/ngit/sub_commands/init.rs
@@ -6,7 +6,7 @@ use nostr::{nips::nip01::Coordinate, FromBech32, PublicKey, ToBech32};
6use nostr_sdk::Kind; 6use nostr_sdk::Kind;
7 7
8use crate::{ 8use crate::{
9 cli::Cli, 9 cli::{extract_signer_cli_arguments, Cli},
10 cli_interactor::{Interactor, InteractorPrompt, PromptInputParms}, 10 cli_interactor::{Interactor, InteractorPrompt, PromptInputParms},
11 client::{fetching_with_report, get_repo_ref_from_cache, send_events, Client, Connect}, 11 client::{fetching_with_report, get_repo_ref_from_cache, send_events, Client, Connect},
12 git::{nostr_url::convert_clone_url_to_https, Repo, RepoActions}, 12 git::{nostr_url::convert_clone_url_to_https, Repo, RepoActions},
@@ -69,7 +69,8 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> {
69 69
70 let repo_ref = if let Some(repo_coordinates) = repo_coordinates.clone() { 70 let repo_ref = if let Some(repo_coordinates) = repo_coordinates.clone() {
71 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?; 71 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?;
72 if let Ok(repo_ref) = get_repo_ref_from_cache(git_repo_path, &repo_coordinates).await { 72 if let Ok(repo_ref) = get_repo_ref_from_cache(Some(git_repo_path), &repo_coordinates).await
73 {
73 Some(repo_ref) 74 Some(repo_ref)
74 } else { 75 } else {
75 None 76 None
@@ -78,15 +79,11 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> {
78 None 79 None
79 }; 80 };
80 81
81 let (signer, user_ref) = login::launch( 82 let (signer, user_ref, _) = login::login_or_signup(
82 &git_repo, 83 &Some(&git_repo),
83 &cli_args.bunker_uri, 84 &extract_signer_cli_arguments(cli_args).unwrap_or(None),
84 &cli_args.bunker_app_key,
85 &cli_args.nsec,
86 &cli_args.password, 85 &cli_args.password,
87 Some(&client), 86 Some(&client),
88 false,
89 false,
90 ) 87 )
91 .await?; 88 .await?;
92 89
@@ -381,7 +378,7 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> {
381 378
382 send_events( 379 send_events(
383 &client, 380 &client,
384 git_repo_path, 381 Some(git_repo_path),
385 vec![repo_event], 382 vec![repo_event],
386 user_ref.relays.write(), 383 user_ref.relays.write(),
387 relays.clone(), 384 relays.clone(),
diff --git a/src/bin/ngit/sub_commands/list.rs b/src/bin/ngit/sub_commands/list.rs
index 351896a..7717dce 100644
--- a/src/bin/ngit/sub_commands/list.rs
+++ b/src/bin/ngit/sub_commands/list.rs
@@ -12,7 +12,7 @@ use nostr_sdk::Kind;
12use crate::{ 12use crate::{
13 cli_interactor::{Interactor, InteractorPrompt, PromptChoiceParms, PromptConfirmParms}, 13 cli_interactor::{Interactor, InteractorPrompt, PromptChoiceParms, PromptConfirmParms},
14 client::{ 14 client::{
15 fetching_with_report, get_events_from_cache, get_repo_ref_from_cache, Client, Connect, 15 fetching_with_report, get_events_from_local_cache, get_repo_ref_from_cache, Client, Connect,
16 }, 16 },
17 git::{str_to_sha1, Repo, RepoActions}, 17 git::{str_to_sha1, Repo, RepoActions},
18 git_events::{ 18 git_events::{
@@ -37,7 +37,7 @@ pub async fn launch() -> Result<()> {
37 37
38 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?; 38 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?;
39 39
40 let repo_ref = get_repo_ref_from_cache(git_repo_path, &repo_coordinates).await?; 40 let repo_ref = get_repo_ref_from_cache(Some(git_repo_path), &repo_coordinates).await?;
41 41
42 let proposals_and_revisions: Vec<nostr::Event> = 42 let proposals_and_revisions: Vec<nostr::Event> =
43 get_proposals_and_revisions_from_cache(git_repo_path, repo_ref.coordinates()).await?; 43 get_proposals_and_revisions_from_cache(git_repo_path, repo_ref.coordinates()).await?;
@@ -47,7 +47,7 @@ pub async fn launch() -> Result<()> {
47 } 47 }
48 48
49 let statuses: Vec<nostr::Event> = { 49 let statuses: Vec<nostr::Event> = {
50 let mut statuses = get_events_from_cache( 50 let mut statuses = get_events_from_local_cache(
51 git_repo_path, 51 git_repo_path,
52 vec![ 52 vec![
53 nostr::Filter::default() 53 nostr::Filter::default()
diff --git a/src/bin/ngit/sub_commands/login.rs b/src/bin/ngit/sub_commands/login.rs
index df7efa5..ae5efb1 100644
--- a/src/bin/ngit/sub_commands/login.rs
+++ b/src/bin/ngit/sub_commands/login.rs
@@ -5,45 +5,31 @@ use crate::{
5 cli::Cli, 5 cli::Cli,
6 client::{Client, Connect}, 6 client::{Client, Connect},
7 git::Repo, 7 git::Repo,
8 login, 8 login::fresh::fresh_login_or_signup,
9}; 9};
10 10
11#[derive(clap::Args)] 11#[derive(clap::Args)]
12pub struct SubCommandArgs { 12pub struct SubCommandArgs {
13 /// login to the local git repository only
14 #[arg(long, action)]
15 local: bool,
16
13 /// don't fetch user metadata and relay list from relays 17 /// don't fetch user metadata and relay list from relays
14 #[arg(long, action)] 18 #[arg(long, action)]
15 offline: bool, 19 offline: bool,
16} 20}
17 21
18pub async fn launch(args: &Cli, command_args: &SubCommandArgs) -> Result<()> { 22pub async fn launch(_args: &Cli, command_args: &SubCommandArgs) -> Result<()> {
19 let git_repo = Repo::discover().context("cannot find a git repository")?; 23 let git_repo = Repo::discover().context("cannot find a git repository")?;
24 // TODO show existing login on record, prompt to logout
25 // TODO use cli arguments to login
20 if command_args.offline { 26 if command_args.offline {
21 login::launch( 27 fresh_login_or_signup(&Some(&git_repo), None, command_args.local).await?;
22 &git_repo,
23 &args.bunker_uri,
24 &args.bunker_app_key,
25 &args.nsec,
26 &args.password,
27 None,
28 true,
29 false,
30 )
31 .await?;
32 Ok(()) 28 Ok(())
33 } else { 29 } else {
34 let client = Client::default(); 30 let client = Client::default();
31 fresh_login_or_signup(&Some(&git_repo), Some(&client), command_args.local).await?;
35 32
36 login::launch(
37 &git_repo,
38 &args.bunker_uri,
39 &args.bunker_app_key,
40 &args.nsec,
41 &args.password,
42 Some(&client),
43 true,
44 false,
45 )
46 .await?;
47 client.disconnect().await?; 33 client.disconnect().await?;
48 Ok(()) 34 Ok(())
49 } 35 }
diff --git a/src/bin/ngit/sub_commands/pull.rs b/src/bin/ngit/sub_commands/pull.rs
index d79b7b1..77a65e9 100644
--- a/src/bin/ngit/sub_commands/pull.rs
+++ b/src/bin/ngit/sub_commands/pull.rs
@@ -33,7 +33,7 @@ pub async fn launch() -> Result<()> {
33 let repo_coordinates = get_repo_coordinates(&git_repo, &client).await?; 33 let repo_coordinates = get_repo_coordinates(&git_repo, &client).await?;
34 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?; 34 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?;
35 35
36 let repo_ref = get_repo_ref_from_cache(git_repo_path, &repo_coordinates).await?; 36 let repo_ref = get_repo_ref_from_cache(Some(git_repo_path), &repo_coordinates).await?;
37 37
38 let logged_in_public_key = 38 let logged_in_public_key =
39 if let Ok(Some(npub)) = git_repo.get_git_config_item("nostr.npub", None) { 39 if let Ok(Some(npub)) = git_repo.get_git_config_item("nostr.npub", None) {
diff --git a/src/bin/ngit/sub_commands/push.rs b/src/bin/ngit/sub_commands/push.rs
index a77f356..aaf1009 100644
--- a/src/bin/ngit/sub_commands/push.rs
+++ b/src/bin/ngit/sub_commands/push.rs
@@ -6,7 +6,7 @@ use ngit::{
6use nostr_sdk::PublicKey; 6use nostr_sdk::PublicKey;
7 7
8use crate::{ 8use crate::{
9 cli::Cli, 9 cli::{extract_signer_cli_arguments, Cli},
10 client::{ 10 client::{
11 fetching_with_report, get_all_proposal_patch_events_from_cache, 11 fetching_with_report, get_all_proposal_patch_events_from_cache,
12 get_proposals_and_revisions_from_cache, get_repo_ref_from_cache, Client, Connect, 12 get_proposals_and_revisions_from_cache, get_repo_ref_from_cache, Client, Connect,
@@ -53,7 +53,7 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> {
53 53
54 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?; 54 fetching_with_report(git_repo_path, &client, &repo_coordinates).await?;
55 55
56 let repo_ref = get_repo_ref_from_cache(git_repo_path, &repo_coordinates).await?; 56 let repo_ref = get_repo_ref_from_cache(Some(git_repo_path), &repo_coordinates).await?;
57 57
58 let logged_in_public_key = 58 let logged_in_public_key =
59 if let Ok(Some(npub)) = git_repo.get_git_config_item("nostr.npub", None) { 59 if let Ok(Some(npub)) = git_repo.get_git_config_item("nostr.npub", None) {
@@ -166,15 +166,11 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> {
166 ahead.len() 166 ahead.len()
167 ); 167 );
168 168
169 let (signer, user_ref) = login::launch( 169 let (signer, user_ref, _) = login::login_or_signup(
170 &git_repo, 170 &Some(&git_repo),
171 &cli_args.bunker_uri, 171 &extract_signer_cli_arguments(cli_args).unwrap_or(None),
172 &cli_args.bunker_app_key,
173 &cli_args.nsec,
174 &cli_args.password, 172 &cli_args.password,
175 Some(&client), 173 Some(&client),
176 false,
177 false,
178 ) 174 )
179 .await?; 175 .await?;
180 176
@@ -204,7 +200,7 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs) -> Result<()> {
204 200
205 send_events( 201 send_events(
206 &client, 202 &client,
207 git_repo_path, 203 Some(git_repo_path),
208 patch_events, 204 patch_events,
209 user_ref.relays.write(), 205 user_ref.relays.write(),
210 repo_ref.relays.clone(), 206 repo_ref.relays.clone(),
diff --git a/src/bin/ngit/sub_commands/send.rs b/src/bin/ngit/sub_commands/send.rs
index fe2952f..114a021 100644
--- a/src/bin/ngit/sub_commands/send.rs
+++ b/src/bin/ngit/sub_commands/send.rs
@@ -10,12 +10,12 @@ use nostr::{
10use nostr_sdk::hashes::sha1::Hash as Sha1Hash; 10use nostr_sdk::hashes::sha1::Hash as Sha1Hash;
11 11
12use crate::{ 12use crate::{
13 cli::Cli, 13 cli::{extract_signer_cli_arguments, Cli},
14 cli_interactor::{ 14 cli_interactor::{
15 Interactor, InteractorPrompt, PromptConfirmParms, PromptInputParms, PromptMultiChoiceParms, 15 Interactor, InteractorPrompt, PromptConfirmParms, PromptInputParms, PromptMultiChoiceParms,
16 }, 16 },
17 client::{ 17 client::{
18 fetching_with_report, get_events_from_cache, get_repo_ref_from_cache, Client, Connect, 18 fetching_with_report, get_events_from_local_cache, get_repo_ref_from_cache, Client, Connect,
19 }, 19 },
20 git::{identify_ahead_behind, Repo, RepoActions}, 20 git::{identify_ahead_behind, Repo, RepoActions},
21 git_events::{event_is_patch_set_root, event_tag_from_nip19_or_hex}, 21 git_events::{event_is_patch_set_root, event_tag_from_nip19_or_hex},
@@ -175,21 +175,18 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs, no_fetch: bool) -> Re
175 } else { 175 } else {
176 None 176 None
177 }; 177 };
178 let (signer, user_ref) = login::launch( 178
179 &git_repo, 179 let (signer, user_ref, _) = login::login_or_signup(
180 &cli_args.bunker_uri, 180 &Some(&git_repo),
181 &cli_args.bunker_app_key, 181 &extract_signer_cli_arguments(cli_args).unwrap_or(None),
182 &cli_args.nsec,
183 &cli_args.password, 182 &cli_args.password,
184 Some(&client), 183 Some(&client),
185 false,
186 false,
187 ) 184 )
188 .await?; 185 .await?;
189 186
190 client.set_signer(signer.clone()).await; 187 client.set_signer(signer.clone()).await;
191 188
192 let repo_ref = get_repo_ref_from_cache(git_repo_path, &repo_coordinates).await?; 189 let repo_ref = get_repo_ref_from_cache(Some(git_repo_path), &repo_coordinates).await?;
193 190
194 // oldest first 191 // oldest first
195 commits.reverse(); 192 commits.reverse();
@@ -228,7 +225,7 @@ pub async fn launch(cli_args: &Cli, args: &SubCommandArgs, no_fetch: bool) -> Re
228 225
229 send_events( 226 send_events(
230 &client, 227 &client,
231 git_repo_path, 228 Some(git_repo_path),
232 events.clone(), 229 events.clone(),
233 user_ref.relays.write(), 230 user_ref.relays.write(),
234 repo_ref.relays.clone(), 231 repo_ref.relays.clone(),
@@ -370,9 +367,11 @@ async fn get_root_proposal_id_and_mentions_from_in_reply_to(
370 marker: _, 367 marker: _,
371 public_key: _, 368 public_key: _,
372 }) => { 369 }) => {
373 let events = 370 let events = get_events_from_local_cache(
374 get_events_from_cache(git_repo_path, vec![nostr::Filter::new().id(*event_id)]) 371 git_repo_path,
375 .await?; 372 vec![nostr::Filter::new().id(*event_id)],
373 )
374 .await?;
376 375
377 if let Some(first) = events.iter().find(|e| e.id.eq(event_id)) { 376 if let Some(first) = events.iter().find(|e| e.id.eq(event_id)) {
378 if event_is_patch_set_root(first) { 377 if event_is_patch_set_root(first) {