Browse Source

checkout: fix nested sparse directory diff in sparse index

Add the 'recursive' diff flag to the local changes reporting done by 'git
checkout' in 'show_local_changes()'. Without the flag enabled, unexpanded
sparse directories will not be recursed into to report the diff of each
file's contents, resulting in the reported local changes including
"modified" sparse directories.

The same issue was found and fixed for 'git status' in 2c521b0e49 (status:
fix nested sparse directory diff in sparse index, 2022-03-01)

Signed-off-by: Victoria Dye <vdye@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Victoria Dye 3 years ago committed by Junio C Hamano
parent
commit
49ff3cb90f
  1. 1
      builtin/checkout.c
  2. 8
      t/t1092-sparse-checkout-compatibility.sh

1
builtin/checkout.c

@ -626,6 +626,7 @@ static void show_local_changes(struct object *head,
repo_init_revisions(the_repository, &rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
rev.diffopt.flags = opts->flags; rev.diffopt.flags = opts->flags;
rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS; rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
rev.diffopt.flags.recursive = 1;
diff_setup_done(&rev.diffopt); diff_setup_done(&rev.diffopt);
add_pending_object(&rev, head, NULL); add_pending_object(&rev, head, NULL);
run_diff_index(&rev, 0); run_diff_index(&rev, 0);

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

@ -372,6 +372,14 @@ test_expect_success 'deep changes during checkout' '
test_all_match git checkout base test_all_match git checkout base
' '


test_expect_success 'checkout with modified sparse directory' '
init_repos &&

test_all_match git checkout rename-in-to-out -- . &&
test_sparse_match git sparse-checkout reapply &&
test_all_match git checkout base
'

test_expect_success 'add outside sparse cone' ' test_expect_success 'add outside sparse cone' '
init_repos && init_repos &&



Loading…
Cancel
Save