diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-03-05 13:03:50 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-03-05 13:03:50 +0000 |
| commit | f3fcf863aae000964753f574b00e9fb9f5fcd452 (patch) | |
| tree | 522e1cff8e0b8ab9fcabcf1bc6d229076891542e /src/bin/ngit/main.rs | |
| parent | ad6c39abdc35603f58e9b71993b5632c976deac1 (diff) | |
feat(subject): add pr/issue set-subject via NIP-32 kind-1985 labels
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
Diffstat (limited to 'src/bin/ngit/main.rs')
| -rw-r--r-- | src/bin/ngit/main.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/bin/ngit/main.rs b/src/bin/ngit/main.rs index 3686011..1dbf020 100644 --- a/src/bin/ngit/main.rs +++ b/src/bin/ngit/main.rs | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | #![cfg_attr(not(test), warn(clippy::expect_used))] | 3 | #![cfg_attr(not(test), warn(clippy::expect_used))] |
| 4 | 4 | ||
| 5 | use clap::Parser; | 5 | use clap::Parser; |
| 6 | use cli::{AccountCommands, CUSTOMISE_TEMPLATE, Cli, Commands, IssueCommands, PrCommands}; | 6 | use cli::{AccountCommands, Cli, Commands, IssueCommands, PrCommands, CUSTOMISE_TEMPLATE}; |
| 7 | 7 | ||
| 8 | mod cli; | 8 | mod cli; |
| 9 | use ngit::{ | 9 | use ngit::{ |
| @@ -138,6 +138,11 @@ async fn main() { | |||
| 138 | labels, | 138 | labels, |
| 139 | offline, | 139 | offline, |
| 140 | } => sub_commands::label::launch_pr_label(id, labels, *offline).await, | 140 | } => sub_commands::label::launch_pr_label(id, labels, *offline).await, |
| 141 | PrCommands::SetSubject { | ||
| 142 | id, | ||
| 143 | subject, | ||
| 144 | offline, | ||
| 145 | } => sub_commands::set_subject::launch_pr_set_subject(id, subject, *offline).await, | ||
| 141 | }, | 146 | }, |
| 142 | Commands::Issue(args) => match &args.issue_command { | 147 | Commands::Issue(args) => match &args.issue_command { |
| 143 | IssueCommands::List { | 148 | IssueCommands::List { |
| @@ -210,6 +215,13 @@ async fn main() { | |||
| 210 | labels, | 215 | labels, |
| 211 | offline, | 216 | offline, |
| 212 | } => sub_commands::label::launch_issue_label(id, labels, *offline).await, | 217 | } => sub_commands::label::launch_issue_label(id, labels, *offline).await, |
| 218 | IssueCommands::SetSubject { | ||
| 219 | id, | ||
| 220 | subject, | ||
| 221 | offline, | ||
| 222 | } => { | ||
| 223 | sub_commands::set_subject::launch_issue_set_subject(id, subject, *offline).await | ||
| 224 | } | ||
| 213 | }, | 225 | }, |
| 214 | Commands::Sync(args) => sub_commands::sync::launch(args).await, | 226 | Commands::Sync(args) => sub_commands::sync::launch(args).await, |
| 215 | } | 227 | } |