The C API is assumed to be single-threaded per VT instance.
Additionally, using fully-threaded I/O instances registers signal
handlers, and would do a pair of registrations once per instance, which
could easily get out of hand (and is not really what we intend anyway).
init_single_threaded does not register signal handlers, so it does not
have this issue, and matches the execution model of the C VT API
(single-threaded/not thread-safe within a single VT instance).
This also fixes an initialization issue with the threaded I/O instance
in general (needs allocation as the memory location would have gone out
of scope before).
- benchmark: avoid buffers to avoid a memcpy
- build: keep frame pointers on macOS. There was some debug changes from
Zig 0.15 and this helps. Also, Apple actually requires/expects x29 to
always be a frame pointer.
- build/macos: force libSystem symbols instead of compiler-rt
- global: add InitOpts.tool so that ghostty-gen/bench can parse their
own actions in `+action`
- quirks: provide our own vectorized memset. see the comment for more
details why.
- synthetic: fix UB by accessing global.io before it was initialized
- terminal/hash_map: force inline for unique repr types. Zig 0.15
inlined and 0.16 doesn't, measured a huge slowdown in hyperlink
benchmarks.
- terminal: add explicit `@Vector` usage for storing a run of identical cells
as well as for scanning printable cells. This auto-vectorized in Zig
0.15 but not in Zig 0.16. This produces the same assembly.
- unicode: properties and LUT need power-of-two backing integer to avoid
bad LLVM codegen
This commit represents the majority of the work necessary to upgrade
Ghostty to use Zig 0.16.0.
Key parts:
* In addition to its previous responsibilities, the global state now
houses state for global I/O implementations and the process
environment. It is now also utilized in the main application along
with the C library. Where necessary, global state is isolated from key
parts of the implementation (e.g., in libghostty subsystems), and it's
expected that this list will grow.
* We currently manage our own C translation layer where necessary. In
these cases, cImport has been removed in favor of the new external
translate-c package. Due to fixes that have needed be made to properly
translate the dependencies that were swapped out, as mentioned, we
have had to backport fixes from the current translate-c package (and
the upstream Arocc dependency). We will host this ourselves until Zig
0.17.0 is released with these fixes.
* Where necessary (only a small number of cases), some stdlib code from
0.15.2 (and even from 0.17.0) has been taken, adopted, and vendored in
lib/compat.
Co-authored-by: Leah Amelia Chen <hi@pluie.me>
Re: #13160 (related but not that issue)
PageList eraseRow and eraseRowBounded have the same issue previously
fixed for cursorScrollAbove: when shifting rows up across a page
boundary, the top row of the next page is cloned into the last row of
the previous page, and that clone can fail if the destination page lacks
capacity for the row's managed memory.
Handle the errors the same way the other cross-page copies do: increase
the destination page capacity for the dimension that ran out and retry
the row copy.
This type of logic was repeated EVERYWHERE so I extracted this into a
helper in PageList and Screen. They're slightly different due to the
extra accounting that Screen has to do for the cursor.
Don't know of any scenario this actually happened in the real world but
it was trivially reproducible with tests.
Re: #13160 (related but not that issue)
PageList eraseRow and eraseRowBounded have the same issue previously
fixed for cursorScrollAbove: when shifting rows up across a page boundary,
the top row of the next page is cloned into the last row of the
previous page, and that clone can fail if the destination page lacks
capacity for the row's managed memory.
Handle the errors the same way the other cross-page copies do:
increase the destination page capacity for the dimension that ran
out and retry the row copy.
This type of logic was repeated EVERYWHERE so I extracted this into a
helper in PageList and Screen. They're slightly different due to the extra
accounting that Screen has to do for the cursor.
Don't know of any scenario this actually happened in the real world but
it was trivially reproducible with tests.
Fixes https://github.com/ghostty-org/ghostty/issues/13390
Technically it would be safe to remove `#available(macOS 27, *)` check,
but I haven't tested all the os versions, so I kept it there.
### AI Disclosure
No AI is used for this one.
Kitty 0.48 added support for usage hints in the image protocol,
specifically for marking images as "transient", meaning that they should
be prioritized for eviction if there is memory pressure.
https://sw.kovidgoyal.net/kitty/graphics-protocol/#image-usage-hints
Also changed the eviction algorithm to use an allocated array for
organizing the images to be evicted rather than using an ArrayList to
minimize the number of allocations made (no real memory savings though).
Re: #13160
When cursorScrollAbove rotates rows across a page boundary, the last row
of the previous page is cloned into the destination page. That can cause
capacity failures we didn't previously handle.
The error propagated out of the operation after rows had already been
rotated, leaving the page list half-mutated. Subsequent operations on
the corrupted state can cause crashes since the state was incoherent.
Handle these errors the same way insertLines and deleteLines already do
for their cross-page copies: increase the destination page capacity for
the dimension that ran out and retry the row copy.
Re: #13160
When cursorScrollAbove rotates rows across a page boundary, the last
row of the previous page is cloned into the destination page. That can
cause capacity failures we didn't previously handle.
The error propagated out of the operation after rows had already been rotated,
leaving the page list half-mutated. Subsequent operations on the corrupted state
can cause crashes since the state was incoherent.
Handle these errors the same way insertLines and deleteLines already
do for their cross-page copies: increase the destination page capacity
for the dimension that ran out and retry the row copy.
Kitty 0.48 added support for usage hints in the image protocol,
specifically for marking images as "transient", meaning that they
should be prioritized for eviction if there is memory pressure.
https://sw.kovidgoyal.net/kitty/graphics-protocol/#image-usage-hints
Also changed the eviction algorithm to use an allocated array for
organizing the images to be evicted rather than using an ArrayList to
minimize the number of allocations made (no real memory savings though).
`ext-background-effect-v1` is finally seeing major adoption throughout
KWin, Mutter, cosmic-comp, Niri, etc. and we should update our comments
on that.
`ext-background-effect-v1` is finally seeing major adoption throughout
KWin, Mutter, cosmic-comp, Niri, etc. and we should update our comments
on that.
Cursor defaults were duplicated across stream handlers and it was a
pretty significant amount of simple and yet non-trivial logic to
understand.
Store these on Terminal itself and have methods to route things like
DECSCUSR through for consistent behaviors.
No AI usage here.
Cursor defaults were duplicated across stream handlers and it was a
pretty significant amount of simple and yet non-trivial logic to
understand.
Store these on Terminal itself and have methods to route things like
DECSCUSR through for consistent behaviors.
The libghostty-vt stream is made to be infallible: in the case of any
error it just logs and moves on. That's because a terminal can't
really... stop, under normal operations. But, under special operations
(fuzzing, replays, etc.) it can and should stop!
Rather than make the operation fallible, its simply enough for me at
least to know that something went wrong. This is a simple change that
adds a simple flag that is flagged to true when such a scenario happens.
For normal Ghostty GUI operations, this isn't used at all. For
libghostty consumers they can choose to read it if they want, but don't
have to.
This also adds a C API to read it.
The libghostty-vt stream is made to be infallible: in the case of any error
it just logs and moves on. That's because a terminal can't really... stop,
under normal operations. But, under special operations (fuzzing, replays,
etc.) it can and should stop!
Rather than make the operation fallible, its simply enough for me at least
to know that something went wrong. This is a simple change that adds a simple
flag that is flagged to true when such a scenario happens.
For normal Ghostty GUI operations, this isn't used at all. For libghostty
consumers they can choose to read it if they want, but don't have to.
This also adds a C API to read it.
This makes error returns in `Screen.resize` and `Terminal.resize` safe:
they leave the terminal/screen in its prior state (with one exception,
noted below). Previously, both were documented as leaving the terminal
in a garbage stage on error.
Unit tests with tripwire added to verify errdefer behaviors.
This also includes a refactor: the common behaviors that resize needs
such as updating cell size in pixels, disabling synchronized output,
handling mode 2048, are now pulled into libghostty-vt. This will make it
easier for downstream libghostty users to make proper terminals.
**The one perfect undo exception:** If the primary screen can resize but
the alt screen cannot, then we try our best to do something reasonable,
in order:
1. If we're on the primary screen, we just deallocate the alt screen.
It'll be reallocated lazily (and may fail) in the future. Worst case
here is we lose screen data if the future TUI doesn't expect a clear on
enter/exit.
2. If we're on the alt screen, we deallocate to try recover memory, then
reinitialize eagerly at the new size hoping to at least have a blank alt
screen. Similar to 1, we lose screen data here, but its likely screen
data that mattered since we were actively on the alt screen.
3. If the eager reinit fails, we switch to the primary screen. This is
the biggest issue, cause the TUI program won't know this happened and
probably do some crazy stuff on the primary screen. But, its also a
super exceptional situation.
In every case though, the terminal is consistent and safe to use.
**LLM notes:** Only used as a judge and to assist with test writing, not
used at all for commit messages, PR, or non-test logic.
Terminal resize could leave tab stops, pixel geometry, synchronized output,
or screen dimensions partially updated when a later allocation failed. This
is now safe. There is one exception, see the code comments.
This makes the Terminal.resize handle more of the common elements that
a core terminal emulator should: cell geoemtry handling (if exists),
updates synchronized output modes.
This adds a new TerminalStream.resize that also handles the side effects
for more easy integration into downstream libghostty-vt consumers, namely
mode 2048 in-band signaling handling.
Bumps
[mitchellh/vouch/action/manage-by-issue](https://github.com/mitchellh/vouch)
from 1.4.2 to 1.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mitchellh/vouch/releases">mitchellh/vouch/action/manage-by-issue's
releases</a>.</em></p>
<blockquote>
<h2>v1.5.0</h2>
<h2>What's New</h2>
<h3>Improvements</h3>
<p>-<strong><code>action/check-issue</code></strong> has a new option
<code>auto-lock</code> to automatically lock closed issues. (<a
href="https://redirect.github.com/mitchellh/vouch/pull/90">#90</a>)</p>
<ul>
<li><strong><code>gh-manage-by-discussion</code></strong> supports
numerical IDs. (<a
href="https://redirect.github.com/mitchellh/vouch/pull/77">#77</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d66fa29a64"><code>d66fa29</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/93">#93</a>
from mitchellh/dependabot/github_actions/actions/check...</li>
<li><a
href="c22b93d0e8"><code>c22b93d</code></a>
Bump actions/checkout from 6.0.2 to 7.0.0</li>
<li><a
href="baeb3bf7c7"><code>baeb3bf</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/90">#90</a>
from trag1c/lock-issues</li>
<li><a
href="52aec3d646"><code>52aec3d</code></a>
add an option to lock closed issues</li>
<li><a
href="3dbc69c691"><code>3dbc69c</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/87">#87</a>
from freepicheep/example-attribute</li>
<li><a
href="a6933466b4"><code>a693346</code></a>
Update VOUCHED list</li>
<li><a
href="21177c0fec"><code>21177c0</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/74">#74</a>
from pavelzw/vouch-cli</li>
<li><a
href="527cdc3488"><code>527cdc3</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/81">#81</a>
from mitchellh/dependabot/github_actions/hustcer/setup...</li>
<li><a
href="1895e9c54f"><code>1895e9c</code></a>
feat: use <a
href="https://github.com/example"><code>@example</code></a> attribute
for command examples</li>
<li><a
href="8c80ada45b"><code>8c80ada</code></a>
Update README</li>
<li>Additional commits viewable in <a
href="c6d80ead49...d66fa29a64">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Bumps
[mitchellh/vouch/action/check-pr](https://github.com/mitchellh/vouch)
from 1.4.2 to 1.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mitchellh/vouch/releases">mitchellh/vouch/action/check-pr's
releases</a>.</em></p>
<blockquote>
<h2>v1.5.0</h2>
<h2>What's New</h2>
<h3>Improvements</h3>
<p>-<strong><code>action/check-issue</code></strong> has a new option
<code>auto-lock</code> to automatically lock closed issues. (<a
href="https://redirect.github.com/mitchellh/vouch/pull/90">#90</a>)</p>
<ul>
<li><strong><code>gh-manage-by-discussion</code></strong> supports
numerical IDs. (<a
href="https://redirect.github.com/mitchellh/vouch/pull/77">#77</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d66fa29a64"><code>d66fa29</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/93">#93</a>
from mitchellh/dependabot/github_actions/actions/check...</li>
<li><a
href="c22b93d0e8"><code>c22b93d</code></a>
Bump actions/checkout from 6.0.2 to 7.0.0</li>
<li><a
href="baeb3bf7c7"><code>baeb3bf</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/90">#90</a>
from trag1c/lock-issues</li>
<li><a
href="52aec3d646"><code>52aec3d</code></a>
add an option to lock closed issues</li>
<li><a
href="3dbc69c691"><code>3dbc69c</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/87">#87</a>
from freepicheep/example-attribute</li>
<li><a
href="a6933466b4"><code>a693346</code></a>
Update VOUCHED list</li>
<li><a
href="21177c0fec"><code>21177c0</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/74">#74</a>
from pavelzw/vouch-cli</li>
<li><a
href="527cdc3488"><code>527cdc3</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/81">#81</a>
from mitchellh/dependabot/github_actions/hustcer/setup...</li>
<li><a
href="1895e9c54f"><code>1895e9c</code></a>
feat: use <a
href="https://github.com/example"><code>@example</code></a> attribute
for command examples</li>
<li><a
href="8c80ada45b"><code>8c80ada</code></a>
Update README</li>
<li>Additional commits viewable in <a
href="c6d80ead49...d66fa29a64">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Bumps
[mitchellh/vouch/action/check-issue](https://github.com/mitchellh/vouch)
from baeb3bf7c7e6c12d6e33bab3870b7e936580a934 to
d66fa29a64600490892131ad87597c30c91fcac4.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d66fa29a64"><code>d66fa29</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/93">#93</a>
from mitchellh/dependabot/github_actions/actions/check...</li>
<li><a
href="c22b93d0e8"><code>c22b93d</code></a>
Bump actions/checkout from 6.0.2 to 7.0.0</li>
<li>See full diff in <a
href="baeb3bf7c7...d66fa29a64">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Bumps
[mitchellh/vouch/action/manage-by-discussion](https://github.com/mitchellh/vouch)
from 1.4.2 to 1.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mitchellh/vouch/releases">mitchellh/vouch/action/manage-by-discussion's
releases</a>.</em></p>
<blockquote>
<h2>v1.5.0</h2>
<h2>What's New</h2>
<h3>Improvements</h3>
<p>-<strong><code>action/check-issue</code></strong> has a new option
<code>auto-lock</code> to automatically lock closed issues. (<a
href="https://redirect.github.com/mitchellh/vouch/pull/90">#90</a>)</p>
<ul>
<li><strong><code>gh-manage-by-discussion</code></strong> supports
numerical IDs. (<a
href="https://redirect.github.com/mitchellh/vouch/pull/77">#77</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d66fa29a64"><code>d66fa29</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/93">#93</a>
from mitchellh/dependabot/github_actions/actions/check...</li>
<li><a
href="c22b93d0e8"><code>c22b93d</code></a>
Bump actions/checkout from 6.0.2 to 7.0.0</li>
<li><a
href="baeb3bf7c7"><code>baeb3bf</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/90">#90</a>
from trag1c/lock-issues</li>
<li><a
href="52aec3d646"><code>52aec3d</code></a>
add an option to lock closed issues</li>
<li><a
href="3dbc69c691"><code>3dbc69c</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/87">#87</a>
from freepicheep/example-attribute</li>
<li><a
href="a6933466b4"><code>a693346</code></a>
Update VOUCHED list</li>
<li><a
href="21177c0fec"><code>21177c0</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/74">#74</a>
from pavelzw/vouch-cli</li>
<li><a
href="527cdc3488"><code>527cdc3</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/81">#81</a>
from mitchellh/dependabot/github_actions/hustcer/setup...</li>
<li><a
href="1895e9c54f"><code>1895e9c</code></a>
feat: use <a
href="https://github.com/example"><code>@example</code></a> attribute
for command examples</li>
<li><a
href="8c80ada45b"><code>8c80ada</code></a>
Update README</li>
<li>Additional commits viewable in <a
href="c6d80ead49...d66fa29a64">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Bumps
[mitchellh/vouch/action/sync-codeowners](https://github.com/mitchellh/vouch)
from 1.4.2 to 1.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mitchellh/vouch/releases">mitchellh/vouch/action/sync-codeowners's
releases</a>.</em></p>
<blockquote>
<h2>v1.5.0</h2>
<h2>What's New</h2>
<h3>Improvements</h3>
<p>-<strong><code>action/check-issue</code></strong> has a new option
<code>auto-lock</code> to automatically lock closed issues. (<a
href="https://redirect.github.com/mitchellh/vouch/pull/90">#90</a>)</p>
<ul>
<li><strong><code>gh-manage-by-discussion</code></strong> supports
numerical IDs. (<a
href="https://redirect.github.com/mitchellh/vouch/pull/77">#77</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d66fa29a64"><code>d66fa29</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/93">#93</a>
from mitchellh/dependabot/github_actions/actions/check...</li>
<li><a
href="c22b93d0e8"><code>c22b93d</code></a>
Bump actions/checkout from 6.0.2 to 7.0.0</li>
<li><a
href="baeb3bf7c7"><code>baeb3bf</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/90">#90</a>
from trag1c/lock-issues</li>
<li><a
href="52aec3d646"><code>52aec3d</code></a>
add an option to lock closed issues</li>
<li><a
href="3dbc69c691"><code>3dbc69c</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/87">#87</a>
from freepicheep/example-attribute</li>
<li><a
href="a6933466b4"><code>a693346</code></a>
Update VOUCHED list</li>
<li><a
href="21177c0fec"><code>21177c0</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/74">#74</a>
from pavelzw/vouch-cli</li>
<li><a
href="527cdc3488"><code>527cdc3</code></a>
Merge pull request <a
href="https://redirect.github.com/mitchellh/vouch/issues/81">#81</a>
from mitchellh/dependabot/github_actions/hustcer/setup...</li>
<li><a
href="1895e9c54f"><code>1895e9c</code></a>
feat: use <a
href="https://github.com/example"><code>@example</code></a> attribute
for command examples</li>
<li><a
href="8c80ada45b"><code>8c80ada</code></a>
Update README</li>
<li>Additional commits viewable in <a
href="c6d80ead49...d66fa29a64">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Using `clearRetainingCapacity` as it was being used in
Fingerprint.update produces undefined behavior; both the old "copy" and
current version of the fingerprint would still be using the same
storage.
This commit changes the function so that the storage is more clearly
re-used, and shrunk at the end if need be.
Using `clearRetainingCapacity` as it was being used in
Fingerprint.update produces undefined behavior; both the old "copy" and
current version of the fingerprint would still be using the same
storage.
This commit changes the function so that the storage is more clearly
re-used, and shrunk at the end if need be.