Releases: DanConwayDev/ngit-cli
Releases · DanConwayDev/ngit-cli
Release list
v2.6.3
v2.6.2
Fixed
git pushto 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
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
Added
ngit mergemerges a PR into the default branch as a no-ff merge commit (recording the PR nevent and author in the commit message) without pushingngit prandngit issuecommands that accept a PR/issue event ID now accept unique hex prefixes, with or without a leading#; ambiguous prefixes fail with the matching items listedngit init -u .../--u .../--upstream ...publishes the informational NIP-34utag for subordinate forks, andngit reponow displays/serializes existingumetadata without ever inventing it by defaultngit account connectas an alias forngit 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_MSoverridenostr.http-connect-timeout-ms/nostr.http-io-timeout-msfor 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 ngitwas failing to build due to an upstream dependency picking up an incompatiblegit2version- Pushing a tag through a
nostr://remote wrote a stray ref atrefs/remotes/<remote>/<tagname>— git's remote-tracking branch namespace — so tags appeared as remote branches ingit branch -r, IDE listings, completion, etc. The remote helper no longer writes a per-remote tracking ref for tags (the localrefs/tags/<name>is git's single source of truth), andngit syncsources tag push refspecs directly from the nostr state event oid. On the next push orngit 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-tonow 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
okbefore 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
okrequires 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
Changed
git push pr/<branch>andngit sendnow 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-serverorgit push -o git-server=<url>lets contributors target a custom git URL or GRASP server explicitly ngit initrepublishes 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--cleanwill remove themngit pr apply,ngit pr checkout, andngit pr listnow 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, andcheckoutfetched unconditionally even when the commit was already local — thanks to m0wer for the contributionngit pr checkout(and the interactive path inngit 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 inngit pr apply; this fallback is disabled for passivegit clone/git fetchpaths 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 stalemerge-basetag; the remote helper was forwarding the original stored tag instead of recomputing from the actual git topology; the merge-base is now always recomputed fromgit merge-basefor every push type ngit pr checkoutcorrectly checked out the PR as a local branch but left the working directory at its previous statengit pr checkout --forceon 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 applyingngit 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
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-serverto sign and publish an updated state event reflecting the server's commits; in non-interactive mode the update is auto-acceptednostr.trust-server-domainsgit config setting: semicolon-separated list of git-server hostnames thatngit syncautomatically 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, soget_commit_id_from_patchnow 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 incorrectmerge-basetag; the previous tip of the PR was used as the merge-base instead of the original branch divergence point; the fix reads themerge-basetag 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_patchinstead of crashing thegit-remote-nostrprocess with signal 11 (SIGSEGV); libgit2'sapply_to_treedereferences 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 sendand thepr/branch push path ingit-remote-nostrnow 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 --descriptionrequires$'...\n\n...'ANSI-C quoting since the shell passes the argument verbatim and does not interpret\nin double-quoted strings
v2.4.3
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 inrun_listare now filtered to maintainers of the current remote's repo announcement
v2.4.2
Fixed
- when submitting a PR (via
--force-pror when the existing proposal is already a PR kind), repository GRASP servers were never tried when pushing proposal refs; a URL normalisation mismatch (repo_graspsholds 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
Fixed
fatalerrors during clone/fetch when an open PR's git data isn't available on the repository's specified git servers
v2.4.0
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/identifierURL 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)