| Age | Commit message (Collapse) | Author |
|
checkout_patch() previously re-applied the patch chain whenever the local
branch tip didn't match the published tip, silently overwriting local
amendments and rebased revisions without warning.
Now detects the relationship between local and published tips:
- up to date: check out as-is
- behind (local is ancestor of published): fast-forward, no flag needed
- local commits on top (published is ancestor of local): check out as-is
- diverged (neither ancestor): bail with guidance, --force to overwrite
- published tip not found locally and branch exists: same as diverged
Also adds --force flag to `ngit pr checkout` to explicitly opt in to
overwriting a diverged branch, covering both local amendments and
author force-pushes.
Bug discovered during test implementation in tests/ngit_pr_checkout.rs.
|
|
--comments was supported by 'issue view' but not 'issue list', making
'ngit issue list <id> --comments' fail while the equivalent 'view'
command worked fine.
|
|
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
|
|
- JSON output fields renamed from title to subject in pr list/view
and issue list/view
- Printed view output changed from Title: to Subject:
- ngit issue create --subject (alias --title)
- ngit send --subject (alias --title)
- Error messages and interactive prompts updated to match
|
|
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
|
|
All status transitions (pr close/reopen/ready/draft, issue close/reopen/
resolved) now accept an optional --reason flag stored in the event content.
|
|
Add `ngit pr draft <id>` to convert a PR back to draft (kind-1632).
Add `ngit issue resolved <id> [--reason <text>]` to mark an issue as
fixed (kind-1631 GitStatusApplied), distinct from close which signals
wontfix/duplicate/invalid.
Add `--reason <text>` to `ngit issue close` — stored in event content.
Also fix success/error message wording in pr_status and issue_status to
use consistent past-tense action strings.
|
|
Publishes a NIP-32 kind-1985 label event referencing the target issue or
PR. Only the event author or a repository maintainer may apply labels.
Duplicate labels (already present via t-tags or prior kind-1985 events)
are silently skipped. The new event is saved to the local cache before
broadcasting so subsequent reads reflect the change immediately.
CLI:
ngit issue label <id> --label <L> [--label <L>...]
ngit pr label <id> --label <L> [--label <L>...]
|
|
Shows currently logged-in account(s) with name and npub. When both a
local (repo-scoped) and global account are configured, displays both
with local marked as active. Supports --json (returns local, global,
and active objects each with name, npub, nip05, scope) and --offline
(reads from cache only, no network). Fixes doc_markdown clippy warning
in cli.rs.
|
|
Outputs {"is_nostr_repo": false} when not in a nostr repository, or
full structured JSON (name, identifier, description, nostr_url,
coordinate, maintainers, grasp_servers, git_servers, relays, hashtags)
when it is. Always exits 0. Also adds --title as an alias for --name
on `ngit init`.
|
|
- rename --hashtag (comma-separated) to --label (repeatable) on issue list,
matching the --label flag already used on issue create
- add --label filter to pr list with the same OR semantics (matching GitHub)
- display labels column in pr list table and Labels: line in pr view
- include labels array in all JSON outputs (list and view for both issue and pr)
- rename internal 'hashtags' -> 'labels' throughout issue_list.rs and list.rs
|
|
- issue view and pr view now show only a comment count by default
- pass --comments to include the full thread
- JSON output always includes comment_count; comments array only with --comments
- each comment in the thread includes reply_to (null for top-level, parent
comment id for replies)
- human-readable view shows a dim '↳ reply to <short-id>' line on replies
|
|
- Add missing P and p tags (root and parent author pubkeys)
- Fix E tag 4th element to be root pubkey (was empty string)
- Fix e tag 4th element to be parent pubkey (was "reply", a NIP-10 convention)
- Add --reply-to <ID|nevent> flag to both issue and PR comment commands
- When --reply-to is set, look up the parent comment from cache and use it
as the parent scope (e/k/p); root scope (E/K/P) always stays the issue/PR
- When --reply-to is omitted, parent == root (existing top-level behaviour)
|
|
Introduce ngit pr subcommand group (list, view, checkout, apply, send,
close, reopen, ready, comment, merge) replacing the former top-level
ngit list/checkout/apply commands. ngit send is kept at the top level.
Expand ngit issue with view, create, close, reopen, comment subcommands.
Status changes (close/reopen/ready) are gated to the PR/issue author or
a repository maintainer. ngit pr merge is maintainer-only and publishes
a GitStatusApplied event immediately after the git merge.
|
|
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
|
|
Adds a git config key nostr.repo-relay-only that, when set to true, causes
nostr events to be sent only to the repository's own relays, skipping the
user's personal write relays and default/blaster relays. Useful for
repositories that should not broadcast to the maintainer's personal relay set.
Set persistently via \`git config nostr.repo-relay-only true\` or in one step
with \`ngit init --repo-relay-only\`.
|
|
- make repo name bold yellow as a title; section headings bold dim
- add dim horizontal rules above and below the name/description block
- move earliest unique commit to the bottom (after additional relays)
- add --offline flag to skip network fetch and use local cache only
|
|
- `ngit repo` (no subcommand): show repository info including maintainer
tree, per-maintainer infrastructure attribution, and a note explaining
the union-vs-personal field model and recursive maintainer sets
- `ngit repo init`: alias for `ngit init`
- `ngit repo edit`: same as init but signals intent to update an existing
repository announcement
- `ngit repo accept`: scoped command for co-maintainers to publish their
announcement; errors with clear messages for all other states (trusted
maintainer, already accepted, not invited, no repo found)
|
|
Adds value_name attribute to the id argument so the usage line reads
`<ID|nevent>` instead of `<ID>`, making nevent bech32 support discoverable
without reading --help.
|
|
- mention remote helper in main help so users know native git commands work
- fix inconsistent indentation in main help template
- update init about to lead with 'publish a repository'
- add 'create' to account subcommand about
- add long_about to send referencing simpler pr/ push flow
- update list about to remove legacy interactive-mode language
- add long_about to checkout/apply pointing to ngit list
|
|
Git push-options are line-based so literal newlines cannot be sent.
Users can now write the two-character sequence \n which is decoded
into real newlines before publishing. Use \\n for a literal backslash-n.
Includes unit tests, integration test, help text, and changelog entry.
|
|
Skip network fetch when --offline is set, using only local cache
|
|
Adds a global --verbose/-v flag that sets NGIT_VERBOSE environment variable.
Also sets NGIT_VERBOSE automatically when NGIT_TEST is set.
|
|
- Add --status flag for filtering (default: open,draft)
- Add --json flag for JSON output
- Add optional <id> argument for showing proposal details
- Rename interactive logic to launch_interactive()
- Non-interactive mode outputs table format by default
- Use -i flag for interactive mode
Phase 3 of non-interactive ngit list implementation.
|
|
Adds a new 'ngit apply <event-id>' command that applies proposal patches
to the current branch. Supports --stdout flag to output patches for
piping to git am.
Phase 2 of non-interactive ngit list implementation.
|
|
Adds a new 'ngit checkout <event-id|nevent>' command that creates or
updates a proposal branch and checks it out. Supports both PRs and
patches with parent-commit references.
Phase 1 of non-interactive ngit list implementation.
|
|
- 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.
|
|
Add --defaults, --interactive, and --force flags to support non-interactive
operation. Non-interactive mode is now the default behavior, with interactive
mode enabled via the -i/--interactive flag.
Also add CliError handling in main() to support styled error output from
subcommands.
|
|
with nostr state. optionally use 'force' flag
|
|
to enable forthcoming `ngit sync` cmd
|
|
includes a change to a git config itme name
|
|
make the default set of ngit-relays configurable
|
|
of how to customise ngit via git config items
|
|
update the rust nightly `fmt` overlay which needs to be pinned
to a specific version (this case by date)
update formatting in main files via `cargo fmt`
|
|
as it was spelt with 1 'n'
|
|
and add `ngit init` to description / help content
|
|
as it makes the help harder to read and saving credentials
is much better
|
|
to add clarity and use PR instead of proposal
|
|
to simplify the api and encourage use of the git remote helper
|
|
to add clarity and not suggest cli args should be used
|
|
move login, logout export-keys commands to sub commands under account
|
|
rather than using `ngit login` which is less intuative
|
|
as part of the easy on-boaridng flow
|
|
* simplify login menu, making it more accessable to newcomers and
easier to select remote signer options
* enable `ngit login` to work from anywhere (not just a git repo)
* assume fresh login details saved to global git config but fallback
to local repository
* maintain local repository login via `ngit login --local`
* maintain login via CLI arguments eg `ngit send --nsec nsec123`
* nudge users to remember nsec when pasting in ncryptsec for a
better UX, whilst maintaining the option to be prompted for
password everytime
* create placeholder menu items for help menu and create account
|
|
This reverts commit 43b5e9b38bf5dcfbac85637a2d3efc69ddfe77ac.
|
|
simplify api to encougage use of the git plugin
|
|
the make the code more readable
this commit just moves the files, the next commit should fix the imports
|