diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-10 13:10:18 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-10 13:10:18 +0000 |
| commit | 1e7aeb4d7972d29c6586df18128a8a4f7667845a (patch) | |
| tree | 0f7e5fcaa5a005aeec7ae2d9f35b2c473ef8f785 /src/bin/git_remote_nostr/push.rs | |
| parent | d2412565334f48bd31e57d29d7959c24258ccd98 (diff) | |
| parent | aae452697d152694a8f163219f707356e84b420b (diff) | |
Make ngit non-interactive by default
Implements non-interactive mode as the default behavior for ngit.
Users must now use -i flag for interactive prompts, or provide
all required arguments explicitly. Adds -d flag for sensible
defaults and -f flag for force operations.
Changes:
- CLI interactor infrastructure supports non-interactive mode
- Global flags: -i (interactive), --defaults (use defaults), -f (force)
- ngit init: requires --name or --identifier, supports --defaults
- ngit account: new signup command, login supports non-interactive
- ngit send: validates required fields, supports --defaults
- git-remote-nostr: fixed to prevent interactive prompts during push
- Comprehensive test coverage: 234 unit tests + integration tests
Diffstat (limited to 'src/bin/git_remote_nostr/push.rs')
| -rw-r--r-- | src/bin/git_remote_nostr/push.rs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/bin/git_remote_nostr/push.rs b/src/bin/git_remote_nostr/push.rs index 31c920a..5cbec7f 100644 --- a/src/bin/git_remote_nostr/push.rs +++ b/src/bin/git_remote_nostr/push.rs | |||
| @@ -20,7 +20,7 @@ use ngit::{ | |||
| 20 | self, KIND_PULL_REQUEST, KIND_PULL_REQUEST_UPDATE, event_to_cover_letter, get_event_root, | 20 | self, KIND_PULL_REQUEST, KIND_PULL_REQUEST_UPDATE, event_to_cover_letter, get_event_root, |
| 21 | }, | 21 | }, |
| 22 | list::list_from_remotes, | 22 | list::list_from_remotes, |
| 23 | login::{self, user::UserRef}, | 23 | login::{existing::load_existing_login, user::UserRef}, |
| 24 | push::{push_to_remote, select_servers_push_refs_and_generate_pr_or_pr_update_event}, | 24 | push::{push_to_remote, select_servers_push_refs_and_generate_pr_or_pr_update_event}, |
| 25 | repo_ref::{self, get_repo_config_from_yaml, is_grasp_server_clone_url}, | 25 | repo_ref::{self, get_repo_config_from_yaml, is_grasp_server_clone_url}, |
| 26 | repo_state, | 26 | repo_state, |
| @@ -173,6 +173,7 @@ pub async fn run_push( | |||
| 173 | Ok(()) | 173 | Ok(()) |
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | #[allow(clippy::too_many_lines)] | ||
| 176 | async fn create_and_publish_events_and_proposals( | 177 | async fn create_and_publish_events_and_proposals( |
| 177 | git_repo: &Repo, | 178 | git_repo: &Repo, |
| 178 | repo_ref: &RepoRef, | 179 | repo_ref: &RepoRef, |
| @@ -182,8 +183,18 @@ async fn create_and_publish_events_and_proposals( | |||
| 182 | existing_state: HashMap<String, String>, | 183 | existing_state: HashMap<String, String>, |
| 183 | term: &Term, | 184 | term: &Term, |
| 184 | ) -> Result<(Vec<String>, bool)> { | 185 | ) -> Result<(Vec<String>, bool)> { |
| 185 | let (signer, mut user_ref, _) = | 186 | let (signer, mut user_ref, _) = load_existing_login( |
| 186 | login::login_or_signup(&Some(git_repo), &None, &None, Some(client), true).await?; | 187 | &Some(git_repo), |
| 188 | &None, | ||
| 189 | &None, | ||
| 190 | &None, | ||
| 191 | Some(client), | ||
| 192 | true, // silent | ||
| 193 | false, // prompt_for_password - MUST be false for non-interactive | ||
| 194 | true, // fetch_profile_updates | ||
| 195 | ) | ||
| 196 | .await | ||
| 197 | .context("Authentication required. Run 'ngit account login' first, then try again.")?; | ||
| 187 | 198 | ||
| 188 | if !repo_ref.maintainers.contains(&user_ref.public_key) { | 199 | if !repo_ref.maintainers.contains(&user_ref.public_key) { |
| 189 | for refspec in git_server_refspecs { | 200 | for refspec in git_server_refspecs { |