]> Kevux Git Server - rit/commit
merge: make sparse-aware with ORT
authorDerrick Stolee <dstolee@microsoft.com>
Wed, 8 Sep 2021 11:23:57 +0000 (11:23 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 9 Sep 2021 22:49:04 +0000 (15:49 -0700)
commita33806398a418289388ad992e385a314b4b10225
tree2eb87e8c4ad8f7bbe90f88c4c10edc7245b90e50
parentad90da73513d7b0055e47c6918e1d75c6165fa69
merge: make sparse-aware with ORT

Allow 'git merge' to operate without expanding a sparse index, at least
not immediately. The index still will be expanded in a few cases:

1. If the merge strategy is 'recursive', then we enable
   command_requires_full_index at the start of the merge_recursive()
   method. We expect sparse-index users to also have the 'ort' strategy
   enabled.

2. With the 'ort' strategy, if the merge results in a conflicted file,
   then we expand the index before updating the working tree. The loop
   that iterates over the worktree replaces index entries and tracks
   'origintal_cache_nr' which can become completely wrong if the index
   expands in the middle of the operation. This safety valve is
   important before that loop starts. A later change will focus this
   to only expand if we indeed have a conflict outside of the
   sparse-checkout cone.

3. Other merge strategies are executed as a 'git merge-X' subcommand,
   and those strategies are currently protected with the
   'command_requires_full_index' guard.

Some test updates are required, including a mistaken 'git checkout -b'
that did not specify the base branch, causing merges to be fast-forward
merges.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/merge.c
merge-ort.c
merge-recursive.c
t/t1092-sparse-checkout-compatibility.sh