Browse Source

submodule: sparse-index should not collapse links

A submodule is stored as a "Git link" that actually points to a commit
within a submodule. Submodules are populated or not depending on
submodule configuration, not sparse-checkout. To ensure that the
sparse-index feature integrates correctly with submodules, we should not
collapse a directory if there is a Git link within its range.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Derrick Stolee 4 years ago committed by Junio C Hamano
parent
commit
f442313e2e
  1. 1
      sparse-index.c
  2. 17
      t/t1092-sparse-checkout-compatibility.sh

1
sparse-index.c

@ -52,6 +52,7 @@ static int convert_to_sparse_rec(struct index_state *istate, @@ -52,6 +52,7 @@ static int convert_to_sparse_rec(struct index_state *istate,
struct cache_entry *ce = istate->cache[i];

if (ce_stage(ce) ||
S_ISGITLINK(ce->ce_mode) ||
!(ce->ce_flags & CE_SKIP_WORKTREE))
can_convert = 0;
}

17
t/t1092-sparse-checkout-compatibility.sh

@ -376,4 +376,21 @@ test_expect_success 'clean' ' @@ -376,4 +376,21 @@ test_expect_success 'clean' '
test_sparse_match test_path_is_dir folder1
'

test_expect_success 'submodule handling' '
init_repos &&

test_all_match mkdir modules &&
test_all_match touch modules/a &&
test_all_match git add modules &&
test_all_match git commit -m "add modules directory" &&

run_on_all git submodule add "$(pwd)/initial-repo" modules/sub &&
test_all_match git commit -m "add submodule" &&

# having a submodule prevents "modules" from collapse
test-tool -C sparse-index read-cache --table >cache &&
grep "100644 blob .* modules/a" cache &&
grep "160000 commit $(git -C initial-repo rev-parse HEAD) modules/sub" cache
'

test_done

Loading…
Cancel
Save