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 2 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 3 adds a new initializer to reduce duplicate code and to help avoid this mistake in the future. Thanks, -Stolee P.S. CC'ing all original reviewers of the series. Derrick Stolee (3): t7700: add failing --path-walk test path-walk: fix setup of pending objects path-walk: create initializer for path lists path-walk.c | 55 +++++++++++++++++++++-------------------------- t/t7700-repack.sh | 43 ++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 30 deletions(-) base-commit: c44beea485f0f2feaf460e2ac87fdd5608d63cf0 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1956%2Fderrickstolee%2Fpath-walk-missing-objects-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1956/derrickstolee/path-walk-missing-objects-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/1956 -- gitgitgadget