Commit Graph
8693 Commits
Author SHA1 Message Date
Stefan HallerandClaude Opus 5.5 990913dd63 Add a test showing that a current bisect commit far down isn't selected
The commits view loads the first 300 commits only. If the range to
bisect is longer than about 600 commits, the commit that git wants the
user to test is further down than that. It isn't loaded, so we can't
select it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:27:58 +01:00
Stefan HallerandClaude Opus 5.5 ee07abe508 Load all commits when the selection is near the end of the loaded ones
The commits and sub-commits views load the first 300 commits, and load
all of them once the user selects a commit beyond the 200th. A later
commit loads more than 300 commits while bisecting, so that the commit
to test is among them. If it is beyond the 200th, it would cause all
commits to be loaded as soon as it gets selected.

Remember how many commits the views were loaded with, and load all of
them only when the selection gets within 100 commits of that number.
For the views loaded with 300 commits, nothing changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:27:58 +01:00
Stefan HallerandClaude Opus 5.5 0d41e696ac Pass the number of commits to load to the commit loader
The commit loader took a flag for whether to limit the number of
commits it loads, and the limit of 300 was hard-coded in it. A later
commit needs to load more than that while bisecting, so let the caller
pass the number.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:27:58 +01:00
Stefan HallerandClaude Opus 5.5 b2e9d2a348 Unify the code that loads all commits when scrolling near the end
The commits and the sub-commits views had identical copies of it. A
later commit changes when it loads all commits, so make it one function
first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:27:58 +01:00
Stefan HallerandClaude Opus 5.5 8055f5c139 Show the log of HEAD until both a good and a bad commit are known
Once a bisect had started, the commits view showed the log of the
branch that was checked out when it started, even while git was still
waiting for a good or a bad commit. If the user checked out a different
branch to mark its head as bad, its commits weren't shown.

Keep showing the log of HEAD until git starts checking out commits to
test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:27:58 +01:00
Stefan HallerandClaude Opus 5.5 4725e80b34 Add a test showing that a checkout before bisecting doesn't update the log
Once a bisect has started, the commits view shows the log of the branch
that was checked out when it started. This happens even while we don't
know both a good and a bad commit yet, and git hasn't checked out
anything for the user to test. If the user checks out a different
branch to mark its head as bad, the commits view keeps showing the old
branch, so the new branch's head isn't there to be marked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:27:58 +01:00
Stefan HallerandClaude Opus 5.5 208bbce33f Select the current bisect commit whenever it changes
If lazygit starts while a bisect is in progress, the commits view
selects the top commit, and the user has to look for the commit that
git wants them to test. The same happens when a git bisect command run
outside of lazygit moves the bisect on.

The bisect menu selected the new current commit after a good, bad or
skip, but only if the selected commit was the current one. It also
needed extra logic to wait for the refresh in case the log was going to
start from a different ref.

Remove that, and let the commits refresh select the current commit
whenever it differs from the one at the previous refresh, like it does
for a newly conflicted commit. A refresh that doesn't change it leaves
the selection alone. This way a background fetch doesn't move the
selection back to the current commit after the user navigated away from
it.

Marking the current commit as good or bad while a different commit is
selected now selects the new current commit too.

Skipping the selected commit when it isn't the current one is an
exception. Git often picks a different commit to test after that, but
we keep the skipped commit selected, so that the user can go on
skipping commits near it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 11:27:58 +01:00
Stefan HallerandClaude Opus 5.5 550a6d88a7 Scroll a newly conflicted commit into view in background refreshes
When a refresh finds a new conflicted commit, it selects it so that the
user sees where the rebase stopped. A background refresh keeps the
scroll position of the views it updates though. If the conflicted
commit is outside the visible part of the commits view, the selection
moves to a commit that the user can't see.

Scroll the selection into view whenever the refresh moves it to a newly
conflicted commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 20:37:56 +01:00
Stefan HallerandClaude Opus 5.5 30744324f8 Add a test showing that a background refresh doesn't scroll to a conflict
If a rebase started outside of lazygit stops with a conflict, the next
background refresh selects the conflicted commit. It keeps the scroll
position though, so if there are enough pending todos above the
conflicted commit, the selection is off-screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 20:37:44 +01:00
Stefan HallerandClaude Opus 5.5 cd23678775 Re-render the commits view in the same UI-thread hop as its model update
The commits refresh updated the model and the selection in one hop to
the UI thread, and re-rendered the view in a second one. The scroll
behavior of the re-render was fixed when the refresh started.

The next commit makes the scroll behavior depend on how the refresh
changed the selection. Do both in one hop, so that the re-render can
see that.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 20:35:41 +01:00
Stefan HallerandClaude Opus 5.5 d924a26737 Fix the parameter names of Shell.StartBisect
`git bisect start` takes the bad commit first and the good one second.
The parameters were named the other way round. The only caller already
passes the bad commit first, so only the names were wrong.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 20:34:47 +01:00
Stefan Haller 4e1eebe278 Stop uploading test coverage to Codacy (#6141)
Codacy hasn't analysed this repository since April 2026, because status
checks are disabled for it in Codacy's settings. The uploads from CI
still succeed, but the commits never show up in Codacy, and the coverage
badge in the README shows 0%.

We decided not to revive the integration. Remove the upload job and the
two Codacy badges.
2026-10-17 13:06:23 +02:00
Stefan HallerandClaude Opus 5.5 cb5c127b55 Write all integration test coverage to LAZYGIT_GOCOVERDIR
If LAZYGIT_GOCOVERDIR is set, run_integration_tests.sh collects the
coverage of the integration tests. Only the lazygit binary writes its
data to that directory, though. The test runner always writes to
/tmp/code_coverage, so the data ends up in two places unless the
variable points there. On CI it always did.

Also, the run fails if the directory doesn't exist yet. With a relative
path, the binary's data goes missing, because the binary runs in the
directory of the test's repo.

Pass the directory to the test runner too, create it if needed, and turn
it into an absolute path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 12:50:31 +02:00
Stefan HallerandClaude Opus 5.5 232b3c5e08 Fix a typo in a comment in run_integration_tests.sh
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 12:50:31 +02:00
Stefan HallerandClaude Opus 5.5 5b212e184b Remove the Go Report Card badge
Go Report Card has shut down. The badge now reads "go report: retired",
and the report page only shows a farewell note. That note recommends
golangci-lint as the replacement, and we already show a badge for it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 12:50:31 +02:00
Stefan HallerandClaude Opus 5.5 6d46f2c0f4 Stop collecting test coverage on CI
CI collected coverage data from the unit and integration tests only for
the Codacy upload. Nothing else reads it.

Remove the coverage flags, the LAZYGIT_GOCOVERDIR env var and the
artifact uploads from the CI workflow. Keep the support for
LAZYGIT_GOCOVERDIR in run_integration_tests.sh and in the integration
test runner, so that we can still measure the coverage of the
integration tests locally.

Remove the step in run_integration_tests.sh that merges the coverage
files, though. It only existed to reduce the number of artifacts to
upload.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 12:50:31 +02:00
Stefan HallerandClaude Opus 5.5 a181c3ec3a Stop uploading test coverage to Codacy
Codacy hasn't analysed this repository since April 2026, because status
checks are disabled for it in Codacy's settings. The uploads from CI
still succeed, but the commits never show up in Codacy, and the coverage
badge in the README shows 0%. On Dependabot PRs the upload fails
outright. These runs don't get the CODACY_PROJECT_TOKEN secret.

We decided not to revive the integration. Remove the upload job and the
two Codacy badges.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 12:50:31 +02:00
Stefan Haller a5343678ec Bump golangci-lint to 2.15.0 (#6140)
This is needed so that linting works with go 1.27.
2026-10-17 12:49:07 +02:00
Stefan HallerandClaude Opus 5.5 9b52fad152 Bump golangci-lint to 2.15.0
With Go 1.27 installed, `just lint` fails with typecheck errors like
"export data version 5 is greater than maximum supported version 4".
The shim builds golangci-lint with the local Go, but v2.12.2 can't read
the export data of Go 1.27's standard library. Support for Go 1.27 came
in v2.13.0.

v2.15.0 still builds with Go 1.26, so linting keeps working there too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 12:14:56 +02:00
Stefan HallerandClaude Opus 5.5 0a11e1289a Discard the error of Pipeline.Wait explicitly in a test
TestClosingAPipelinesOutputBringsItDown receives the error of
Pipeline.Wait from a channel and ignores it. errcheck v1.30.0 reports
such a receive as an unchecked error. golangci-lint 2.15.0 comes with
this errcheck version, and the next commit bumps to it.

The test ignores the error on purpose. It only checks that Wait returns,
and the error depends on the platform. Make that explicit by discarding
the error in the goroutine, and use the channel only to signal that
Wait has returned.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 12:14:56 +02:00
Stefan Haller 4b38f6f8b7 Guard against mistakes when running the release action (#6138)
Releases are run from stefanhaller's fork, but if that fork is not up to
date with jesseduffield's, bad things can happen. Guard against this by
checking that the release.yml file in both is identical.

Also take the go version to build with from the go.mod file in the
branch that is being released from, rather than hard-code it in
release.yml; this could be relevant when making a release from a 0.66.3
branch when the go version has already been bumped on master.
2026-10-16 14:58:11 +02:00
Stefan HallerandClaude Opus 5.5 5858bb7193 Take the Go version for releases from go.mod
release.yml installs a fixed Go version for building a release, and it
must match the release.yml on master. A patch release from a branch off
an older tag is therefore built with master's Go version, not with the
one that branch uses. For example, once master moves to Go 1.27, a
v0.66.3 built from a branch off v0.66.2 would no longer run on macOS
12, although v0.66.2 does.

Read the version from the go line of the checked-out go.mod instead,
and add ".x" so that setup-go installs the latest patch release.
setup-go's go-version-file input can't do this; for "go 1.26.0" it
installs exactly 1.26.0. Read the version before pushing the tag, so
that a go.mod without a go line stops the release early.

This also removes release.yml from the files to edit when updating Go.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 14:23:10 +02:00
Stefan HallerandClaude Opus 5.5 e718b4b63e Check that the fork's release.yml matches upstream's
Releases run the release workflow of the stefanhaller/lazygit fork, but
build the code of jesseduffield/lazygit. If the fork's master is behind,
its copy of release.yml can differ from upstream's, and the release
runs with outdated steps. This may only show up after the new tag has
already been pushed.

Stop the release right after checking out the code if the running
release.yml differs from the one on jesseduffield/lazygit's master.
Compare with master rather than with the branch being released. A
patch release from a branch off an older tag carries an older
release.yml, and it should still be released with the current workflow.

This means that changes to release.yml can no longer be tried out in
the fork before they land upstream.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 14:22:57 +02:00
Stefan Haller 63ab89fff4 Bump github.com/gdamore/tcell/v3 from 3.5.0 to 3.6.0 (#6126)
Bumps [github.com/gdamore/tcell/v3](https://github.com/gdamore/tcell)
from 3.5.0 to 3.6.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gdamore/tcell/releases">github.com/gdamore/tcell/v3's
releases</a>.</em></p>
<blockquote>
<h2>Version 3.6.0 Feature Release</h2>
<p>The main headline here is that the mouse is supported on the Linux
console with GPM. There are performance improvements and some bug fixes,
plus improved reporting of pixel sizes on window resize events as
well.</p>
<h2>What's Changed</h2>
<ul>
<li>fix(vt): let the segmenter decide clustering, not Go's unicode
tables by <a
href="https://github.com/dylanpulver"><code>@​dylanpulver</code></a> in
<a
href="https://redirect.github.com/gdamore/tcell/pull/1170">gdamore/tcell#1170</a></li>
<li>chore(deps): bump golang.org/x/term from 0.45.0 to 0.46.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/gdamore/tcell/pull/1173">gdamore/tcell#1173</a></li>
<li>chore(deps): bump golang.org/x/text from 0.41.0 to 0.42.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/gdamore/tcell/pull/1174">gdamore/tcell#1174</a></li>
<li>fix: invalidate blank cells after resizing CellBuffer by <a
href="https://github.com/jakezwang"><code>@​jakezwang</code></a> in <a
href="https://redirect.github.com/gdamore/tcell/pull/1176">gdamore/tcell#1176</a></li>
<li>fix(st): re-enable SGR mouse (1006) and focus (1004) reporting by <a
href="https://github.com/akashchamp"><code>@​akashchamp</code></a> in <a
href="https://redirect.github.com/gdamore/tcell/pull/1179">gdamore/tcell#1179</a></li>
<li>perf(cell): fill areas without an allocation per cell by <a
href="https://github.com/ayn2op"><code>@​ayn2op</code></a> in <a
href="https://redirect.github.com/gdamore/tcell/pull/1184">gdamore/tcell#1184</a></li>
<li>fix(resize): report the pixel size in resize events by <a
href="https://github.com/ayn2op"><code>@​ayn2op</code></a> in <a
href="https://redirect.github.com/gdamore/tcell/pull/1186">gdamore/tcell#1186</a></li>
<li>fix(input): extend bare Escape timeout on Windows by <a
href="https://github.com/gdamore"><code>@​gdamore</code></a> in <a
href="https://redirect.github.com/gdamore/tcell/pull/1188">gdamore/tcell#1188</a></li>
<li>feat(gpm): support Linux console mouse by <a
href="https://github.com/gdamore"><code>@​gdamore</code></a> in <a
href="https://redirect.github.com/gdamore/tcell/pull/1190">gdamore/tcell#1190</a></li>
<li>perf: reuse SetContent strings for Unicode glyphs by <a
href="https://github.com/gdamore"><code>@​gdamore</code></a> in <a
href="https://redirect.github.com/gdamore/tcell/pull/1191">gdamore/tcell#1191</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/dylanpulver"><code>@​dylanpulver</code></a>
made their first contribution in <a
href="https://redirect.github.com/gdamore/tcell/pull/1170">gdamore/tcell#1170</a></li>
<li><a href="https://github.com/jakezwang"><code>@​jakezwang</code></a>
made their first contribution in <a
href="https://redirect.github.com/gdamore/tcell/pull/1176">gdamore/tcell#1176</a></li>
<li><a
href="https://github.com/akashchamp"><code>@​akashchamp</code></a> made
their first contribution in <a
href="https://redirect.github.com/gdamore/tcell/pull/1179">gdamore/tcell#1179</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/gdamore/tcell/compare/v3.5.0...v3.6.0">https://github.com/gdamore/tcell/compare/v3.5.0...v3.6.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/gdamore/tcell/commit/4bed18057fce88934c9b9a576b5f83632196de11"><code>4bed180</code></a>
perf: reuse SetContent strings for Unicode glyphs (<a
href="https://redirect.github.com/gdamore/tcell/issues/1191">#1191</a>)</li>
<li><a
href="https://github.com/gdamore/tcell/commit/e0700df7ab5dbc4484ece1a32812f6e2602afd5b"><code>e0700df</code></a>
feat(gpm): support Linux console mouse (fixes <a
href="https://redirect.github.com/gdamore/tcell/issues/297">#297</a>)</li>
<li><a
href="https://github.com/gdamore/tcell/commit/f4c25623e16610b714e698c729535d9815656536"><code>f4c2562</code></a>
fix(input): tune escape delay on Windows (<a
href="https://redirect.github.com/gdamore/tcell/issues/1188">#1188</a>)</li>
<li><a
href="https://github.com/gdamore/tcell/commit/c2d660f0fafb796cc261dcdda8451da67a209b51"><code>c2d660f</code></a>
fix(resize): report the pixel size in resize events</li>
<li><a
href="https://github.com/gdamore/tcell/commit/5a6c8bf183d1fc9605da90128c4e603d41dc44a8"><code>5a6c8bf</code></a>
perf(cell): fill areas without an allocation per cell</li>
<li><a
href="https://github.com/gdamore/tcell/commit/10a2e726de2401764f6f2b5fa696dfa0a7f2357e"><code>10a2e72</code></a>
fix(st): Re-enable SGR mouse (1006) and focus (1004) reporting
(fixes#1178) (...</li>
<li><a
href="https://github.com/gdamore/tcell/commit/f6b0fa8ffcf8a42601efdd8eea9dd48b0ce8af63"><code>f6b0fa8</code></a>
fix: invalidate blank cells after resizing CellBuffer (<a
href="https://redirect.github.com/gdamore/tcell/issues/1176">#1176</a>)</li>
<li><a
href="https://github.com/gdamore/tcell/commit/91f6d4df3f48dcff1a779a64b9d9d7518034d60e"><code>91f6d4d</code></a>
chore(deps): bump golang.org/x/text from 0.41.0 to 0.42.0 (<a
href="https://redirect.github.com/gdamore/tcell/issues/1174">#1174</a>)</li>
<li><a
href="https://github.com/gdamore/tcell/commit/4f108a391b6b8f75a7190b88d27295fa73e343ad"><code>4f108a3</code></a>
chore(deps): bump golang.org/x/term from 0.45.0 to 0.46.0 (<a
href="https://redirect.github.com/gdamore/tcell/issues/1173">#1173</a>)</li>
<li><a
href="https://github.com/gdamore/tcell/commit/8c45e3b4485db63a055f12892adc478af5a6fb3c"><code>8c45e3b</code></a>
fix(vt): let the segmenter decide clustering, not Go's unicode tables
(<a
href="https://redirect.github.com/gdamore/tcell/issues/1170">#1170</a>)</li>
<li>See full diff in <a
href="https://github.com/gdamore/tcell/compare/v3.5.0...v3.6.0">compare
view</a></li>
</ul>
</details>
<br />
v0.66.2
2026-10-16 09:56:51 +02:00
dependabot[bot] 948fbcc1d6 Bump github.com/gdamore/tcell/v3 from 3.5.0 to 3.6.0
Bumps [github.com/gdamore/tcell/v3](https://github.com/gdamore/tcell) from 3.5.0 to 3.6.0.
- [Release notes](https://github.com/gdamore/tcell/releases)
- [Changelog](https://github.com/gdamore/tcell/blob/main/CHANGESv3.md)
- [Commits](https://github.com/gdamore/tcell/compare/v3.5.0...v3.6.0)

---
updated-dependencies:
- dependency-name: github.com/gdamore/tcell/v3
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-16 07:39:11 +00:00
Stefan Haller c0fa952a94 Bump github.com/cli/go-gh/v2 from 2.13.0 to 2.16.2 (#6128)
Bumps [github.com/cli/go-gh/v2](https://github.com/cli/go-gh) from
2.13.0 to 2.16.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/cli/go-gh/releases">github.com/cli/go-gh/v2's
releases</a>.</em></p>
<blockquote>
<h2>v2.16.2</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): Bump the codeql-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/cli/go-gh/pull/299">cli/go-gh#299</a></li>
<li>chore(deps): Bump the codeql-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/cli/go-gh/pull/308">cli/go-gh#308</a></li>
<li>chore(deps): Bump the codeql-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/cli/go-gh/pull/309">cli/go-gh#309</a></li>
<li>Make ssh tests behavioural with a shared fake ssh by <a
href="https://github.com/williammartin"><code>@​williammartin</code></a>
in <a
href="https://redirect.github.com/cli/go-gh/pull/311">cli/go-gh#311</a></li>
<li>Fix deprecated API lint findings by <a
href="https://github.com/williammartin"><code>@​williammartin</code></a>
in <a
href="https://redirect.github.com/cli/go-gh/pull/312">cli/go-gh#312</a></li>
<li>fix: refresh repository identity after SSH translation by <a
href="https://github.com/benekuehn"><code>@​benekuehn</code></a> in <a
href="https://redirect.github.com/cli/go-gh/pull/274">cli/go-gh#274</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/benekuehn"><code>@​benekuehn</code></a>
made their first contribution in <a
href="https://redirect.github.com/cli/go-gh/pull/274">cli/go-gh#274</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/cli/go-gh/compare/v2.16.1...v2.16.2">https://github.com/cli/go-gh/compare/v2.16.1...v2.16.2</a></p>
<h2>v2.16.1</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(api): publish HTTP cache entries without in-place writes by <a
href="https://github.com/baiyuxi930826"><code>@​baiyuxi930826</code></a>
in <a
href="https://redirect.github.com/cli/go-gh/pull/263">cli/go-gh#263</a></li>
<li>fix(repository): honor resolved remote by <a
href="https://github.com/ryux1"><code>@​ryux1</code></a> in <a
href="https://redirect.github.com/cli/go-gh/pull/290">cli/go-gh#290</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/baiyuxi930826"><code>@​baiyuxi930826</code></a>
made their first contribution in <a
href="https://redirect.github.com/cli/go-gh/pull/263">cli/go-gh#263</a></li>
<li><a href="https://github.com/ryux1"><code>@​ryux1</code></a> made
their first contribution in <a
href="https://redirect.github.com/cli/go-gh/pull/290">cli/go-gh#290</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/cli/go-gh/compare/v2.16.0...v2.16.1">https://github.com/cli/go-gh/compare/v2.16.0...v2.16.1</a></p>
<h2>v2.16.0</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): Bump the codeql-actions group across 1 directory with 2
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/cli/go-gh/pull/287">cli/go-gh#287</a></li>
<li>Trust canonical host alongside API host by <a
href="https://github.com/williammartin"><code>@​williammartin</code></a>
in <a
href="https://redirect.github.com/cli/go-gh/pull/289">cli/go-gh#289</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/cli/go-gh/compare/v2.15.0...v2.16.0">https://github.com/cli/go-gh/compare/v2.15.0...v2.16.0</a></p>
<h2>v2.15.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add per-host API endpoint overrides and a configurable redirect
policy by <a
href="https://github.com/williammartin"><code>@​williammartin</code></a>
in <a
href="https://redirect.github.com/cli/go-gh/pull/275">cli/go-gh#275</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/cli/go-gh/compare/v2.14.0...v2.15.0">https://github.com/cli/go-gh/compare/v2.14.0...v2.15.0</a></p>
<h2>v2.14.0</h2>
<h2>What's Changed</h2>
<h3>🐛 Fixes</h3>
<ul>
<li>Pin REST API version to <code>2022-11-28</code> by <a
href="https://github.com/williammartin"><code>@​williammartin</code></a>
in <a
href="https://redirect.github.com/cli/go-gh/pull/213">cli/go-gh#213</a></li>
</ul>
<h3>📚 Docs &amp; Chores</h3>
<ul>
<li>Add CODEOWNERS by <a
href="https://github.com/williammartin"><code>@​williammartin</code></a>
in <a
href="https://redirect.github.com/cli/go-gh/pull/227">cli/go-gh#227</a></li>
<li>Add Dependabot configuration by <a
href="https://github.com/williammartin"><code>@​williammartin</code></a>
in <a
href="https://redirect.github.com/cli/go-gh/pull/226">cli/go-gh#226</a></li>
<li>Modernize and harden GitHub Actions workflows by <a
href="https://github.com/williammartin"><code>@​williammartin</code></a>
in <a
href="https://redirect.github.com/cli/go-gh/pull/228">cli/go-gh#228</a>,
<a
href="https://redirect.github.com/cli/go-gh/pull/225">cli/go-gh#225</a>,
and <a
href="https://redirect.github.com/cli/go-gh/pull/243">cli/go-gh#243</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/cli/go-gh/commit/aadf36735579aa6ad2343b2e1b0f5387c22c71f0"><code>aadf367</code></a>
Merge pull request <a
href="https://redirect.github.com/cli/go-gh/issues/274">#274</a> from
benekuehn/fix/repository-ssh-alias</li>
<li><a
href="https://github.com/cli/go-gh/commit/92d8a75df55b1f8ee01ce6417ec19e98d3dac758"><code>92d8a75</code></a>
Fix deprecated API lint findings (<a
href="https://redirect.github.com/cli/go-gh/issues/312">#312</a>)</li>
<li><a
href="https://github.com/cli/go-gh/commit/393ceb0de625637679c4cb815f1b9925af43a875"><code>393ceb0</code></a>
Move remote identity resolution onto git.Remote</li>
<li><a
href="https://github.com/cli/go-gh/commit/1117f898975a6920b4eab909a97a2329236da6fa"><code>1117f89</code></a>
Inline remote translation into Current()</li>
<li><a
href="https://github.com/cli/go-gh/commit/125442e6c297158523daad0820549c6eec15604b"><code>125442e</code></a>
Make repository tests behavioural</li>
<li><a
href="https://github.com/cli/go-gh/commit/0a8aabdd0b27731cacd7ce6130b8b02c540fee7d"><code>0a8aabd</code></a>
Align Current() with gh for last push URL</li>
<li><a
href="https://github.com/cli/go-gh/commit/c04dd5fb0883a5727707ff77c20883ed5d0a7da4"><code>c04dd5f</code></a>
fix: refresh repository identity after SSH translation</li>
<li><a
href="https://github.com/cli/go-gh/commit/61532b98c94e992e17c09df350d05c6b09a0136c"><code>61532b9</code></a>
Make ssh tests behavioural with shared fake ssh (<a
href="https://redirect.github.com/cli/go-gh/issues/311">#311</a>)</li>
<li><a
href="https://github.com/cli/go-gh/commit/3adbe017dcecdb9860cc6fa8838e746ca108d048"><code>3adbe01</code></a>
Make ssh tests behavioural with shared fake ssh</li>
<li><a
href="https://github.com/cli/go-gh/commit/68c032df142b15f041b7b53d5fcae8a918140e69"><code>68c032d</code></a>
chore(deps): Bump the codeql-actions group with 2 updates (<a
href="https://redirect.github.com/cli/go-gh/issues/309">#309</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/cli/go-gh/compare/v2.13.0...v2.16.2">compare
view</a></li>
</ul>
</details>
<br />
2026-10-16 09:37:43 +02:00
dependabot[bot] 3925452438 Bump github.com/cli/go-gh/v2 from 2.13.0 to 2.16.2
Bumps [github.com/cli/go-gh/v2](https://github.com/cli/go-gh) from 2.13.0 to 2.16.2.
- [Release notes](https://github.com/cli/go-gh/releases)
- [Commits](https://github.com/cli/go-gh/compare/v2.13.0...v2.16.2)

---
updated-dependencies:
- dependency-name: github.com/cli/go-gh/v2
  dependency-version: 2.16.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-16 07:32:44 +00:00
Stefan Haller a489101366 Bump golang.org/x/sync from 0.22.0 to 0.24.0 (#6127)
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.22.0 to
0.24.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/golang/sync/commit/36f2d70ecde9857dc4e363242a1369c7645d6770"><code>36f2d70</code></a>
errgroup: modernize the usage of closures in goroutines</li>
<li><a
href="https://github.com/golang/sync/commit/f75267d8412fc1dfd12b343644a7ea46e4d9c85d"><code>f75267d</code></a>
semaphore: panic on negative capacity</li>
<li><a
href="https://github.com/golang/sync/commit/3ffd83cb522e5ef49bd2fa50f0c0d63dc152ad1f"><code>3ffd83c</code></a>
all: upgrade go directive to at least 1.26.0 [generated]</li>
<li>See full diff in <a
href="https://github.com/golang/sync/compare/v0.22.0...v0.24.0">compare
view</a></li>
</ul>
</details>
<br />
2026-10-16 09:30:44 +02:00
dependabot[bot] 0c4b646557 Bump golang.org/x/sync from 0.22.0 to 0.24.0
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.22.0 to 0.24.0.
- [Commits](https://github.com/golang/sync/compare/v0.22.0...v0.24.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-version: 0.24.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-16 07:28:01 +00:00
Stefan Haller 04aca68c68 Bump golang.org/x/sys from 0.47.0 to 0.49.0 (#6125)
Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.47.0 to
0.49.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/golang/sys/commit/b6b8557e8e2974925aec7a136ba0e323eedc5f43"><code>b6b8557</code></a>
unix/linux: unify ppc64x syscall wrappers</li>
<li><a
href="https://github.com/golang/sys/commit/aab6988eff65f762ecf6b757c3571b8a45f40618"><code>aab6988</code></a>
unix: add PrctlArg5Ptr</li>
<li><a
href="https://github.com/golang/sys/commit/cdfd9840b35fca673dd1b27ef69a13b9f5be0d04"><code>cdfd984</code></a>
unix: pass fcntl data as unsafe.Pointer in FcntlF{lock,store} on
darwin</li>
<li><a
href="https://github.com/golang/sys/commit/782b836d3ae6ebda757c7b3800818e737c623614"><code>782b836</code></a>
unix/linux: don't warn about closed stderr from child process</li>
<li><a
href="https://github.com/golang/sys/commit/61592fb02e581c922feaf3d9ada8547488b70964"><code>61592fb</code></a>
unix: return syscall error in *listxattrNS on BSD</li>
<li><a
href="https://github.com/golang/sys/commit/c136fdad42c8b16318f29da74e73194c779ba862"><code>c136fda</code></a>
unix/linux/Dockerfile: update to Go 1.26.8</li>
<li><a
href="https://github.com/golang/sys/commit/f1d0d79251083d5d223af16c0d8c5207a355c627"><code>f1d0d79</code></a>
unix: pass xattr data as unsafe.Pointer in BSD xattr syscalls</li>
<li><a
href="https://github.com/golang/sys/commit/67f850b71cbdd0a9bb58e2c45cb487ab5a72f83f"><code>67f850b</code></a>
unix: update linux to v7.2</li>
<li><a
href="https://github.com/golang/sys/commit/eb1f6591861ee38df32e043d27508fd1effa4854"><code>eb1f659</code></a>
unix: add O_EXEC and O_SEARCH on darwin</li>
<li><a
href="https://github.com/golang/sys/commit/51bc73186f49d1a8f85b1fa28d0c14585ac812cd"><code>51bc731</code></a>
unix: add Mmsghdr for linux</li>
<li>Additional commits viewable in <a
href="https://github.com/golang/sys/compare/v0.47.0...v0.49.0">compare
view</a></li>
</ul>
</details>
<br />
2026-10-16 09:26:57 +02:00
dependabot[bot] fb3fb338ef Bump golang.org/x/sys from 0.47.0 to 0.49.0
Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.47.0 to 0.49.0.
- [Commits](https://github.com/golang/sys/compare/v0.47.0...v0.49.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sys
  dependency-version: 0.49.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-16 06:21:40 +00:00
Stefan Haller cab9e7deca Bump go version to 1.26 (#6137)
Some of our dependencies require 1.26 now, in particular golang.org/x.
2026-10-16 08:20:39 +02:00
Stefan HallerandClaude Opus 5.5 5ef318ef77 Update go to 1.26
Dependabot PRs that update golang.org/x modules fail on CI. These
modules now require go 1.26, but CI runs 1.25. The golang.org/x modules
require the oldest Go release that is still supported, and since Go
1.27 came out, this is 1.26.

Stop at 1.26 rather than going to 1.27. The go version in go.mod is the
minimum for everyone who builds lazygit from source, and Go 1.27 is
only two months old. Also, Go 1.27 requires macOS 13, so release
binaries built with it would no longer run on macOS 12.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 08:05:49 +02:00
Stefan HallerandClaude Opus 5.5 5e3cd6b540 Set the Go version of the CI workflow in one place
Updating Go means editing the go-version of six setup-go steps in
ci.yml. The workflow defines a GO_VERSION variable for this, but no
step has used it since it was added in a34bdf1a04.

Use it in all six steps. Give its value the ".x" suffix so that
setup-go keeps picking the latest patch release. This also keeps YAML
from reading a version like 1.30 as the number 1.3.

release.yml still needs its own update, because env variables don't
carry over to other workflows.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 08:05:49 +02:00
Stefan HallerandClaude Opus 5.5 c3a051dcca Use Sprint for text that isn't a format string
Two places pass plain text as the format string of TextStyle.Sprintf
without further arguments: the prefix of a disabled menu item's
tooltip, and the key binding entries of the options bar. If the text
contains a "%", for example in a translation or in a key label, it is
mangled into something like "%!(NOVERB)".

go vet doesn't report these calls yet. It will once go.mod says go
1.26, because vet then also finds printf wrappers through interface
methods. TextStyle.Sprintf forwards to the Sprintf method of the
Sprinter interface.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 07:53:03 +02:00
Stefan Haller 9bb7ac77b2 Bump github.com/xo/terminfo from 1.0.0 to 1.2.0 (#6053)
Bumps [github.com/xo/terminfo](https://github.com/xo/terminfo) from
1.0.0 to 1.2.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/xo/terminfo/releases">github.com/xo/terminfo's
releases</a>.</em></p>
<blockquote>
<h2>terminfo v1.2.0</h2>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/xo/terminfo/compare/v1.1.0...v1.2.0">https://github.com/xo/terminfo/compare/v1.1.0...v1.2.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/xo/terminfo/commit/c203b35f1e27854a768ec0e95c1ca692d87da606"><code>c203b35</code></a>
Cleanup code</li>
<li><a
href="https://github.com/xo/terminfo/commit/ce65c9f3caca6edff17e484cace20c14a52e17f0"><code>ce65c9f</code></a>
Fix escaping issue for older ncurses</li>
<li><a
href="https://github.com/xo/terminfo/commit/7ff4e870ecf750b6a7c636e4bf8e8a268b33a909"><code>7ff4e87</code></a>
Fix tests</li>
<li><a
href="https://github.com/xo/terminfo/commit/79cb10a9514e29e8a93daecd07b5a88319373910"><code>79cb10a</code></a>
Read lowercase terminfo variables from local storage</li>
<li><a
href="https://github.com/xo/terminfo/commit/7fb97dc7aeb1f48992954faf8f7dfe7ee9d62bb0"><code>7fb97dc</code></a>
Canonicalize ACS mappings by source character</li>
<li><a
href="https://github.com/xo/terminfo/commit/983082b98a44a0ba9067fbba8d6805513eb40eb3"><code>983082b</code></a>
Finish scanning formatted parameters after the conversion verb</li>
<li>See full diff in <a
href="https://github.com/xo/terminfo/compare/v1.0.0...v1.2.0">compare
view</a></li>
</ul>
</details>
<br />
2026-10-16 07:36:33 +02:00
dependabot[bot] 8d6385e2eb Bump github.com/xo/terminfo from 1.0.0 to 1.2.0
Bumps [github.com/xo/terminfo](https://github.com/xo/terminfo) from 1.0.0 to 1.2.0.
- [Release notes](https://github.com/xo/terminfo/releases)
- [Commits](https://github.com/xo/terminfo/compare/v1.0.0...v1.2.0)

---
updated-dependencies:
- dependency-name: github.com/xo/terminfo
  dependency-version: 1.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-16 05:33:53 +00:00
Stefan Haller 0ea23813f1 README.md: Update Sponsors (#6038)
Automated changes by
[create-pull-request](https://github.com/peter-evans/create-pull-request)
GitHub action
2026-10-16 07:32:45 +02:00
github-actions[bot] 4bedea5a23 README.md: Update Sponsors 2026-10-16 05:30:14 +00:00
Stefan Haller 5e244a9d97 Fix "Jump to File" menu showing only half of the entries, in some rare cases (#6136)
When opening the `<ctrl+g>` files menu exactly at the moment where a
background fetch finishes, it could sometimes only show some of its
entries. The same could happen when pressing `>` to jump to the end of a
long diff at that moment.
2026-10-16 07:29:58 +02:00
Stefan HallerandClaude Opus 5.5 b8b9c8ad2b Leave reads to the end to the task that replaces the one reading
Some actions read the content of the main view to the end before they
act on it: the jump-to-file menu, going to the bottom, searching, and
jumping to a file from the diffstat. If a re-render replaces the task
while it reads, these actions are told that the content has been read
although only a part of it has, so the menu lists only the files in
that part. A background fetch re-renders the main view once a minute,
so now and then the menu is incomplete. The same happens if a read is
asked for after a render has been asked for but before its task has
started.

These actions act on the content of the task asked for last, so leave
the reads waiting for content to that task. Hold them from the moment
the task is asked for, hand over the ones a replaced task hasn't
answered, including the one it was reading for, and answer them once
the task asked for last has given the view all of its content. The
replacing task still reads its own first lines first, so that the reads
it takes over don't delay its first paint.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 07:14:39 +02:00
Stefan HallerandClaude Opus 5.5 ebd53371eb Add a test for a read to the end that a re-render interrupts
Some actions read the content of the main view to the end before they
act on it. For example, the jump-to-file menu lists the files of the
diff. If the task reading the content is replaced by a re-render while
it reads, these actions act on the part that has been read so far, so
the menu shows only some of the files. A background fetch re-renders
the main view, so this happens now and then.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 07:14:39 +02:00
Stefan Haller 4c2ce238a9 Improve display and handling of deleted submodules and nested repos/worktrees (#6134) 2026-10-15 21:29:34 +02:00
Stefan HallerandClaude Opus 5.5 a75b0457c1 Ask before discarding a nested repository if that loses anything
Discarding a nested repository deletes its directory like that of any
untracked file. If the repository keeps its git dir in its directory,
this deletes all of its history, and nothing said so. The directory of
a removed submodule keeps its git dir elsewhere, but it may have
changes that aren't committed.

Check for both before discarding. If anything would be lost, list it
and ask for confirmation.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:51:34 +02:00
Stefan HallerandClaude Opus 5.5 9009083f55 Don't stage nested repositories when committing with nothing staged
If nothing is staged, committing offers to stage all files first, or
stages them without asking if gui.skipNoStagedFilesWarning is set. Like
staging all files in the files panel, this adds a nested repository as
an embedded repository.

Show why the nested repository can't be staged instead, as staging all
files in the files panel does.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:51:34 +02:00
Stefan HallerandClaude Opus 5.5 a2cf915f8d Don't stage nested repositories
If you staged the directory of a removed submodule, a nested repository
or a worktree inside the repo, git added it as an embedded repository: a
gitlink without an entry in .gitmodules. For a removed submodule, this
brings it back in a broken state. git warns about it, but lazygit didn't
show the warning. Staging all files did the same to every such
directory.

Disable staging a selection that contains one of these, and disable
staging all files if that would stage one. The disabled reason tells you
how to get rid of it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:51:34 +02:00
Stefan HallerandClaude Opus 5.5 d2675b7dea Extract stageAllScope from toggleStagedAllWithLock
Whether stage-all may be used is going to depend on what it stages.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:51:34 +02:00
Stefan HallerandClaude Opus 5.5 35909f65d8 Explain the directories that git status reports as a whole
Selecting one of these in the files panel showed the error "Could not
access 'modules/sub/null'". The main view showed the entry's diff
against /dev/null with --no-index, as for an untracked file. When git
compares a file with a directory that way, it looks for a file of the
same name inside the directory.

Show what the directory is and what to do about it instead. Below that,
show the status of the repository that it is, or the files in it if it
is a plain directory. The status tells you whether discarding the
directory would lose anything.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:51:34 +02:00
Stefan HallerandClaude Opus 5.5 d8d11434a4 Extract wrapForReadability from conflictResolutionHint
More messages for the main view are going to need it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:51:34 +02:00
Stefan HallerandClaude Opus 5.5 e2a29a6d77 Remove a worktree inside the repo properly when discarding it
If a linked worktree lives inside the repo's working tree, it shows up
in the files panel. Discarding it there deleted its directory like that
of any untracked file. git still had the worktree on record, so the
worktrees panel listed it as missing, and its branch couldn't be checked
out anywhere else until the worktree was pruned.

Show the same menu for removing the worktree as the worktrees panel
does. Like a submodule, a worktree can't be discarded together with
other entries, because it has a menu of its own.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 20:51:34 +02:00