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

Re: [PATCH v3 21/21] Documentation/git-update-index: explain splitIndex.*

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 27, 2016, 19:13 UTC
Message-ID
<xmqq8tr19ocs.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20161226102222.17150-22-chriscool@tuxfamily.org>
Christian Couder <christian.couder@gmail.com> writes:
Show 14 quoted lines
>  --split-index::
>  --no-split-index::
> -	Enable or disable split index mode. If enabled, the index is
> -	split into two files, $GIT_DIR/index and $GIT_DIR/sharedindex.<SHA-1>.
> -	Changes are accumulated in $GIT_DIR/index while the shared
> -	index file contains all index entries stays unchanged. If
> -	split-index mode is already enabled and `--split-index` is
> -	given again, all changes in $GIT_DIR/index are pushed back to
> -	the shared index file. This mode is designed for very large
> -	indexes that take a significant amount of time to read or write.
> +	Enable or disable split index mode. If split-index mode is
> +	already enabled and `--split-index` is given again, all
> +	changes in $GIT_DIR/index are pushed back to the shared index
> +	file.

In the world after this series that introduced the percentage-based auto consolidation, it smells strange, or even illogical, that index is un-split after doing this:

    $ git update-index --split-index
    $ git update-index --split-index

Before this series, it may have been a quick and dirty way to force consolidating the split index without totally disabling the feature, i.e. it would have looked more like

    $ git update-index --split-index
    ... work work work to accumulate more modifications
    ... consolidate into one --- there was no other way than
    ... disabling it temporarily
    $ git update-index --no-split-index
    ... but the user likes the feature so re-enable it.
    $ git update-index --split-index
which I guess is where this strange behaviour comes from.

It may be something we need to fix to unconfuse the end-users after this series lands. Even though "first disable and then re-enable" takes two commands (as opposed to one), it is far more logical. And the percentage-based auto consolidation feature is meant to reduce the need for manual consolidation, so it probably makes sense to remove this illogical feature.

Show 9 quoted lines
> @@ -394,6 +390,31 @@ Although this bit looks similar to assume-unchanged bit, its goal is
>  different from assume-unchanged bit's. Skip-worktree also takes
>  precedence over assume-unchanged bit when both are set.
>  
> +Split index
> +-----------
> +
> +This mode is designed for very large indexes that take a significant
> +amount of time to read or write.

This is not a new problem, but it probably is incorrect to say "to read or write". It saves time by not rewriting the whole thing but instead write out only the updated bits. You'd still read the whole thing while populating the in-core index from the disk, and if anything, you'd probably spend _more_ cycles because you'd essentially be reading the base and then reading the delta to apply on top.

> +To avoid deleting a shared index file that is still used, its mtime is
> +updated to the current time everytime a new split index based on the
> +shared index file is either created or read from.

The same comment on the mention of "mtime" in another patch applies here as well.

Previous: Christian CouderNext: Christian Couder
Message 22 of 56 in “Add configuration options for split-index”
  1. 00/21 Add configuration options for split-indexChristian Couder, Dec 26, 2016
  2. 01/21 config: mark an error message up for translationChristian Couder, Dec 26, 2016
  3. 02/21 config: add git_config_get_split_index()Christian Couder, Dec 26, 2016
  4. 03/21 split-index: add {add,remove}_split_index() functionsChristian Couder, Dec 26, 2016
  5. 04/21 read-cache: add and then use tweak_split_index()Christian Couder, Dec 26, 2016
  6. 09/21 config: add git_config_get_max_percent_split_change()Christian Couder, Dec 26, 2016
  7. 10/21 read-cache: regenerate shared index if necessaryChristian Couder, Dec 26, 2016
  8. Junio C HamanoDec 27, 2016
  9. Christian CouderJan 2, 2017
  10. 05/21 update-index: warn in case of split-index incoherencyChristian Couder, Dec 26, 2016
  11. 11/21 t1700: add tests for splitIndex.maxPercentChangeChristian Couder, Dec 26, 2016
  12. 15/21 config: add git_config_get_expiry() from gc.cChristian Couder, Dec 26, 2016
  13. 12/21 Documentation/config: add splitIndex.maxPercentChangeChristian Couder, Dec 26, 2016
  14. Junio C HamanoDec 27, 2016
  15. Christian CouderJan 2, 2017
  16. 19/21 read-cache: use freshen_shared_index() in read_index_from()Christian Couder, Dec 26, 2016
  17. 20/21 Documentation/config: add splitIndex.sharedIndexExpireChristian Couder, Dec 26, 2016
  18. Junio C HamanoDec 27, 2016
  19. Christian CouderJan 2, 2017
  20. 17/21 t1700: test shared index file expirationChristian Couder, Dec 26, 2016
  21. 21/21 Documentation/git-update-index: explain splitIndex.*Christian Couder, Dec 26, 2016
  22. Junio C HamanoDec 27, 2016
  23. Christian CouderJan 2, 2017
  24. 18/21 read-cache: refactor read_index_from()Christian Couder, Dec 26, 2016
  25. 16/21 read-cache: unlink old sharedindex filesChristian Couder, Dec 26, 2016
  26. 14/21 read-cache: touch shared index files when usedChristian Couder, Dec 26, 2016
  27. Junio C HamanoDec 27, 2016
  28. Christian CouderJan 2, 2017
  29. Junio C HamanoJan 7, 2017
  30. Duy NguyenJan 9, 2017
  31. Junio C HamanoJan 9, 2017
  32. Duy NguyenJan 19, 2017
  33. Junio C HamanoJan 19, 2017
  34. Duy NguyenJan 20, 2017
  35. Christian CouderJan 23, 2017
  36. Junio C HamanoJan 23, 2017
  37. Christian CouderJan 25, 2017
  38. Junio C HamanoJan 25, 2017
  39. Christian CouderJan 31, 2017
  40. Junio C HamanoJan 31, 2017
  41. Junio C HamanoJan 31, 2017
  42. 13/21 sha1_file: make check_and_freshen_file() non staticChristian Couder, Dec 26, 2016
  43. Junio C HamanoDec 27, 2016
  44. 07/21 Documentation/config: add information for core.splitIndexChristian Couder, Dec 26, 2016
  45. 08/21 Documentation/git-update-index: talk about core.splitIndex config varChristian Couder, Dec 26, 2016
  46. Junio C HamanoDec 27, 2016
  47. Christian CouderJan 2, 2017
  48. Junio C HamanoJan 7, 2017
  49. Duy NguyenJan 9, 2017
  50. Christian CouderJan 23, 2017
  51. Junio C HamanoJan 23, 2017
  52. 06/21 t1700: add tests for core.splitIndexChristian Couder, Dec 26, 2016
  53. Junio C HamanoDec 27, 2016
  54. Christian CouderJan 2, 2017
  55. Junio C HamanoJan 3, 2017
  56. Christian CouderDec 26, 2016

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.