jesseduffield.lazygit/pkg/integration/components
Stefan Haller bb8955f2de Load direnv environment when switching repos
When a user opens a repo from the recent-repos menu or jumps between
worktrees inside lazygit, only the env vars present at process startup
reach subprocesses. That breaks pre-commit hooks and other tools whose
dependencies are pulled in by a per-repo .envrc — users were left with
read-only operations because the env their shell would normally load via
direnv never made it into lazygit's git invocations.

Shell out to `direnv export json` after each chdir and apply the JSON
delta via os.Setenv/Unsetenv. direnv tracks the previous load in its own
DIRENV_DIFF env var, so the delta also unloads vars from the old repo
when entering one without a matching .envrc. If direnv isn't on PATH the
call is a no-op, so users who don't use direnv pay nothing and users who
do need no config to opt in. Any stderr direnv emits (loading messages,
"blocked .envrc" errors, etc.) goes to the command log.

The integration test puts a fake direnv on PATH and asserts that a value
it exports reaches a custom command after switching repos. Wiring this
up needed runner.go to support `{{actualPath}}` placeholders in
ExtraEnvVars, mirroring the existing support for ExtraCmdArgs, so the
test can prepend a fixture-relative directory to PATH.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 09:05:01 +02:00
..
alert_driver.go Support matchers on integers in integration tests 2023-06-03 15:32:23 +10:00
assertion_helper.go Remove retry logic in integration tests 2023-07-09 20:57:18 +10:00
commit_description_panel_driver.go Convert keybinding fields to Keybinding 2026-05-25 15:32:47 +02:00
commit_message_panel_driver.go Convert keybinding fields to Keybinding 2026-05-25 15:32:47 +02:00
common.go Mention which command is continued in PromptToContinueRebase 2025-04-20 15:53:17 +02:00
confirmation_driver.go Add demo for amending old commit 2023-08-02 22:32:51 +10:00
env.go Disable gh telemetry when running integration tests 2026-05-05 18:42:28 +02:00
file_system.go Allow chaining of FileSystem methods 2025-04-09 10:27:57 +02:00
git.go Add integration test that accesses commit properties in a custom command 2024-04-12 08:33:47 +02:00
int_matcher.go Add integration tests for searching/filtering 2023-07-03 12:54:14 +10:00
matcher.go Support matchers on integers in integration tests 2023-06-03 15:32:23 +10:00
menu_driver.go Add separate keybindings for confirmMenu and confirmSuggestion 2025-09-05 10:42:04 +02:00
paths.go Rename test/results to test/_results 2023-09-15 18:04:20 +02:00
popup.go Refactor: add a separate Prompt view 2025-09-05 10:42:03 +02:00
prompt_driver.go Convert keybinding fields to Keybinding 2026-05-25 15:32:47 +02:00
random.go Add commit graph demo 2023-08-12 16:16:03 +10:00
runner.go Load direnv environment when switching repos 2026-06-04 09:05:01 +02:00
search_driver.go Change keybinding syntax to spell out full modifier names, and use + instead of - 2026-04-30 22:38:53 +02:00
shell.go Use the isolated test env for shell commands 2026-05-25 15:18:18 +02:00
test.go Refactor repo_paths.go to use git rev-parse 2024-01-24 08:40:01 +01:00
test_driver.go Convert keybinding fields to Keybinding 2026-05-25 15:32:47 +02:00
test_test.go Copy gocui files into lazygit repo under pkg/gocui 2026-04-30 14:29:08 +02:00
text_matcher.go [DATALAD RUNCMD] run codespell throughout fixing typos automagically 2024-08-27 18:03:00 +02:00
view_driver.go Convert JumpToBlock to a list of multi-key bindings 2026-05-25 15:32:47 +02:00
views.go Copy gocui files into lazygit repo under pkg/gocui 2026-04-30 14:29:08 +02:00