git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 0/4] sparse-index: expand/collapse based on 'index.sparse'

From
Victoria Dye via GitGitGadget <gitgitgadget@gmail.com>
Date
Oct 29, 2021, 13:51 UTC
Message-ID
<pull.1059.v4.git.1635515487.gitgitgadget@gmail.com>
In-Reply-To
<pull.1059.v3.git.1635358812.gitgitgadget@gmail.com>

This series updates do_read_index to use the index.sparse config setting when determining whether the index should be expanded or collapsed. If the command & repo allow use of a sparse index, index.sparse is enabled, and a full index is read from disk, the index is collapsed before returning to the caller. Conversely, if index.sparse is disabled but the index read from disk is sparse, the index is expanded before returning. This allows index.sparse to control use of the sparse index in addition to its existing control over how the index is written to disk. It also introduces the ability to enable/disable the sparse index on a command-by-command basis (e.g., allowing a user to troubleshoot a sparse-aware command with '-c index.sparse=false' [1]).

While testing this change, a bug was found in 'test-tool read-cache' in which config settings for the repository were not initialized before preparing the repo settings. This caused index.sparse to always be 'false' when using the test helper in a cone-mode sparse checkout, breaking tests in t1091 and t1092. The issue is fixed by moving prepare_repo_settings after config setup.

Changes since V1 ================

 * Add ensure_correct_sparsity function that ensures the index is sparse if
   the repository settings (including index.sparse) allow it, otherwise
   ensuring the index is expanded to full.
 * Restructure condition in do_read_index to, rather than check specifically
   for the index.sparse config setting, call ensure_correct_sparsity
   unconditionally when command_requires_full_index is false.

Changes since V2 ================

 * Rename can_convert_to_sparse to is_sparse_index_allowed to more
   accurately reflect what the function returns.
 * Remove index-iterating checks from is_sparse_index_allowed, leaving only
   inexpensive checks on config settings & sparse checkout patterns. Checks
   are still part of convert_to_sparse to ensure it behaves exactly as it
   did before this series.
 * Restructure ensure_correct_sparsity for better readability.
 * Fix test_env variable scope.

Changes since V3 ================

 * Add a new patch to avoid unnecessary cache tree free/recreation when
   possible in convert_to_sparse.

[1] https://lore.kernel.org/git/cc60c6e7-ecef-ae22-8ec7-ab290ff2b830@gmail.com/

Thanks! -Victoria
Victoria Dye (4):
  test-read-cache.c: prepare_repo_settings after config init
  sparse-index: avoid unnecessary cache tree clearing
  sparse-index: add ensure_correct_sparsity function
  sparse-index: update do_read_index to ensure correct sparsity
 read-cache.c                             |  8 ++++
 sparse-index.c                           | 58 ++++++++++++++++++------
 sparse-index.h                           |  1 +
 t/helper/test-read-cache.c               |  5 +-
 t/t1092-sparse-checkout-compatibility.sh | 31 +++++++++++++
 5 files changed, 86 insertions(+), 17 deletions(-)
base-commit: f443b226ca681d87a3a31e245a70e6bc2769123c
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1059%2Fvdye%2Fsparse%2Findex-sparse-config-v4
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1059/vdye/sparse/index-sparse-config-v4
Pull-Request: https://github.com/gitgitgadget/git/pull/1059
Range-diff vs v3:
 1:  6974ce7e7f5 = 1:  6974ce7e7f5 test-read-cache.c: prepare_repo_settings after config init
 -:  ----------- > 2:  91351ac4bde sparse-index: avoid unnecessary cache tree clearing
 2:  9d6511db072 = 3:  d2133ca1724 sparse-index: add ensure_correct_sparsity function
 3:  d6c3c694e1e = 4:  b67cd9d07f8 sparse-index: update do_read_index to ensure correct sparsity
-- 
gitgitgadget
Previous: Derrick StoleeNext: Victoria Dye via GitGitGadget
Message 28 of 44 in “sparse-index: expand/collapse based on 'index.sparse'”
  1. 0/2 sparse-index: expand/collapse based on 'index.sparse'Victoria Dye via GitGitGadget, Oct 15, 2021
  2. 1/2 test-read-cache.c: prepare_repo_settings after config initVictoria Dye via GitGitGadget, Oct 15, 2021
  3. 2/2 sparse-index: update index read to consider index.sparse configVictoria Dye via GitGitGadget, Oct 15, 2021
  4. Junio C HamanoOct 15, 2021
  5. Derrick StoleeOct 17, 2021
  6. Junio C HamanoOct 17, 2021
  7. Derrick StoleeOct 17, 2021
  8. Junio C HamanoOct 18, 2021
  9. Derrick StoleeOct 18, 2021
  10. Victoria DyeOct 18, 2021
  11. Derrick StoleeOct 21, 2021
  12. Junio C HamanoOct 18, 2021
  13. 0/3 sparse-index: expand/collapse based on 'index.sparse'Victoria Dye via GitGitGadget, Oct 21, 2021
  14. 1/3 test-read-cache.c: prepare_repo_settings after config initVictoria Dye via GitGitGadget, Oct 21, 2021
  15. 3/3 sparse-index: update do_read_index to ensure correct sparsityVictoria Dye via GitGitGadget, Oct 21, 2021
  16. 2/3 sparse-index: add ensure_correct_sparsity functionVictoria Dye via GitGitGadget, Oct 21, 2021
  17. Junio C HamanoOct 21, 2021
  18. Victoria DyeOct 27, 2021
  19. 0/3 sparse-index: expand/collapse based on 'index.sparse'Victoria Dye via GitGitGadget, Oct 27, 2021
  20. 1/3 test-read-cache.c: prepare_repo_settings after config initVictoria Dye via GitGitGadget, Oct 27, 2021
  21. 2/3 sparse-index: add ensure_correct_sparsity functionVictoria Dye via GitGitGadget, Oct 27, 2021
  22. Derrick StoleeOct 27, 2021
  23. Junio C HamanoOct 27, 2021
  24. Derrick StoleeOct 28, 2021
  25. Victoria DyeOct 29, 2021
  26. 3/3 sparse-index: update do_read_index to ensure correct sparsityVictoria Dye via GitGitGadget, Oct 27, 2021
  27. Derrick StoleeOct 27, 2021
  28. 0/4 sparse-index: expand/collapse based on 'index.sparse'Victoria Dye via GitGitGadget, Oct 29, 2021
  29. 1/4 test-read-cache.c: prepare_repo_settings after config initVictoria Dye via GitGitGadget, Oct 29, 2021
  30. 2/4 sparse-index: avoid unnecessary cache tree clearingVictoria Dye via GitGitGadget, Oct 29, 2021
  31. Junio C HamanoOct 29, 2021
  32. Derrick StoleeOct 29, 2021
  33. Junio C HamanoOct 29, 2021
  34. 4/4 sparse-index: update do_read_index to ensure correct sparsityVictoria Dye via GitGitGadget, Oct 29, 2021
  35. Elijah NewrenNov 22, 2021
  36. Victoria DyeNov 22, 2021
  37. 3/4 sparse-index: add ensure_correct_sparsity functionVictoria Dye via GitGitGadget, Oct 29, 2021
  38. Elijah NewrenNov 22, 2021
  39. 0/4 sparse-index: expand/collapse based on 'index.sparse'Victoria Dye via GitGitGadget, Nov 23, 2021
  40. 1/4 test-read-cache.c: prepare_repo_settings after config initVictoria Dye via GitGitGadget, Nov 23, 2021
  41. 2/4 sparse-index: avoid unnecessary cache tree clearingVictoria Dye via GitGitGadget, Nov 23, 2021
  42. 3/4 sparse-index: add ensure_correct_sparsity functionVictoria Dye via GitGitGadget, Nov 23, 2021
  43. 4/4 sparse-index: update do_read_index to ensure correct sparsityVictoria Dye via GitGitGadget, Nov 23, 2021
  44. Elijah NewrenNov 23, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.