Skip to content

Releases: DanConwayDev/ngit-cli

v2.6.3

Choose a tag to compare

@github-actions github-actions released this 10 Jul 15:26

Fixed

  • ngit init now promptly reports actionable account setup guidance when no signer is configured, instead of repeatedly trying to prompt for an nsec.

v2.6.2

Choose a tag to compare

@github-actions github-actions released this 07 Jul 15:25
v2.6.2
4316af8

Fixed

  • git push to the default branch now never publishes duplicate PR merge/applied status events for PRs that are already marked applied; also improved merge detection now using the pre-push nostr repo state rather than git internals

v2.6.1

Choose a tag to compare

@github-actions github-actions released this 29 Jun 14:53
v2.6.1
55f3e3a

Fixed

  • Remove accidental extra relay calls to check for new ngit versions; version checks now only use update relays when already connected to them.

v2.6.0

Choose a tag to compare

@github-actions github-actions released this 26 Jun 19:17
v2.6.0
7b37d89

Added

  • ngit merge merges a PR into the default branch as a no-ff merge commit (recording the PR nevent and author in the commit message) without pushing
  • ngit pr and ngit issue commands that accept a PR/issue event ID now accept unique hex prefixes, with or without a leading #; ambiguous prefixes fail with the matching items listed
  • ngit init -u ... / --u ... / --upstream ... publishes the informational NIP-34 u tag for subordinate forks, and ngit repo now displays/serializes existing u metadata without ever inventing it by default
  • ngit account connect as an alias for ngit account login -i (interactive nostr connect login) [hzd149]
  • Pushing commits that include issue-closing keywords (e.g. fixes / resolves) followed by # or nostr:nevent123 now auto-resolves referenced issues
  • Added env-var and git-config options to increase libgit2 HTTP connect and per-socket I/O timeouts, helpful for large pushes with git servers that may be silent for longer than the default timeout; NGIT_HTTP_CONNECT_TIMEOUT_MS / NGIT_HTTP_IO_TIMEOUT_MS override nostr.http-connect-timeout-ms / nostr.http-io-timeout-ms for one-off commands — thanks to new contributor mstrofnone
  • warn when newer ngit version available

Changed

  • Use git index relays along side relay hints to find repositories during cloning
  • Bump dependencies: updated to rust-nostr v0.45.0-alpha.2 (required significant internal refactoring); semver-compatible lockfile updates across the board; dev-dependencies rstest 0.23 → 0.26 and mockall 0.13 → 0.14
  • The interactive remote-signer login menu now has a single "bunker" option that shows the QR code and the nostrconnect:// connection string together while it waits for the signer to connect, and concurrently offers options to manually paste a bunker:// url, change the signer relays, or cancel; previously these were separate menu entries gated behind ctrl+c [hzd149]

Fixed

  • Merge status detection now handles updated PRs correctly
  • Better default branch and merge-base detection when force-pushing PRs
  • cargo install ngit was failing to build due to an upstream dependency picking up an incompatible git2 version
  • Pushing a tag through a nostr:// remote wrote a stray ref at refs/remotes/<remote>/<tagname> — git's remote-tracking branch namespace — so tags appeared as remote branches in git branch -r, IDE listings, completion, etc. The remote helper no longer writes a per-remote tracking ref for tags (the local refs/tags/<name> is git's single source of truth), and ngit sync sources tag push refspecs directly from the nostr state event oid. On the next push or ngit sync, any stray legacy entries are deleted automatically.
  • Invited co-maintainers auto-accept maintainership during push and auto-update the remote to reflect their npub. This no longer breaks the push.
  • ngit send --in-reply-to now errors before publishing an update to an existing PR when the signer is neither the proposal author nor a repository maintainer.
  • Push reporting no longer returns ok before any git server has successfully received the git data.
  • State events are no longer broadcast before the git data is successfully pushed: ngit now publishes the state event to GRASP servers using their purgatory support, pushes the git data, then only broadcasts to additional relays after at least one git server succeeds, so ok requires the latest state on at least one relay and the git data on at least one git server.

Removed

  • NIP-05 signer-URL lookup removed from the remote-signer login flow; it was unused and added an extra step before reaching the bunker / QR-code screen

v2.5.0

Choose a tag to compare

@github-actions github-actions released this 26 May 19:03
v2.5.0
d88bce1

Changed

  • git push pr/<branch> and ngit send now default to PR kind for new proposals when the repository has at least one GRASP server; previously only oversized commits (>60 KB) or those containing submodules triggered PR kind automatically
  • When a PR cannot be pushed to the repository's GRASP servers, ngit uses GRASP-06 instead of creating a new personal-fork announcement; ngit send --git-server or git push -o git-server=<url> lets contributors target a custom git URL or GRASP server explicitly
  • ngit init republishes now preserve unknown tags from the existing announcement instead of silently stripping them, so tags added by a future ngit version or third-party tool are never lost on republish; a yellow warning lists the carried-over tag names and --clean will remove them
  • ngit pr apply, ngit pr checkout, and ngit pr list now consult git servers lazily — only when the needed commit is not already present locally — and share a single fetch helper; previously each command had its own near-duplicate fetch logic, and checkout fetched unconditionally even when the commit was already local — thanks to m0wer for the contribution
  • ngit pr checkout (and the interactive path in ngit pr list) now tries the submitter-supplied clone URLs from the PR event as a fallback when the repo's declared git servers don't carry the PR tip, matching the existing behaviour in ngit pr apply; this fallback is disabled for passive git clone/git fetch paths to prevent a malicious submitter slowing down every repo operation
  • Integration test harness completely rewritten for greater reliability and speed

Fixed

  • Force-pushing a rebased pr/<branch> produced a PR update event with a stale merge-base tag; the remote helper was forwarding the original stored tag instead of recomputing from the actual git topology; the merge-base is now always recomputed from git merge-base for every push type
  • ngit pr checkout correctly checked out the PR as a local branch but left the working directory at its previous state
  • ngit pr checkout --force on a patch-kind proposal failed with "failed to find parent commit" when the new revision depended on a commit not yet in the local repo; the fetcher now retrieves the parent from the git servers before applying
  • ngit send --in-reply-to <hex_event_id> for a non-root reference (e.g. an issue mention) emitted an ["e", ...] tag instead of the NIP-21 ["q", ...] quote tag; hex and bech32 inputs now produce the same tag

v2.4.4

Choose a tag to compare

@github-actions github-actions released this 16 May 11:31
v2.4.4
05b0edb

Added

  • ngit sync --trust-server (-t): when a git server is fast-forward ahead of nostr state, sync reports the affected refs and requires --trust-server to sign and publish an updated state event reflecting the server's commits; in non-interactive mode the update is auto-accepted
  • nostr.trust-server-domains git config setting: semicolon-separated list of git-server hostnames that ngit sync automatically trusts when they are fast-forward ahead of nostr state, without requiring --trust-server; the new commits are also pushed to any other git servers; can be set globally (git config --global nostr.trust-server-domains 'github.com;codeberg.org') or per-repository
  • Diverged-branch detection in ngit sync: branches where the git server and nostr state have each made commits the other lacks are always reported with a concrete recovery command (git fetch <url> <branch> && git push <nostr-remote> +<branch>) and cannot be resolved with --trust-server

Fixed

  • fast-forward push to a pr/ branch backed by a PR event (kind 1618) or PR update event (kind 1619) failed with "event is not a patch"; these events store the tip commit in a "c" tag rather than a "commit" tag, so get_commit_id_from_patch now checks the "c" tag for PR/PR-update events before falling back to the mbox content heuristic
  • fast-forward push to a pr/ branch that is based on an existing PR event produced a PR update event with an incorrect merge-base tag; the previous tip of the PR was used as the merge-base instead of the original branch divergence point; the fix reads the merge-base tag from the root PR event and forwards it unchanged into the PR update event
  • patches containing submodule entries (mode 160000) now return an error from create_commit_from_patch instead of crashing the git-remote-nostr process with signal 11 (SIGSEGV); libgit2's apply_to_tree dereferences a null pointer on such entries rather than reporting an error, so the submodule diff is detected before calling into libgit2 and the proposal is skipped gracefully; ngit send and the pr/ branch push path in git-remote-nostr now also detect submodule entries up-front and automatically use PR mode so the commits are pushed directly rather than sent as patch events

Documentation

  • strengthen pr/ branch prefix requirement in ngit skill: add a mandatory key rule bullet and a CRITICAL callout in the PR workflow to prevent LLMs from omitting the prefix
  • document in ngit skill that omitting -o title= / -o description= when pushing a single-commit PR is preferred — ngit uses the commit subject and body automatically
  • clarify newline handling in ngit skill: git push -o 'description=...' requires literal \n\n (ngit's push-option parser converts them); ngit send --description requires $'...\n\n...' ANSI-C quoting since the shell passes the argument verbatim and does not interpret \n in double-quoted strings

v2.4.3

Choose a tag to compare

@github-actions github-actions released this 01 May 20:32
v2.4.3
e8c3c49

Fixed

  • when a repo has multiple nostr:// remotes sharing the same identifier, relays could return state events authored by maintainers of the other remote; without filtering, the newest event won regardless of author, pointing refs at the wrong commits; state event candidates in run_list are now filtered to maintainers of the current remote's repo announcement

v2.4.2

Choose a tag to compare

@github-actions github-actions released this 28 Apr 10:50
v2.4.2
59e467b

Fixed

  • when submitting a PR (via --force-pr or when the existing proposal is already a PR kind), repository GRASP servers were never tried when pushing proposal refs; a URL normalisation mismatch (repo_grasps holds normalised hostnames but the comparison was made against full clone URLs) meant the candidate server list was always empty, so every submission fell through to the fork-creation / personal GRASP server fallback path instead of pushing directly to the repository's own GRASP servers

v2.4.1

Choose a tag to compare

@github-actions github-actions released this 22 Apr 13:04
v2.4.1
875f4e0

Fixed

  • fatal errors during clone/fetch when an open PR's git data isn't available on the repository's specified git servers

v2.4.0

Choose a tag to compare

@github-actions github-actions released this 10 Apr 20:47
v2.4.0
205ca05

Added

  • git worktree support (a3b0bf6) - thanks to new contributor m0wer

Fixed

  • more robust patch parsing and gracefully handle errors (7a36aed, e1dd109, 6a2245d)
  • panic when cloning a bare nostr://npub/identifier URL with no relay hints (f3a6ae8)
  • repository identifiers containing reserved characters (e.g. spaces, emoji) are now percent-encoded in nostr:// clone URLs and GRASP HTTP paths, per NIP-34
  • gracefully handle errors identifying potential PR merges on push (3daf61e)