upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/lib
AgeCommit message (Collapse)Author
2026-04-10fix: percent-encode identifier in nostr:// URLs and GRASP HTTP pathsDanConwayDev
Repository identifiers can contain any characters per NIP-01 d-tag rules. Encode them in nostr:// clone URLs (display and parse) and in GRASP /<npub>/<identifier>.git paths, aligning with NIP-34 and GRASP-01.
2026-03-30feat: git worktree supportm0wer
Git worktrees don't have a .git directory with a parent, so we need to look for the git dir via git2's Repository::discover() and then look for the cache database there. This allows the client to work correctly when run from a worktree, and also allows the cache database to be shared between the main repo and its worktrees (since they share the same git dir and thus the same cache path).
2026-03-30fix(patch): accept reconstructed OID when commit id mismatch occursDanConwayDev
When applying a patch, if the reconstructed commit OID doesn't match the tagged commit id (after the existing amend attempt), accept the reconstructed OID rather than erroring. The diff is applied correctly regardless of the mismatch; apply_patch_chain already threads the actual OID forward via next_parent_override so the chain remains consistent. Mismatches can occur for several reasons: GPG-signed commits where libgit2's commit_create_buffer produces subtly different bytes than the original git commit, patches produced with non-standard tooling, or edge cases like the diff.noprefix issue fixed in 7a36aed.
2026-03-30fix(patch): don't error on commit id mismatch for pgp-signed commitsDanConwayDev
When applying a patch with a pgp signature, commit_create_buffer + commit_signed reconstructs the signed commit object. The resulting OID matches the original only if commit_create_buffer produces the exact same bytes that git originally signed — which isn't guaranteed across different git implementations or versions. The existing amend workaround (which re-applies author/committer to recover the correct OID) is preserved for unsigned commits. For pgp-signed commits the amend still runs but the mismatch bail is skipped, since the tree, author, committer, message and signature are all correct regardless of the OID difference.
2026-03-30fix(patch): handle diff.noprefix and normalize non-standard diff pathsDanConwayDev
libgit2 respects the user's `diff.noprefix` git config when generating patches via `git_email_create_from_commit`, producing diffs without the standard `a/`/`b/` path prefixes. `git2::Diff::from_buffer` always expects the standard prefix format and fails with "header filename does not contain 1 path components" when it is absent. Two fixes: - In `make_patch_from_commit`: explicitly set `old_prefix("a/")` and `new_prefix("b/")` on the diff options so ngit always generates interoperable patches regardless of the submitter's git config. - In `create_commit_from_patch`: normalize no-prefix diffs before passing to `git2::Diff::from_buffer`, as a defensive measure for patches already published by affected ngit versions or other tools. Adds unit tests for the normalization function covering: no-op on already-prefixed diffs, single and multi-file patches, new/deleted files (/dev/null preservation), and end-to-end libgit2 parse verification.
2026-03-20fix(client): panic cloning bare npub nostr:// URL with no relay hintsDanConwayDev
When cloning a nostr:// URL containing only an npub and identifier (no relay hints), and nothing is cached yet, the relay set was empty because fallback relays were intentionally skipped when a coordinate was present. This caused an unwrap() on a None from reduce() over an empty iterator. Fall back to fallback relays when the coordinate-derived relay set is still empty after processing all hints, and replace unwrap() with map_or() as a defensive guard.
2026-03-05fix(whoami): detect and fall back to system git config for nostr loginDanConwayDev
Add GitSystem to SignerInfoSource so credentials stored in the system git config (/etc/gitconfig) are included in the priority fallback chain (local > global > system) and shown as a separate level in whoami output.
2026-03-05feat(cover-note): add kind-1624 cover notes for PRs, patches, and issuesDanConwayDev
Implements experimental kind-1624 cover note events: - KIND_COVER_NOTE constant and process_cover_note() in git_events.rs; replaceable semantics (latest created_at, hex-id tiebreak), author or maintainer only - kind-1624 events fetched alongside labels in the fetch pipeline; cover_notes count added to FetchReport display - ngit pr/issue view: cover note displayed in place of description with a clear 'Cover Note:' header; maintainer-authored notes identify the author; original description shown only with --comments; cover_note object included in --json output - ngit pr set-cover-note / ngit issue set-cover-note: publish a kind-1624 event; nostr: mentions in --body converted to q/p tags via tags_from_content (same rules as issue --body) - Fix pre-existing clippy::too_many_lines on repo/mod.rs show_info
2026-03-05feat(subject): add pr/issue set-subject via NIP-32 kind-1985 labelsDanConwayDev
Adds the ability to update the displayed title of a PR or issue after creation using a kind-1985 label event with the #subject namespace. Only the author or a repository maintainer may set the subject. The latest authorised event wins with tiebreak by lexicographically larger event ID (NIP-1 replaceable event semantics). Branch names and commit messages are never affected. - Split get_labels() into process_labels() (additive #t) and process_subject() (replaceable-style #subject), with a shared get_labels_and_subject() entry point that processes both from a single pre-fetched slice of kind-1985 events - All list/view/JSON display paths apply the subject override silently - New ngit pr set-subject <id> --subject <text> command - New ngit issue set-subject <id> --subject <text> command
2026-03-05feat(labels): fetch and apply NIP-32 kind-1985 label eventsDanConwayDev
- Add KIND_LABEL (kind 1985) constant to git_events.rs - Add get_labels() merging inline t-tags with external kind-1985 events, gating each on author-or-maintainer permission - Extend get_fetch_filters() to request kind-1985 events for all known issue and proposal IDs - Track label event counts in FetchReport (field + Display + consolidation) - Update issue_list.rs and list.rs to fetch label events from cache and pass them through get_labels() instead of reading t-tags inline
2026-03-04add NIP-21 content tags (q/p) to issues, comments, PRs and patchesDanConwayDev
- parse nostr: URI mentions in issue bodies, comment bodies, PR descriptions, patch commit messages and cover letters - npub/nprofile mentions produce p tags; note/nevent/naddr mentions produce q tags per NIP-22 - naddr q tag value uses raw <kind>:<pubkey-hex>:<identifier> format - nevent pubkey field populated from embedded author or local cache lookup - dedup_tags() removes duplicate p tags and suppresses q tags whose event-id is already covered by an existing e threading tag - all parsing errors are non-fatal: invalid nostr: tokens are skipped
2026-03-04feat: fetch and display NIP-22 comment counts on issues and proposalsDanConwayDev
Download kind-1111 NIP-22 comments from relays and show a comment count in the detail view of `ngit list <id>` and `ngit issue list <id>`. - git_events: add KIND_COMMENT constant (kind 1111) - client: import KIND_COMMENT; add `comments` field to FetchReport; route kind-1111 events into report.comments in process_fetched_events; consolidate comments across relay reports; display "N comment(s)" in FetchReport; add a #E-tagged kind-1111 filter in get_fetch_filters covering all known issue and proposal root IDs - issue_list: add get_comment_counts() to query the local cache for kind-1111 events by #E tag and count per issue; extend the filtered tuple with comment_count; show a CMTS column in the table, a "Comments: N" line in the detail view, and a "comments" field in JSON - list: add KIND_COMMENT import; add resolve_event_id() helper and get_comment_count_for_proposal() to look up the count for a single proposal from the local cache; pass comment_count into show_proposal_details(); display "Comments: N" in plain text and "comments" in JSON; align detail-view labels
2026-03-04feat: add ngit issue list commandDanConwayDev
Non-interactive listing of NIP-34 issues (kind 1621) with status resolution, hashtag display, and detail view. - get_issues_from_cache: fetch GitIssue events from local cache by repo coordinate, mirroring get_proposals_and_revisions_from_cache - ngit issue list: table output of ID, status, title and hashtags at end of each row; status resolved via existing get_status() logic - --status: comma-separated filter (open,draft,closed,applied; default: open) - --hashtag: comma-separated label filter (case-insensitive, OR match) - --json: machine-readable output including hashtags and description - --offline: skip network fetch, use local cache only - <id>: optional positional argument (hex event-id or nevent) to show full details of a specific issue including body content
2026-03-04feat: fetch and report NIP-34 issues and their statusesDanConwayDev
Download kind-1621 issues from relays into the local cache alongside patches and PRs. Issue IDs are tracked separately from proposal IDs throughout the fetch pipeline so they never appear in proposal lists. - get_fetch_filters: include Kind::GitIssue in the #a-tag filter and add a dedicated issue_ids parameter to fetch status events (1630-1633) tagged with known issue IDs - FetchRequest: add issue_ids field populated from the local cache - fetch_all_from_relay: track fresh_issue_roots independently of fresh_proposal_roots; loop continues until both are drained - process_fetched_events: route GitIssue events into fresh_issue_roots and report.issues; route status events to issue_statuses or statuses based on whether the root ID is a known issue or proposal - FetchReport: add issues and issue_statuses fields, consolidated across relays, and displayed as "N issue(s), M issue status(es)" in the report
2026-02-27fix: skip ^{} peeled-tag refs in sync to prevent invalid refspec crashDanConwayDev
Regression introduced in 28ad5440: ngit sync crashed with 'invalid refspec refs/remotes/origin/v1.4.4^{}:refs/tags/v1.4.4^{}' on repos with annotated tags. Fixed by guarding all three iteration sites in sync.rs and identify_remote_sync_issues in list.rs; also corrected the always-false logic bug in invalid_nostr_state_ref.
2026-02-27fix: include KIND_PULL_REQUEST IDs in proposal_ids for fetch filtersDanConwayDev
kind-5 deletion events that only #e-tag a PR Kind event (kind 1618) were never fetched because proposal_ids was built from Kind::GitPatch events only. The deleted PR event remained in the local cache and continued to appear as a remote ref (refs/heads/pr/<branch>).
2026-02-27fix: annotated tags missing from list due to dropped peeled refsDanConwayDev
RepoState::try_from was explicitly discarding all refs/tags/*^{} entries ("peeled" refs) when parsing the nostr state event. This meant the list command only advertised the tag object OID, but git requires two lines for annotated tags: <tag-object-oid> refs/tags/v1.0.0 <commit-oid> refs/tags/v1.0.0^{} Without the ^{} peeled line git cannot resolve the tag to a commit, so git fetch --prune treats it as unresolvable and deletes it. The nostr state event already stores both entries correctly (written by generate_updated_state in push.rs). The fix simply stops try_from from discarding the ^{} entries on read, so they flow through to the list output unchanged.
2026-02-27fix: update fallback signer relaysDanConwayDev
Replace nsec.app with bucket.coracle.social and nos.lol.
2026-02-27fix: deselected items re-appear as selected when adding new itemDanConwayDev
Sync the defaults vector to the user's actual selections after each prompt in multi_select_with_custom_value, so deselected items are not shown as checked on the next loop iteration.
2026-02-27fix: connect to relay before user acknowledges nostrconnect QR/URLDanConwayDev
Previously NostrConnect was only instantiated after the user selected 'waiting for signer app to connect...', so any connection made while the prompt was visible was missed. Now listening starts immediately after the QR/URL is displayed, with a spinner that auto-resolves on connection rather than requiring a manual prompt dismissal.
2026-02-27feat: only show login profile search and warnings in verbose modeDanConwayDev
reduces noise in normal usage; messages still appear with -v flag
2026-02-27feat: add --bunker-url to account login for non-interactive useDanConwayDev
allows non-interactive bunker:// URL login without requiring --nsec, by connecting to the remote signer and saving credentials to git config
2026-02-27feat: show and allow changing signer relays in nostrconnect flowDanConwayDev
display signer relays below QR code and nostrconnect URL with an option to change them via the existing multiselect UI before connecting
2026-02-26feat: track and display kind-5 deletion count in FetchReportDanConwayDev
Add a deletions counter to FetchReport, incremented in process_fetched_events for each kind-5 event received and accumulated across relays in consolidate_fetch_reports. The count is included in the fetch summary display (e.g. "1 deletion", "2 deletions").
2026-02-26feat: request kind-5 deletions for state/announcement events by #eDanConwayDev
Add a non_proposal_event_ids parameter to get_fetch_filters and a corresponding field on FetchRequest. On each fetch, the event IDs of cached repo announcements and the state event are collected and used to build a dedicated kind-5 filter keyed on #e tags, as specified by NIP-09. The existing #a-tagged filter already covers addressable-event deletions; this new filter catches deletions from clients that follow NIP-09 strictly and do not embed a repo coordinate in their deletion event.
2026-02-26fix: show detailed relay view when --verbose flag is set in send_eventsDanConwayDev
The use_concise flag in send_events was computed with || instead of &&, causing !is_test to short-circuit to true in production and making --verbose have no effect on published event display.
2026-02-26feat: publish state event to stale grasp relays before sync pushDanConwayDev
FetchReport now captures the full state event seen on each relay during the nostr fetch (state_per_relay: HashMap<RelayUrl, Option<Event>>). ngit sync uses this to identify grasp server relays with a missing or outdated state event and publishes the current state event to them before attempting git pushes, preventing rejections. An existing login is loaded silently (no prompt, no profile fetch) to provide a signer for NIP-42 auth if requested.
2026-02-26fix: rollback local state event cache on total push failureDanConwayDev
When all git servers reject or skip a push, delete the newly-published state event from the local nostr cache and restore the previous state event (if any), so that a subsequent retry starts from a clean baseline rather than a state that no server ever accepted.
2026-02-26fix: report per-relay publish results in send_events summaryDanConwayDev
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".
2026-02-26feat: forward unrecognised push options to git serversDanConwayDev
Any -o option passed to `git push` that is not handled by ngit (title, description) is forwarded verbatim to the git server via git2::PushOptions::remote_push_options. This allows options such as `-o secret-scanning.skip` to pass through transparently. `ngit send` gains a matching -o / --push-option flag for the same purpose.
2026-02-25fix: update hardcoded libgit2 version strings in tests to 1.9.2DanConwayDev
The Nix environment provides libgit2 1.9.2 via nixpkgs, which libgit2-sys picks up at build time instead of using its bundled version. This caused test assertions that hardcode the libgit2 version string (appended by libgit2 to patch output) to fail after commit 319bb7f added new Cargo dependencies, though the exact mechanism by which those dependencies triggered the switch from the bundled 1.9.1 to the system 1.9.2 remains unclear. Also bump git2 from 0.20.2 to 0.20.4 in both Cargo.toml files so the bundled libgit2-sys version (0.18.3+1.9.2) properly aligns with the 1.9.2 version in use.
2026-02-25fix IPv6 connection failures with Happy Eyeballs (RFC 8305)DanConwayDev
Implement a custom WebSocketTransport that races IPv6 and IPv4 connections with a 250ms head start for IPv6, matching browser behavior. This prevents broken IPv6 from blocking all relay connections indefinitely. This is a temporary fix until the upstream async-wsocket PR is merged: https://github.com/shadowylab/async-wsocket/pull/42
2026-02-20improve `ngit repo` output formattingDanConwayDev
- suppress fetch summary (no updates / updates: X) - write blank line to stderr after relay errors for clear separation - show identifier below title only when it differs from name - show earliest unique commit (root_commit) in metadata - restructure infrastructure into grasp servers / additional git servers / additional relays sections - display grasp servers by domain only (strip scheme, npub, repo path) - strip wss:// prefix from relay display - show maintainer names from metadata cache; fall back to short npub - append (you) next to the current user's name wherever it appears - show [name] attribution and the maintainer model note only when there is more than one maintainer
2026-02-20replace nos.lol with relay.ditto.pub as default relayDanConwayDev
nos.lol always prompts for nip42 auth even for reading, making it unsuitable as a default relay.
2026-02-20use trusted maintainer's grasp servers as fallback for co-maintainersDanConwayDev
when a co-maintainer has no grasp servers of their own, fall back to the trusted maintainer's grasp servers rather than jumping straight to system defaults. if the trusted maintainer only uses a single grasp server, the first system default is appended for redundancy. system defaults are only used when neither the user nor the trusted maintainer has any grasp servers configured.
2026-02-20default relay prompt to no selection; add is never pre-selectedDanConwayDev
With no default relays seeded, the multi-select add option was incorrectly pre-selected when the list was empty. Now add/add-another is always unselected by default so enter skips straight through.
2026-02-20drop default relays from announcement eventsDanConwayDev
ngit init and accept_maintainership_with_defaults no longer seed relay lists from the client default set. The relay list in a Kind:30617 announcement now contains only grasp-server-derived relay URLs; no additional public relays are suggested or added automatically.
2026-02-20extract grasp/maintainership helpers to lib and auto-accept on pushDanConwayDev
move apply_grasp_infrastructure, latest_event_repo_ref to lib/repo_ref.rs and wait_for_grasp_servers + grasp_servers_from_user_or_fallback to a new lib/accept_maintainership.rs so both binaries can share them. add accept_maintainership_with_defaults which publishes the co-maintainer's own Kind:30617 announcement with defaults (user grasp servers, shared metadata from existing events) then waits for grasp server provisioning and updates nostr.repo config and origin remote. replace the push error block with a call to accept_maintainership_with_defaults so pushing now silently accepts co-maintainership instead of failing.
2026-02-18fix: remove outdated patch_supports gate and fix fetch parent fallbackDanConwayDev
Remove the patch_supports_commit_ids gates in checkout.rs and list.rs that pre-dated the mbox fallback logic. apply_patch_chain already handles all fallback cases. Also replace the main-branch TODO fallback in make_commits_for_proposal with get_parent_commit_from_patch, which uses timestamp-based best-guess when the parent-commit tag is absent.
2026-02-18fix: thread applied OID through patch chain correctlyDanConwayDev
When applying a chain of patches without parent-commit tags, each patch's parent was resolved independently, meaning patch2 would not parent off the OID patch1 actually produced. Thread next_parent_override through the loop and guard the early-return in create_commit_from_patch so the override is always honoured.
2026-02-18fix: harden apply_patch_chain when optional patch tags absentDanConwayDev
- Replace .unwrap() calls in filter closure with pattern-let guards so a missing/invalid mbox commit id conservatively includes the patch - Use the OID returned by create_commit_from_patch as branch tip instead of the tag commit id, which may differ for GPG-signed commits - Add module-level doc comment to mbox_parser explaining design rationale and known limitations around the mbox envelope SHA1
2026-02-18fix: improve mbox patch parser resilience for optional tag fallbackDanConwayDev
- Use mailparse crate to handle RFC 2047 encoded-words (Q/B encoding) and RFC 2822 header folding in Subject and From headers - Fix email signature separator check: use exact match 'line == "-- "' instead of starts_with to avoid false positives on body lines - Remove dead/incorrect asctime parsing in committer date extraction; simplify to always return None (falls back to author_timestamp)
2026-02-18feat: handle missing optional patch tags for pr/ flowDanConwayDev
- Add mbox_parser module to extract metadata from patch content - Extract author/committer from From: and Date: headers when tags missing - Extract commit message body as fallback for description tag - Implement best-guess parent commit logic using committer timestamps - Update patch_supports_commit_ids to accept mbox-parseable patches - Enable patches without optional tags to appear as pr/ branches
2026-02-18report event kinds in publish progress messagesDanConwayDev
instead of generic 'Publishing to nostr relays...' messages, describe what is being published e.g. 'Publishing 3 patches to nostr relays...' or 'Publishing 1 announcement and 1 state event to nostr relays...'
2026-02-17add --signer-relay option to ngit account loginDanConwayDev
Allow users to specify custom signer relays for nostrconnect login. Relay URLs are auto-prefixed with wss:// if no scheme is provided.
2026-02-17add second default signer relay for resilienceDanConwayDev
Add wss://relay.ditto.pub as a second default signer relay alongside wss://relay.nsec.app for improved reliability during nostrconnect login.
2026-02-16test: fix all tests that use publishDanConwayDev
that expect whitespace then something
2026-02-16test: fix list reporter under test conditionsDanConwayDev
this took a lot of investigation to work out why this was failing
2026-02-16fix: reporter git server non-verboseDanConwayDev
hide details in non-verbose mode
2026-02-16fix: report wording consistancy in publishingDanConwayDev
always report publishing and finish with published
2026-02-16fix: report wording `fetching` ~> `checking`DanConwayDev
to be consistent with the summary version
2026-02-16fix: report wording `maintainers ~> announcementsDanConwayDev
'maintainers' is missleading as the announcement authors may not be in the maitnainer set
2026-02-13feat: add spinner for publish in non-verbose modeDanConwayDev
Apply the same hidden-to-visible MultiProgress pattern used for fetch to send_events. In concise mode (non-verbose, non-test, non-silent), a spinner is shown immediately and the detail progress bars are revealed after a delay, using the deferred bar finish mechanism.
2026-02-13fix: tweak fetch msgDanConwayDev
as its not fetching from git servers just yet
2026-02-13fix: pre-add heading bar so it renders in expanded viewDanConwayDev
The heading bar was being inserted into the MultiProgress after the draw target switch, but by then all relay bars were already finished so indicatif did not re-render the layout. Pre-add the heading bar at creation time (position 0, before relay bars) and only call finish_with_message on it after the draw target switches to stderr.
2026-02-13fix: show heading in expanded view by finishing after draw target switchDanConwayDev
The 'fetching updates...' heading was finished with finish_with_message while the draw target was still hidden, so indicatif never rendered it. Move the draw target switch before the heading insertion so the heading renders immediately when added.
2026-02-13fix: defer bar finish until reveal to show all barsDanConwayDev
indicatif does not re-render bars that called finish_with_message while the draw target was hidden. Instead of trying to force a redraw, defer the finish_with_message call until after the draw target switches to stderr. A BarRevealState coordinates between relay tasks and the timer: bars that complete before the 5s reveal store their finish state in a mutex-protected list, which the timer flushes after switching the draw target. Bars completing after reveal finish immediately as before.
2026-02-13fix: use force_draw to redraw bars after revealDanConwayDev
tick() is a no-op when enable_steady_tick() is active. Use force_draw() on a bar to trigger a full MultiState redraw including bars that finished while the draw target was hidden.
2026-02-13fix: only show heading when expand delay firesDanConwayDev
Use a ProgressBar inside the detail multi for the heading instead of eprintln so it gets cleared with progress_reporter.clear() and never appears when fetch completes before the delay.
2026-02-13refactor: hidden-to-visible MultiProgress patternDanConwayDev
Replace the broken SpinnerState approach (which checked should_expand at task spawn time when all tasks spawn simultaneously) with a two-MultiProgress pattern: a visible spinner shown immediately, and a hidden detail multi that every relay task always adds bars to. A background timer reveals the detail bars after 5s, printing a heading before switching the draw target.
2026-02-13feat: add spinner for git fetch in non-verbose modeDanConwayDev
Shows a progress spinner when fetching from git remotes in non-verbose mode. Suppresses git fetch output and listing messages when not in verbose mode. Uses NGITTEST environment variable for test timeouts.
2026-02-13fix: clear progress reporters on successful completionDanConwayDev
Progress reporters were not being cleared after successful operations, leaving progress bars visible in the terminal output. Now they are properly cleared when all operations complete without errors.
2026-02-12fix: handle existing local branch that is behind when checking out PRDanConwayDev
When a PR branch already exists locally, the previous code would silently move the branch pointer without checking for tracking or fast-forward safety. Now: - If branch has tracking: checkout and warn user to git pull - If no tracking and fast-forward: safely move pointer - If no tracking and diverged: show copy-paste commands for reset/rebase - If commit not found locally: suggest fetching Uses console crate for yellow output instead of hardcoded ANSI codes.
2026-02-11feat: use fallback relays for bootstrapping onlyDanConwayDev
- Add --relay flag to 'ngit account create' allowing users to specify relay URLs (repeatable). Defaults to relay-default-set when not provided. - Remove fallback relays from fetch when repo context exists (repo coordinate provided). Only use them for bootstrapping (profile discovery with no repo context). - Remove fallback relays from publish when repo or user relays exist. Only use them when neither is available (e.g. new account signup). - Update --customize help text to reflect new relay-default-set behavior.
2026-02-10remove more_fallback_relays (dead code)DanConwayDev
The more_fallback_relays field is never consumed anywhere in the codebase. Removing it from the Client struct, Params struct, trait definition, and all related initialization code.
2026-02-10remove relay.nostr.band from default relaysDanConwayDev
The relay.nostr.band relay is now offline and should be removed from the default relay set.
2026-02-10feat: update ngit account login for non-interactive modeDanConwayDev
Update login flow to support non-interactive mode with --nsec flag. Refactor login logic to handle both interactive and non-interactive cases. Add better error handling and validation.
2026-02-10feat: add non-interactive mode support to CLI interactorDanConwayDev
Add CliError type for styled error output and cli_error() helper function. Update Interactor to support non-interactive mode with default values. Add prompt methods that respect non-interactive mode and provide better error messages when required values are missing.
2025-11-18chore: fix clippy warningDanConwayDev
use more idomatic function
2025-11-18test: nostr git url with pathDanConwayDev
add additional test to cover this scenario
2025-11-14fix: fetch report showing cached profile event as newDanConwayDev
it was only checking local cache, where profile events are stored only stored in global
2025-11-13fix: don't attempt to fetch annotated tags we haveDanConwayDev
because thats not needed
2025-11-13fix: cli output dim coloringDanConwayDev
so that relay/git servers appear dim when fetch action is complete
2025-11-13feat(list): make list async and include sync report inlineDanConwayDev
copy relay fetching approach to async and reporting
2025-11-13refactor: simplify get_short_git_server_nameDanConwayDev
so it doesnt use the git_repo
2025-11-13fix: out of sync grasp server cli outputDanConwayDev
so it shows a summary rather than a lot of lines of issues
2025-11-13fix: cli output line deletion during fetchDanConwayDev
also reduce the clutter in the cli output for grasp servers.
2025-11-13test: reduce relay timeouts for testsDanConwayDev
some test failed and some test jus took too long
2025-11-10feat: adaptive relay timeout 45s or 7s based on successDanConwayDev
also auto-retry connection after 2s with x1.5 increment until timeout
2025-11-03fix: show nsec when created and can't save globallyDanConwayDev
otherwise we prompt the user to manually add it to global git config but they don't know the value. we did it like this to not expose the nsec but i in this case we should.
2025-10-28fix(pr): push use stderr rather than stdoutDanConwayDev
so we dont return a value to the git during remote helper operations
2025-10-28fix: nip46 signer bunker pubkeyDanConwayDev
the user pubkey was being used in bunker-url rather than the bunker pubkey. fixes nostr:nevent1qvzqqqqx25pzpv3tq6c9rl2jx2tx4y6y5c6dj4krmse60a0vmjkea5gam3qjpfljqqsx5ztpy48muheny4p49hh634l5zs3jqw9x5980dm9xsjsk98jrk8ch2sdsw
2025-10-20fix: reading NIP-22 style Status events during fetchDanConwayDev
also fix the report so that we show nip10 style statuses too
2025-10-20fix: grasp server detectionDanConwayDev
to ensure we dont try and fallback to ssh
2025-10-17chore: cargo updateDanConwayDev
update patches ahead of wider upgrade. clippy required some autofixes
2025-10-17feat!(nostr_url): replace user with ssh_key_fileDanConwayDev
replaces the "user" in the nostr_url format with "ssh_key_file", to support the original intent, which was to allow users to specify different authentication credentials. most git servers always expect the ssh user to be 'git'. the idiumatic way of specifying logging in as a different user is to specify a different ssh key. the idiomatic way of storing non-default ssh keys is in the location `~/.ssh/key_name`. "ssh_key_file" can be specified as `key_name`, for keys in the default location, or as a relative or absolute custom location eg. `/other_keys/.ssh/nym1` or `../.ssh/nym1`. BREAKING CHANGE: in nostr git url nym1@ssh/npub123/identifer, nym1 is now treated as ssh key file location rather than a ssh user. it can be specified as a file within `~/.ssh` eg `~/.ssh/nym1` or a full or relative path.
2025-10-17feat(send): add `merge-base` tag to PR (Update)DanConwayDev
following its inclusion in the NIP-34 spec
2025-09-04feat(remote): use push PR non-interactive fallbackDanConwayDev
move the PR push code in 'ngit send' into lib. reuse the non-interactive fallbacks in git-remote-nostr
2025-09-03fix: nostr:// nip05 without localDanConwayDev
the patch I sent to rust-nostr library got merged
2025-08-19fix: nip05 without local partDanConwayDev
allow users to use just a nip05 domain in nostr:// urls rather than requiring _@ prefix.
2025-08-19feat(list): add PR fetch and checkout supportDanConwayDev
abstracted git remote helper fetch functions added support to `ngit list` to fetch PR data and checkout as proposal branch
2025-08-18fix: only use state and ann from maintainersDanConwayDev
at some point we introduced a bug were we were taking the state and git servers from non authorised maintainers.
2025-08-07Merge branch 'add-prs-to-ngit-send'DanConwayDev
2025-08-07fix(send): refs not confirmed are usually acceptedDanConwayDev
having implemented 3b5c48f5a2a4b9be5d14baa8f5e801fefd5c1166, a ref pushed to refs/nostr/<event-id> on a github repo was accepted but was not confirmed
2025-08-07fix(send): PR cli outputDanConwayDev
to keep the user informed of whats happening / happend
2025-08-07fix(send):server not confirming acceptanceDanConwayDev
don't treat this as accepted
2025-08-07fix(send): push PR refs to non-grasp serversDanConwayDev
attempt to use a range of protocols instead of unath http
2025-08-07refactor: abstract `is_grasp_server_clone_url`DanConwayDev
so we can use it elsehwere
2025-08-07refactor: rename fn `is_grasp_server_in_list`DanConwayDev
to make it's purpose clearer
2025-08-07fix(push): capture more error updating refsDanConwayDev
previously server might respond with errors updating refs but we were not treating this as a failure to push those refs.