-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
staging hunks or files is slow in a large repo #5455
Description
Describe the bug
A clear and concise description of what the bug is.
We have a large-ish repo (275k files) and I've noticed that staging files or hunks in a file can be quite slow, without much feedback in the UI on what is happening.
lazygit --debug and --logs suggest it has to do with the operation involving a git status --untracked-files all call:
Mar 31 15:32:43 |INFO| saving temporary patch to /var/folders/m1/5018nxw5655fd55ql3xqqpjm0000gn/T/lazygit-501/lazygit-3047562716/some-project/Mar 31 15.32.43.607242000.patch
Mar 31 15:32:43 |INFO| RunCommand command="Creating file '/var/folders/m1/5018nxw5655fd55ql3xqqpjm0000gn/T/lazygit-501/lazygit-3047562716/some-project/Mar 31 15.32.43.607242000.patch'"
Mar 31 15:32:43 |DEBU| RunCommand command="git apply --cached \"/var/folders/m1/5018nxw5655fd55ql3xqqpjm0000gn/T/lazygit-501/lazygit-3047562716/some-project/Mar 31 15.32.43.607242000.patch\""
Mar 31 15:32:43 |INFO| git apply --cached "/var/folders/m1/5018nxw5655fd55ql3xqqpjm0000gn/T/lazygit-501/lazygit-3047562716/some-project/Mar 31 15.32.43.607242000.patch" (111.865ms)
Mar 31 15:32:43 |INFO| refreshing the following scopes in sync mode: files,staging
Mar 31 15:32:43 |DEBU| using cache for key status.showUntrackedFiles
Mar 31 15:32:43 |DEBU| RunCommand command="git status --untracked-files=all --porcelain -z --find-renames=50%"
Mar 31 15:32:43 |INFO| refreshed merge conflicts in 671.875µs
Mar 31 15:32:47 |INFO| git status --untracked-files=all --porcelain -z --find-renames=50% (3.732384s)
Mar 31 15:32:47 |INFO| refreshed files in 3.799649541s
Mar 31 15:32:47 |DEBU| RunCommand command="git -C /Users/mattbrown/code/some-project/worktree1 diff --no-ext-diff --submodule --unified=3 --color=never --find-renames=50% -- README.md"
Mar 31 15:32:47 |INFO| git -C /Users/mattbrown/code/some-project/worktree1 diff --no-ext-diff --submodule --unified=3 --color=never --find-renames=50% -- README.md (175.33525ms)
Mar 31 15:32:47 |DEBU| RunCommand command="git -C /Users/mattbrown/code/some-project/worktree1 diff --no-ext-diff --submodule --unified=3 --color=never --find-renames=50% --cached -- README.md"
Mar 31 15:32:47 |INFO| git -C /Users/mattbrown/code/some-project/worktree1 diff --no-ext-diff --submodule --unified=3 --color=never --find-renames=50% --cached -- README.md (93.288291ms)
Mar 31 15:32:47 |DEBU| RunCommand command="git -C /Users/mattbrown/code/some-project/worktree1 diff --no-ext-diff --submodule --unified=3 --color=never --find-renames=50% -- README.md"
Mar 31 15:32:47 |INFO| git -C /Users/mattbrown/code/some-project/worktree1 diff --no-ext-diff --submodule --unified=3 --color=never --find-renames=50% -- README.md (76.490459ms)
Mar 31 15:32:47 |DEBU| RunCommand command="git -C /Users/mattbrown/code/some-project/worktree1 diff --no-ext-diff --submodule --unified=3 --color=never --find-renames=50% --cached -- README.md"
Mar 31 15:32:47 |INFO| git -C /Users/mattbrown/code/some-project/worktree1 diff --no-ext-diff --submodule --unified=3 --color=never --find-renames=50% --cached -- README.md (85.516833ms)
this in a repo with git maintenance enabled, core.fsmonitor=true, feature.manyfiles=true etc. time git status generally takes 300ms in this repo.
is refreshing the status of untracked files necessary when staging hunks in a tracked file?
To Reproduce
Steps to reproduce the behavior:
- find a large repo
- create a few unstaged changes in tracked files
- run
lazygitand attempt to stage either whole files or hunks in a file
Expected behavior
Ideally staging individual hunks in a file would not have a several second delay in between each operation, as there are often multiple hunks to stage.
Version info:
❯ lazygit --version
commit=, build date=, build source=Homebrew, version=0.60.0, os=darwin, arch=arm64, git version=2.53.0
Terminal info:
Ghostty 1.3.1