upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/bin/ngit
AgeCommit message (Collapse)Author
2026-02-12feat: add ngit apply command for non-interactive patch applicationDanConwayDev
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.
2026-02-12feat: add ngit checkout command for non-interactive proposal checkoutDanConwayDev
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.
2026-02-12fix: fail fast in ngit init before network fetchDanConwayDev
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'.
2026-02-11fix: force interactive mode for list commandDanConwayDev
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.
2026-02-11add --hashtag flag to ngit initDanConwayDev
multi-input flag that inherits from the latest pushed announcement event, defaulting to empty when no existing hashtags are found
2026-02-11remove --blossoms from ngit initDanConwayDev
alas an idea before its time has yet come.
2026-02-11rename --relays flag to --relayDanConwayDev
Allow multiple values via repeated --relay flags instead of the less intuitive plural --relays form.
2026-02-11rename --grasp-servers flag to --grasp-serverDanConwayDev
Allow multiple values via repeated --grasp-server flags instead of the less intuitive plural --grasp-servers form.
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-10feat: update ngit send for non-interactive modeDanConwayDev
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
2026-02-10feat: update ngit init for non-interactive modeDanConwayDev
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
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 ngit account create commandDanConwayDev
Add new 'ngit account create' subcommand to create nostr accounts. This replaces the previous 'signup' command and supports both interactive and non-interactive modes.
2026-02-10feat: add global CLI flags for non-interactive modeDanConwayDev
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.
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: cli output line deletion during fetchDanConwayDev
also reduce the clutter in the cli output for grasp servers.
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-10-10feat(send): add `force-pr` or `force-patch` flagsDanConwayDev
so users can choose when there commits are too big or small instead of relying on the 60kb rule
2025-09-12fix(sync): dont fetch tags available locallyDanConwayDev
as it was only checking if tip is a commit thats present but a tip could be an annotated tag
2025-09-11fix(sync): fetch refs missing locally before syncDanConwayDev
and fail more gracefully if refs cant be fetched, by continuing to sync other refs
2025-09-11fix: ngit binary enforce git server timeoutDanConwayDev
rather than just in the remote helper.
2025-09-11fix(init): clone url include grasp serversDanConwayDev
and include prompt about pushing understanding pushing directly to git servers
2025-09-11fix(init): simple mode non-grasp servers selectionDanConwayDev
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.
2025-09-10fix(init): when local repo missing origin refsDanConwayDev
now we check and fetch them
2025-09-10fix(init): when existing origin matches tipDanConwayDev
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.
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-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(sync): include all valid nostr stateDanConwayDev
we weren't correctly identifying valid nostr state refs
2025-08-18feat(sync): add `ref-name` param to limit syncDanConwayDev
limit syncing to a single reference with this new parameter. change instructions for out of sync remotes to use sync with this new option.
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): push PR refs to non-grasp serversDanConwayDev
attempt to use a range of protocols instead of unath http
2025-08-07refactor: rename fn `is_grasp_server_in_list`DanConwayDev
to make it's purpose clearer
2025-08-07fix(send): print event description before publishDanConwayDev
so its clear from the TUI what has just been sent
2025-08-07feat(init): use user grasp list for defaultsDanConwayDev
instead of relying on hardcoded grasp server options. couldn't we look up those selected for other repos for the user instead?
2025-08-07feat(send): PR fallback to user / custom graspDanConwayDev
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.
2025-08-06feat(send): custom ref for PR clone urlDanConwayDev
allow specifying ref for pushing PR to custom clone url
2025-08-05feat(send): push PR to custom clone urlDanConwayDev
if the repo doesnt list any grasp servers, or pushing to them fails
2025-08-05feat(send): support PR and PR update eventsDanConwayDev
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.
2025-08-01fix: use new gitworkshop.dev url formatDanConwayDev
where just the nevent will do
2025-08-01refactor(send): abstract proposal commit checksDanConwayDev
as the function is too long
2025-07-31fix: mention marker ~> q tag NIP-10 updateDanConwayDev
required for rust-nostr v0.43 update
2025-07-25feat(sync): add cmd to sync git serversDanConwayDev
with nostr state. optionally use 'force' flag
2025-07-25refactor: move `utils` and `list` helpers to libDanConwayDev
to enable forthcoming `ngit sync` cmd
2025-07-25fix(list): improve pr unsupport textDanConwayDev
and show a more helpful message when proposal can be checked out using the remote
2025-07-25fix: update help text for patches without parentDanConwayDev
adjust the help text to reflect availablity of PR event for when a patch is selected that doesnt list a parent commit id
2025-07-25feat(list): fix status for pr as patch revisionDanConwayDev
using the recently abstracted `get_status` function
2025-07-25refactor: abstract `get_status`DanConwayDev
for use by `ngit list`
2025-07-23refactor: Rename fallback relays and grasp serversDanConwayDev
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.
2025-07-23refactor: add fallback grasp servers to clientDanConwayDev
so that they can be used as part of push and send
2025-07-22fix: remove blossom from grasp server detectionDanConwayDev
a grasp server doesnt need to appear in repo announcement event `blossoms` tag as blossom has been removed from the grasp spec
2025-07-18feat(pr): fetch pr and pr updates from clone urlsDanConwayDev
we try and get them from clone urls of repo and fallback to those specified by contributor
2025-07-18feat(pr): list PR and PR updatesDanConwayDev
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.
2025-07-16chore: bump nightly rustfmtDanConwayDev
to latest available and apply fmt fixes
2025-06-19refactor: rename ngit_relay to graspDanConwayDev
in function, params and variable names
2025-06-19rename ngit-relay to graspDanConwayDev
includes a change to a git config itme name
2025-05-31feat(init): only use one ngit-relay git server urlDanConwayDev
that of the current users pubkey. ngit will push to the git servers of other maintainers anyway.
2025-05-31feat(push): prevent push if no ann eventDanConwayDev
To ensure additional maintainers publish an annoucement event, require it for them to push
2025-05-24feat(init): make default ngit-relays configurableDanConwayDev
make the default set of ngit-relays configurable
2025-05-23feat(init): use dir name as default repo nameDanConwayDev
if you haven't cloned an existing nostr repo
2025-05-23feat(account): export npubDanConwayDev
allow exporting npub as well as nsec
2025-05-23fix(init): dont default to user read relay listDanConwayDev
as it usually full of inappropriate relays like purplepages.
2025-05-23fix(init): additional relays dont replace ngit-relaysDanConwayDev
instead of replacing ngit-relays with additoinal relays , suppliment
2025-05-23fix(init): improve cli outputDanConwayDev
for git push, a wait longer to allow ngit-relays to create repo
2025-05-23feat: only try http(s) for ngit-relaysDanConwayDev
otherwise it tries all the protocols and reprots on each
2025-05-23fix(init): ngit-relay usage detectionDanConwayDev
make sure blossom server is also present
2025-05-23fix: remove blossom url trailing slashDanConwayDev
when creating announcment with `ngit init`
2025-05-22refactor: cargo fmtDanConwayDev
should have done it at 4dc5d0c9fb170981cf4fade5558d7cc8da404aa3
2025-05-22feat(init): add blossomDanConwayDev
add a blossom tag to the repo announcement
2025-05-22feat(init): overhaul & simplify with ngit-relaysDanConwayDev
introduce ngit-relays as a way of setting git servers and relays at the same time using a standard for specific repo locations: https://<domain-port-path>/<npub>/<identifer>.git add simple and advanced modes. prompt less. eg always set remote origin to nostr url. automatically push main or master branch.
2025-05-21fix: remove accidental printlnDanConwayDev
the details are included as default options
2025-05-21feat(init): dont ask about state unless neededDanConwayDev
reduce the scenarios where we confuse users about state
2025-05-21feat: add --customize flag for instructionsDanConwayDev
of how to customise ngit via git config items
2025-05-21feat: add support for default relay overridesDanConwayDev
via git config so they can be overwritten locally and globally
2025-05-05chore: nix flake updateDanConwayDev
update nix dependancies to latest version using default update options run `cargo clippy --fix` and `cargo fmt` to fix new clippy errors
2025-04-28fix(init): replace legacy gitworkshop urlDanConwayDev
with new format. but both default option and when previous web string used legacy format
2025-04-01chore: bump rust-nostr v0.37 ~> v0.40DanConwayDev
and fix all of the breaking changes
2024-12-20refactor: branch_name handlingDanConwayDev
improve clarity by renaming variables and methods defend against `branch-name` tag with an unsafe name
2024-12-20refactor: use nostr url from repo_refDanConwayDev
simplify to allow the removal of warning: `#[allow(clippy::too_many_arguments)]`
2024-12-16feat(init): default to nip05 git nostr urlLaszlo Megyer
If the user has NIP-05 set up in profile, and it resolves at the time of running `ngit init`, NIP-05 will be used in the nostr remote url.
2024-12-16chore: bump nix flake rust nightly `fmt` overlayDanConwayDev
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`
2024-12-16chore: nix flake updateDanConwayDev
update nix dependancies to latest version using default update options fix warning related to idomatic patterns
2024-12-12fix: defend against empty`tags`DanConwayDev
prevent a panic when tags are of an unexpect length
2024-12-12feat(NostrUrlDecode): add nip05 address supportDanConwayDev
enable nostr git url format alongside and format Merge branch 'pr/nip05-lez(ff1845c0)'
2024-12-10fix(nostr_url): use nip05 in nostr url if cachedDanConwayDev
prioritise using nip05 nostr url format when the nip05, public key mapping is stored in the (usually local) git config.
2024-12-10feat(NostrUrlDecoded) add nip05 supportDanConwayDev
replace `NostrUrlDecoded::from_str` with `NostrUrlDecoded::parse_and_resolve` store nip05 pubkey mapping in git cache
2024-12-09fix: fetch user relays for `send`,`push` & `init`DanConwayDev
get the latest user relay list before pushing patches and repo announcement events
2024-12-05fix: `ngit`validate repo address existsDanConwayDev
when nostr address is unknown and user is prompted, validate that a the entered repo exists (there are events related to it) before proceeding
2024-12-04fix: `ngit` load correct repo addressDanConwayDev
git-remote-nostr is always called with a nostr remote that specifies a single repository coordinate whereas `ngit` commands need to discover this. this change moves from getting this value from the following places in priority order: 1. git config item `nostr.repo` 2. first nostr remote discovered 2. maintainers.yaml 3. prompt the user to: 1. nostr remote - if multiple, prompt the user to select 2. git config item `nostr.repo` 3. maintainers.yaml - removing the legacy format 4. prompt the user - now with support for nostr remote format
2024-12-03refactor: limit fetch to 1 trusted coordinateDanConwayDev
previously fetch supported fetching multiple trusted coordinates at once. The additional complexity trade off isn't worth it. It will still fetch events related to the coordinates of maintainers that the trusted maintainer lists. A scenario where there might be multiple trusted coordinates is where a large repo is split into multiple nostr repos to manage pull requests and issues in seperate sub-units. I might therefore have different remotes that target different identifiers. There also might be different set of maintainers groups that are have different views on the latest state of the same codebase and they haven't split off into using different identifiers. Its simplier ngit to fetch these different nostr repos independantly when requested. git-remote-nostr will do this automatically as it works through remotes but for ngit cmds a further change is required so `get_repo_coordinates` and `try_and_get_repo_coordinates` prompts to select the desired one.
2024-12-02feat(init): improve guidance copyDanConwayDev
add a "maintainers.yaml" title to prevent a wall of unbroken text
2024-11-29feat(init): set remote `origin`DanConwayDev
check whether remote `origin` is nostr url and if not attempt to set it.
2024-11-29fix: spelling of 'beginning'DanConwayDev
as it was spelt with 1 'n'
2024-11-28fix(init): dont default git_server to nostr urlDanConwayDev
if nostr added as origin remote before repo announcement sent
2024-11-28feat(init): don't create maintainers.yamlDanConwayDev
because feedback is that its too confusing. mot removing it for existing projects that use it