You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is a port of gitgitgadget#1956, and I
deem it one of the blockers against making a full release of Microsoft
Git v2.51. Here is what Stolee wrote in the cover letter:
Now that the `--path-walk` feature for `git repack` is out in the wild
and getting more visibility than it did in the Git for Windows fork, the
following issue was brought to my attention:
Some folks would report missing objects after `git repack -adf
--path-walk`!
It turns out that this snuck through the cracks because it was pretty
difficult to create a reproducing test case (patch 1) but it boils down
to:
1. A path has exactly one version across all of the history being
repacked.
2. That path is in the index.
3. The object at that path is not a loose object.
4. pack.useSparse=true in the config (this is the default)
It is also something where users don't necessarily notice the missing
objects until they fetch and a missing object is used as a delta base.
Doing normal checkouts doesn't cause changes to these files, so they are
never opened by Git. Users hitting this issue can usually recover using
`git fetch --refetch` to repopulate the missing objects from a remote
(unless they never had a remote at all).
Patch 1 introduces the fix for this issue, which is related to
forgetting to initialize a struct indicator when walking the pending
objects.
When reflecting on the ways that I missed this when building the
feature, I think the core issue was an overreliance on using bare repos
in testing. I also think that the way that the UNINTERESTING object
exploration was implemented was particularly fragile to missing updates
to the initialization of the struct, so patch 2 adds a new initializer
to reduce duplicate code and to help avoid this mistake in the future.
0 commit comments