Commit 7bebed0
committed
response: add Ok/Cancel factories and wire quit=1
When a provider can produce a credential it returns one. When it
deliberately can't (the user closed an auth prompt, no eligible
account was found, etc.) it currently has to throw, which routes
through the generic top-level exception handler and surfaces as
"fatal: ..." on stderr with exit -1. That conflates "the provider
decided not to authenticate" with "something went unexpectedly
wrong", and forces every "no credential" path through an
exception.
Give providers a non-exceptional way to express both outcomes:
* GitResponse.Ok(credential) -- successful response; same shape as
the existing public constructor, just named for the intent.
* GitResponse.Cancel() -- cancellation response; carries no
credential and tells the command layer to emit `quit=1` on
standard output, which is the Git credential helper protocol's
signal to abort the credential acquisition pipeline. Git
responds by terminating the operation immediately, rather than
falling back to an interactive terminal prompt that would just
re-ask the user who already cancelled in a GUI dialog.
Enforce the invariant in GitResponse that cancelled responses
cannot carry a credential and that non-cancelled responses must.
The existing 1-arg constructor is retained as an alias for Ok so
in-tree providers keep compiling; migrating them to the factories
is the next commit.
Exit-code plumbing is deliberately not touched: `quit=1` is the
in-band protocol signal that the protocol actually defines for
this case, and Git's `die()` on receiving it makes the helper's
exit code irrelevant. Reserving non-zero exit for genuinely
unexpected internal errors (which already throw and route through
Application.OnException) keeps the two channels semantically
distinct.
Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
Assisted-by: Claude Opus 4.71 parent 2eb59c9 commit 7bebed0
4 files changed
Lines changed: 150 additions & 12 deletions
File tree
- src
- Core.Tests
- Commands
- Core
- Commands
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
121 | 121 | | |
122 | 122 | | |
123 | 123 | | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
124 | 149 | | |
125 | 150 | | |
126 | 151 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
55 | 88 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
22 | 36 | | |
23 | 37 | | |
24 | 38 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
18 | 15 | | |
19 | 16 | | |
20 | | - | |
21 | | - | |
22 | | - | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
23 | 37 | | |
24 | 38 | | |
25 | 39 | | |
26 | 40 | | |
27 | | - | |
| 41 | + | |
28 | 42 | | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
29 | 57 | | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
30 | 68 | | |
31 | 69 | | |
32 | 70 | | |
33 | | - | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
34 | 93 | | |
35 | 94 | | |
36 | 95 | | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
37 | 103 | | |
38 | 104 | | |
39 | 105 | | |
40 | 106 | | |
41 | 107 | | |
42 | 108 | | |
43 | | - | |
| 109 | + | |
44 | 110 | | |
45 | 111 | | |
46 | 112 | | |
| |||
0 commit comments