diff options
| -rw-r--r-- | CHANGELOG.md | 9 | ||||
| -rw-r--r-- | Cargo.lock | 2 | ||||
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | flake.nix | 2 | ||||
| -rw-r--r-- | nix/module.nix | 2 |
5 files changed, 12 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a6498b..bf6f97e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md | |||
| @@ -7,16 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |||
| 7 | 7 | ||
| 8 | ## [Unreleased] | 8 | ## [Unreleased] |
| 9 | 9 | ||
| 10 | ## [1.0.2] - 2026-04-10 | ||
| 11 | |||
| 10 | ### Fixed | 12 | ### Fixed |
| 11 | 13 | ||
| 12 | - Replacement announcements (kind 30617) for a purgatory entry were being saved to the database immediately, bypassing the purgatory gate. When a second copy of the same announcement arrived (e.g. via sync from another relay) while the original was still in purgatory awaiting git data, the policy returned `Accept` instead of `AcceptPurgatory`, causing the event to be stored without the corresponding git data or state events ever arriving. The fix returns `AcceptPurgatory` for replacements of purgatory entries so the updated event is held in purgatory until git data arrives. | 14 | - Replacement announcements (kind 30617) for a purgatory entry were being saved to the database immediately, bypassing the purgatory gate. When a second copy of the same announcement arrived (e.g. via sync from another relay) while the original was still in purgatory awaiting git data, the policy returned `Accept` instead of `AcceptPurgatory`, causing the event to be stored without the corresponding git data or state events ever arriving. The fix returns `AcceptPurgatory` for replacements of purgatory entries so the updated event is held in purgatory until git data arrives. |
| 13 | 15 | ||
| 14 | - Repository identifiers containing characters that require percent-encoding in URLs (e.g. spaces, emoji) are now accepted and served correctly. NIP-01 places no restriction on `d` tag values and NIP-34 only recommends kebab-case without mandating it, so rejecting non-kebab identifiers was overly strict. Identifiers are stored verbatim on disk and percent-encoded when used in URLs, per the `nostr://` clone URL spec formalised in [NIP-34 PR #2312](https://github.com/nostr-protocol/nips/pull/2312) and the GRASP-01 HTTP path spec. The landing page clone URL now also correctly percent-encodes the identifier. | 16 | - Repository identifiers containing characters that require percent-encoding in URLs (e.g. spaces, emoji) are now accepted and served correctly. NIP-01 places no restriction on `d` tag values and NIP-34 only recommends kebab-case without mandating it, so rejecting non-kebab identifiers was overly strict. Identifiers are stored verbatim on disk and percent-encoded when used in URLs, per the `nostr://` clone URL spec formalised in [NIP-34 PR #2312](https://github.com/nostr-protocol/nips/pull/2312) and the GRASP-01 HTTP path spec. The landing page clone URL now also correctly percent-encodes the identifier. |
| 15 | 17 | ||
| 18 | - `--git-dir` is now passed as a global git option (before the subcommand) in `check_repo_empty`, fixing compatibility with git versions that require global options to precede the subcommand. | ||
| 19 | |||
| 16 | ### Changed | 20 | ### Changed |
| 17 | 21 | ||
| 18 | - Remove arbitrary default max connections limit; when `NGIT_MAX_CONNECTIONS` is unset the relay imposes no connection cap, deferring to OS fd limits and infrastructure controls | 22 | - Remove arbitrary default max connections limit; when `NGIT_MAX_CONNECTIONS` is unset the relay imposes no connection cap, deferring to OS fd limits and infrastructure controls |
| 19 | 23 | ||
| 24 | - Added `cleanup-empty-repos` subcommand to remove stale events for empty git repositories | ||
| 25 | |||
| 20 | ## [1.0.1] - 2026-02-27 | 26 | ## [1.0.1] - 2026-02-27 |
| 21 | 27 | ||
| 22 | ### Fixed | 28 | ### Fixed |
| @@ -31,6 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |||
| 31 | 37 | ||
| 32 | Initial release of ngit-grasp, a GRASP relay implementation in Rust. | 38 | Initial release of ngit-grasp, a GRASP relay implementation in Rust. |
| 33 | 39 | ||
| 34 | [unreleased]: https://gitworkshop.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit-grasp/compare/v1.0.1...HEAD | 40 | [unreleased]: https://gitworkshop.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit-grasp/compare/v1.0.2...HEAD |
| 41 | [1.0.2]: https://gitworkshop.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit-grasp/compare/v1.0.1...v1.0.2 | ||
| 35 | [1.0.1]: https://gitworkshop.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit-grasp/compare/v1.0.0...v1.0.1 | 42 | [1.0.1]: https://gitworkshop.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit-grasp/compare/v1.0.0...v1.0.1 |
| 36 | [1.0.0]: https://gitworkshop.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit-grasp/releases/tag/v1.0.0 | 43 | [1.0.0]: https://gitworkshop.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit-grasp/releases/tag/v1.0.0 |
| @@ -1370,7 +1370,7 @@ checksum = "f0efe882e02d206d8d279c20eb40e03baf7cb5136a1476dc084a324fbc3ec42d" | |||
| 1370 | 1370 | ||
| 1371 | [[package]] | 1371 | [[package]] |
| 1372 | name = "ngit-grasp" | 1372 | name = "ngit-grasp" |
| 1373 | version = "1.0.1" | 1373 | version = "1.0.2" |
| 1374 | dependencies = [ | 1374 | dependencies = [ |
| 1375 | "anyhow", | 1375 | "anyhow", |
| 1376 | "async-trait", | 1376 | "async-trait", |
| @@ -1,6 +1,6 @@ | |||
| 1 | [package] | 1 | [package] |
| 2 | name = "ngit-grasp" | 2 | name = "ngit-grasp" |
| 3 | version = "1.0.1" | 3 | version = "1.0.2" |
| 4 | edition = "2021" | 4 | edition = "2021" |
| 5 | authors = ["ngit-grasp contributors"] | 5 | authors = ["ngit-grasp contributors"] |
| 6 | license = "MIT" | 6 | license = "MIT" |
| @@ -36,7 +36,7 @@ | |||
| 36 | 36 | ||
| 37 | packages.default = pkgs.rustPlatform.buildRustPackage { | 37 | packages.default = pkgs.rustPlatform.buildRustPackage { |
| 38 | pname = "ngit-grasp"; | 38 | pname = "ngit-grasp"; |
| 39 | version = "0.1.0"; | 39 | version = "1.0.2"; |
| 40 | src = ./.; | 40 | src = ./.; |
| 41 | cargoLock = { | 41 | cargoLock = { |
| 42 | lockFile = ./Cargo.lock; | 42 | lockFile = ./Cargo.lock; |
diff --git a/nix/module.nix b/nix/module.nix index 9693358..d8d9e86 100644 --- a/nix/module.nix +++ b/nix/module.nix | |||
| @@ -6,7 +6,7 @@ let | |||
| 6 | # Build ngit-grasp package (shared across all instances) | 6 | # Build ngit-grasp package (shared across all instances) |
| 7 | ngit-grasp = pkgs.rustPlatform.buildRustPackage { | 7 | ngit-grasp = pkgs.rustPlatform.buildRustPackage { |
| 8 | pname = "ngit-grasp"; | 8 | pname = "ngit-grasp"; |
| 9 | version = "0.1.0"; | 9 | version = "1.0.2"; |
| 10 | src = ../.; | 10 | src = ../.; |
| 11 | cargoLock = { | 11 | cargoLock = { |
| 12 | lockFile = ../Cargo.lock; | 12 | lockFile = ../Cargo.lock; |