|
2 | 2 |
|
3 | 3 | ## Development |
4 | 4 |
|
| 5 | +## Version 0.2.2 |
| 6 | + |
| 7 | +### Added |
| 8 | + |
| 9 | +- A documentation section on setting up an ssh-agent, with per-platform |
| 10 | + instructions and a note on pinentry. When the terminal is raised for a |
| 11 | + passphrase and no agent is running, the app now says so once per session and |
| 12 | + links to it -- otherwise being asked on every single operation reads as the |
| 13 | + app being broken rather than as a machine that needs setting up. The Windows |
| 14 | + instructions call out that Git for Windows uses its own bundled `ssh`, which |
| 15 | + ignores the Windows agent service until `core.sshCommand` points at the system |
| 16 | + client. |
| 17 | +- A right-click menu in the terminal with Copy, Paste and Select all. Copying |
| 18 | + was previously reachable only through a keyboard shortcut that differs per |
| 19 | + platform (and where a bare Ctrl+C sends an interrupt instead), so getting text |
| 20 | + out was easy to miss. Select all also covers the case where a full-screen |
| 21 | + program has taken over the mouse and dragging cannot select. |
| 22 | + |
| 23 | +### Fixed |
| 24 | + |
| 25 | +- The terminal is raised for every prompt that needs an answer, not just the |
| 26 | + first one of a session, and the caret lands in it so the answer can be typed |
| 27 | + straight away instead of after a click nobody expects. Credential prompts over |
| 28 | + HTTPS (`Username for ...`, `Password for ...`) now count as prompts too; only |
| 29 | + an SSH passphrase and a host-key confirmation did before. |
| 30 | +- The update check skips a repository that was never cloned instead of fetching |
| 31 | + in a directory that does not exist. Such a repository has no local commit to |
| 32 | + compare against, so the check could only ever answer "no update" -- but it |
| 33 | + answered it by running git first, which reported a fatal error into the |
| 34 | + terminal on every startup, once per uncloned repository. |
| 35 | +- Windows: an SSH key passphrase can finally be entered, so cloning a repository |
| 36 | + that needs one works. Git used to run in a pseudo-terminal of its own there, |
| 37 | + and the passphrase prompt never surfaced in it -- git simply waited forever, |
| 38 | + printing nothing. It now runs in the interactive terminal the user is already |
| 39 | + looking at, exactly as it does on macOS and Linux: the prompt appears in the |
| 40 | + terminal and can be answered. Because Windows shells take no prompt hook, the |
| 41 | + command reports its exit code by printing a sentinel that is stripped from the |
| 42 | + output before it is shown. An ssh-agent is still used when one holds the key, |
| 43 | + in which case nothing is asked at all. |
| 44 | +- A git command that blocks on a prompt no longer wedges every later one. Git |
| 45 | + runs in the terminal through its own pseudo-terminal, and the app waited for |
| 46 | + it to exit without any bound -- so a clone stuck on an SSH key passphrase (a |
| 47 | + prompt that does not reach that pseudo-terminal on Windows) held the git queue |
| 48 | + for the rest of the session, and each following clone, sync or update check |
| 49 | + blocked silently before it could print anything. The wait is now bounded by |
| 50 | + SILENCE rather than runtime -- a large clone reports progress throughout, so |
| 51 | + it is never affected -- and a command that produces nothing at all while still |
| 52 | + running is stopped, with a message naming the likely cause. |
| 53 | +- Windows: the first repository operation that ran git in the terminal never |
| 54 | + finished, and every later one silently did nothing. After git exited, the app |
| 55 | + waited for the output reader to reach end-of-file while still holding the |
| 56 | + command's pseudo-terminal open -- and Windows keeps a copy of the write handle |
| 57 | + alive for exactly that long, so the end-of-file could never arrive. The call |
| 58 | + never returned, its slot in the git queue was never released, and each |
| 59 | + following clone, sync or update check blocked before it could print anything: |
| 60 | + the terminal accepted typing but showed no git, an update check sat unfinished, |
| 61 | + and adding a repository looked like nothing happened. The pseudo-terminal is |
| 62 | + now released before the wait, and the wait itself is bounded. |
| 63 | +- A terminal that cannot start now says so instead of staying blank. The |
| 64 | + renderer used to issue the start as a floating promise, so a failed shell |
| 65 | + spawn produced no error anywhere -- and because repository git only runs |
| 66 | + through the terminal while a session is live, the same dead session silently |
| 67 | + reverted clone/sync to a headless git that prints nothing. The failure is now |
| 68 | + shown in the terminal view, logged as a warning that explains git is still |
| 69 | + running without visible output, and reported by a new `terminal_status` |
| 70 | + command. Starting is retried up to three times before it is reported. |
| 71 | +- A pseudo-terminal backend that panics rather than returning an error -- Windows |
| 72 | + hosts older than Windows 10 1809, where `CreatePseudoConsole` is not exported -- |
| 73 | + no longer unwinds through the command's worker task into an opaque join error. |
| 74 | + The panic is caught and its message kept, so the terminal is unavailable with a |
| 75 | + readable reason instead of failing anonymously. |
| 76 | +- Git launch failures on the standalone-process path (Windows and unintegrated |
| 77 | + shells) are printed to the terminal instead of being swallowed into a bare |
| 78 | + exit code, and a `git` that cannot be spawned names the likely cause: it is not |
| 79 | + on the PATH this application inherited. Shell spawn errors likewise name the |
| 80 | + shell and working directory they tried. |
| 81 | + |
5 | 82 | ## Version 0.2.1 |
6 | 83 |
|
7 | 84 | ### Added |
|
0 commit comments