Fix slow tig status in large repo when given a subdirectory path#1424
Open
apawn wants to merge 1 commit into
Open
Fix slow tig status in large repo when given a subdirectory path#1424apawn wants to merge 1 commit into
apawn wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
git statusis quite slow in large repositories like chromium, butgit status <path>is much faster because it limits the scan to the given pathspec. whiletig status <path>was as slow astig status.This change makes the status view pass path arguments to the underlying Git commands and skip the full index refresh when path filtering is active.
Changes
%(fileargs)togit diff-index,git diff-files, andgit ls-fileswhen loading the status viewstatus_run()(same mechanism as log/diff views)git update-index --refreshwhen a path filter is active (this was the main bottleneck in large repos)VIEW_FILE_FILTERto the status viewtest/status/file-filter-testResult
It used to take ages—around 37 seconds—looking like the app completely froze.
Test plan
make test/status/file-filter-testtig status subdiris much faster thantig statustig status subdirshows the same changes asgit status subdirtig status(without path) still works as before