| Age | Commit message (Collapse) | Author |
|
Reorganize imports and fix formatting issues flagged by clippy and rustfmt.
|
|
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.
|
|
When a nostr:// remote exists, run git fetch instead of internal fetch
to populate remote tracking refs. Then checkout the remote branch with
proper upstream tracking so git pull works correctly.
|
|
- 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.
|
|
When user is the maintainer and runs ngit init without args, validate
against cached repo_ref before making network requests. This avoids
unnecessary relay timeouts when the error would be 'no arguments
specified, use --force'.
|
|
The list command is inherently interactive - it presents menus for
browsing and selecting proposals. Without interactive mode, all
choice() calls auto-select default index 0, causing the first
proposal to be checked out immediately without user input.
|
|
multi-input flag that inherits from the latest pushed announcement
event, defaulting to empty when no existing hashtags are found
|
|
alas an idea before its time has yet come.
|
|
Allow multiple values via repeated --relay flags
instead of the less intuitive plural --relays form.
|
|
Allow multiple values via repeated --grasp-server flags
instead of the less intuitive plural --grasp-servers form.
|
|
- 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.
|
|
Rewrite ngit send to support non-interactive mode:
- Add validation for required arguments (title/description)
- Add --force flag to bypass commit suitability checks
- Add --no-cover-letter flag to skip cover letter
- Improve error messages for missing required fields
- Update title/description/cover-letter logic for non-interactive mode
- Add comprehensive tests for non-interactive behavior
|
|
Complete rewrite of ngit init to support non-interactive mode by default.
Key changes:
- Implement hybrid validation (validate all args upfront, fail fast)
- Add --grasp-servers flag for specifying git servers
- Prefer --name over --identifier for better UX
- Add comprehensive validation with helpful error messages
- Support both clone and init-from-existing-repo workflows
- Add --force flag to bypass safety checks
- Update tests for new non-interactive behavior
- Add test utilities for non-interactive testing
|
|
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.
|
|
Add new 'ngit account create' subcommand to create nostr accounts.
This replaces the previous 'signup' command and supports both interactive
and non-interactive modes.
|
|
Update push operations to use non-interactive mode by default, removing
prompts that would block automated git operations.
|
|
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.
|
|
fix breaking changes
|
|
as its useful information
|
|
copy relay fetching approach to async and reporting
|
|
so it doesnt use the git_repo
|
|
so it shows a summary rather than a lot of lines of issues
|
|
also reduce the clutter in the cli output for grasp servers.
|
|
also fix the report so that we show nip10 style statuses too
|
|
to ensure we dont try and fallback to ssh
|
|
update patches ahead of wider upgrade. clippy required some autofixes
|
|
only the maintainers and author of a poorly formatted proposal need
to know it was submitted but cant be created as a PR branch
|
|
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.
|
|
fixes to change attempted in 4fc659074ec5ced3cc0727cf1f3e6af082a189cc
|
|
following its inclusion in the NIP-34 spec
|
|
so users can choose when there commits are too big or small instead
of relying on the 60kb rule
|
|
as it was only checking if tip is a commit thats present but a tip
could be an annotated tag
|
|
and fail more gracefully if refs cant be fetched, by continuing
to sync other refs
|
|
rather than just in the remote helper.
|
|
and include prompt about pushing understanding pushing directly to
git servers
|
|
list and allow selection / deselection of non-grasp servers when
at least one grasp servers is selected and a non grasp server is a
suggested default.
|
|
now we check and fetch them
|
|
when an existing origin exists and local branch is up-to-date
`git push` wont successfully publish state event and push refs to
other git servers listed.
we now publish the state event during this init function and use
sync to push all refs in state are to all git servers.
|
|
move the PR push code in 'ngit send' into lib.
reuse the non-interactive fallbacks in git-remote-nostr
|
|
to align more closely with githubs `refs/pull/*/head`
we can pretend that pr means both Patch Request and Pull Request
|
|
even if it is not on repository remotes, as it may have been pushed
to a user's git server instead
|
|
abstracted git remote helper fetch functions
added support to `ngit list` to fetch PR data and checkout as proposal
branch
|
|
we weren't correctly identifying valid nostr state refs
|
|
handle scenario when correct annotated tag is on a remote.
peel to tip commit doesnt give the correct oid so we must use the
annotated tag oid instead when comparing.
|
|
limit syncing to a single reference with this new parameter.
change instructions for out of sync remotes to use sync with this new
option.
|
|
This branch name cannot be attacked by brute forcing a
shorthand event id like refs/pr/<branch-name(<shorthand-event-id)
can.
|
|
here we can list Pull Requests whose data aren't on the repo relays
without causing `git clone nostr://` to fail.
we can also list proposals of all statuses so that can review
closed proposals.
|
|
we cannot list PRs under refs/heads/pr/* unless we are sure the oids
are accessable on a git server as it will cause `git clone` to fail.
we now only list PRs that are on accessable repo git servers under
refs/heads/pr/*.
we should be able to list them under under refs/pr/* as the clone
command only fetches refs in refs/heads so we will do this
seperately.
|
|
|
|
having implemented 3b5c48f5a2a4b9be5d14baa8f5e801fefd5c1166,
a ref pushed to refs/nostr/<event-id> on a github repo was accepted
but was not confirmed
|
|
to keep the user informed of whats happening / happend
|
|
attempt to use a range of protocols instead of unath http
|
|
to make it's purpose clearer
|
|
so its clear from the TUI what has just been sent
|
|
instead of relying on hardcoded grasp server options.
couldn't we look up those selected for other repos for the user
instead?
|
|
if use is maintainer, push PR to all repo git servers.
if user has a fork, push to all git servers it lists, and repo
grasp servers.
if user hasn't got a fork but has a user grasp list and pushing
push to repo grasp servers fails, create a personal-fork
automatically at each user grasp server and push there.
fallback to prompting user for either grasp servers or git server
with write permission.
if user provides grasp servers, suggesting adding to user preference
list.
|
|
allow specifying ref for pushing PR to custom clone url
|
|
if the repo doesnt list any grasp servers, or pushing to them fails
|
|
send as a PR if the commit would make patches that are too big for
nostr events.
send as a PR update if the proposal is PR.
send as a PR, revising a patch root, if patches would be too big.
in tests `get_pretend_proposal_root_event` has to be a actual proposal
with a tip, rather than just a cover letter, so we have replaced it.
|
|
for future use in `ngit send`
|
|
NIP-34 specifies patch revisions should have a `t` tag of
`root-revision` whereas we have been using `revision-root`.
this fixes it and and handles events created with the incorrect tag.
|
|
so that we can use it in `ngit send`
|
|
where just the nevent will do
|
|
as the function is too long
|
|
so we can use it in ngit as well as remote helper
|
|
required for rust-nostr v0.43 update
|
|
I have now replicated the issue discussed in the last commit by
overwriting my global git config item tag.gpgSign and setting
it back to false, which is default the default.
ngit was only supporting annotated tags and fiatjaf was pushing
a lightweight tag.
I'm confident that this will resolve the issue
|
|
fiatjaf reported panic:
```
<commit-id> can not be successfully peeled into a tag (git_object_t=4).
```
when making a tag and running `git push --tags`
I could not replicate but line it was coming from should use 'from'
rather than 'to'.
|
|
with nostr state. optionally use 'force' flag
|
|
to enable forthcoming ngit sync cmd
|
|
to enable forthcoming `ngit sync` cmd
|
|
and show a more helpful message when proposal can be checked out
using the remote
|
|
adjust the help text to reflect availablity of PR event for when a
patch is selected that doesnt list a parent commit id
|
|
using the recently abstracted `get_status` function
|
|
as these events use `c` instead of `commit`
|
|
for use by `ngit list`
|
|
as a temporary measure
|
|
when an upgrade to a pr is needed, dont also try and send patches
|
|
erorr if the pushed ref would produce a proposal with no patches, or
if the ref is in origin/<main-or-master>
|
|
Rename `params.fallback_relays` and `client.fallback_relays` to
`relay_default_set`. Rename `params.fallback_grasp_servers` to
`grasp_default_set`. This includes updating associated getters and
usages across the codebase.
|
|
so that they can be used as part of push and send
|
|
when a patch is upgraded to a pr, eg because new commits would be
too large to be additional patches, the patch receives a closed
staus and the new pr 'e' tags the original root patch.
we therefore need to inherit the new pr's status instead of using
the closed status.
the closed status was used so that clients don't have to support
pr revisions of patches, and still have a good UX.
|
|
instead of status events from any pubkey
|
|
issue a pull request update if pushing or force pushing
a pull request
issue a pull request with an e tag for original patch and close status
for the original patch when pushing or force pushing against a patch
when the new commits are too big to be iussed as patches
|
|
to reflect there new role of also pushing prs to git severs
|
|
but only for new proposals
|
|
a grasp server doesnt need to appear in repo announcement event
`blossoms` tag as blossom has been removed from the grasp spec
|
|
we try and get them from clone urls of repo and fallback to
those specified by contributor
|
|
remote will list the refs under `pr/*` namespace.
`ngit list` will display in the list of open / draft proposals.
it won't yet fetch the related oids to enable fetching or checking
out the branch.
|
|
to latest available and apply fmt fixes
|
|
to improve reliability
|
|
in function, params and variable names
|
|
includes a change to a git config itme name
|
|
in preparation for enforcing the inclusion of HEAD
|
|
based on jb55 trying to use this with damus
nostr:event1qvzqqqqqqypzqvhpsfmr23gwhv795lgjc8uw0v44z3pe4sg2vlh08k0an3wx3cj9qy88wumn8ghj7mn0wvhxcmmv9uq3jamnwvaz7tmjv4kxz7fwwdhx7un59eek7cmfv9kz7qpqec3c59c4yu4yrsa9fedu27rnygnemj2cfmumf6fw7385wfthg57slj72ux
|
|
as they are just noise
|
|
that of the current users pubkey. ngit will push to the git servers of
other maintainers anyway.
|
|
To ensure additional maintainers publish an annoucement event,
require it for them to push
|