Skip to content

Conversation

@mjcheetham
Copy link
Member

When prefetching the commit graph for the first time with
`trust-pack-indexes=false`, the first pack file is the largest and takes
the longest to index. In my test case, it takes ~2 minutes to fetch all
the pack files, ~13 minutes to index the first pack file, and less than
1 minute to index the rest.

A previous pull request parallelized the pack file indexing. This pull
request makes it so as soon as the smaller, more recent pack files are
ready they are moved into the live pack folder and can be accessed by
the user's operations.

A marker file is created when a pack file is moved into the live pack
folder ahead of an older pack file still indexing. If the prefetch is
interrupted, the next prefetch will ignore pack files which have the
marker when determining the timestamp for the prefetch, which ensures
that any missing pack files from the interrupted prefetch are
redownloaded. The marker file is deleted once all the previous pack
files are ready.

After a completed prefetch, any markers (and the pack and index files
they mark) left over from previous incomplete prefetches are deleted.
Make ready pack files available during prefetch
The previous implementation of GetHeadTreeId called "git show -s". "-s"
suppresses the diff from the output, but it turns out git still performs
the diff operation internally. The inefficiency isn't necessarily an
issue, but we are running git.exe with the virtualization hook off so
if the objects required for the diff are not already downloaded the
command will fail.

The new implementation produces the same output, but doesn't try to do
a diff at all.
Fix GetHeadTreeId to only read head commit
@mjcheetham mjcheetham requested review from dscho and tyrielv December 16, 2025 15:54
@mjcheetham mjcheetham changed the title Milestones/m267.3 Release M267 (3) Dec 16, 2025
@mjcheetham mjcheetham enabled auto-merge December 16, 2025 15:54
@mjcheetham mjcheetham merged commit abd6490 into releases/shipped Dec 16, 2025
111 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants