diff-files: integrate with sparse index
commit8c30be9176784b5e4fbfc2ca6e8275c13cbf6e4a
authorShuqi Liang <cheskaqiqi@gmail.com>
Tue, 9 May 2023 19:42:41 +0000 (9 15:42 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 9 May 2023 21:26:36 +0000 (9 14:26 -0700)
treec955b48e5eb93a80a7f29b3b24b1c5ce44968cac
parent0aba1a989c7c577dc1b0b096a12615b7a6747c54
diff-files: integrate with sparse index

Remove full index requirement for `git diff-files`. Refactor the
ensure_expanded and ensure_not_expanded functions by introducing a
common helper function, ensure_index_state. Add test to ensure the index
is no expanded in `git diff-files`.

The `p2000` tests demonstrate a ~96% execution time reduction for 'git
diff-files' and a ~97% execution time reduction for 'git diff-files'
for a file using a sparse index:

Test                                               before  after
-----------------------------------------------------------------------
2000.94: git diff-files (full-v3)                  0.09    0.08 -11.1%
2000.95: git diff-files (full-v4)                  0.09    0.09 +0.0%
2000.96: git diff-files (sparse-v3)                0.52    0.02 -96.2%
2000.97: git diff-files (sparse-v4)                0.51    0.02 -96.1%
2000.98: git diff-files -- f2/f4/a (full-v3)       0.06    0.07 +16.7%
2000.99: git diff-files -- f2/f4/a (full-v4)       0.08    0.08 +0.0%
2000.100: git diff-files -- f2/f4/a (sparse-v3)    0.46    0.01 -97.8%
2000.101: git diff-files -- f2/f4/a (sparse-v4)    0.51    0.02 -96.1%

Signed-off-by: Shuqi Liang <cheskaqiqi@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/diff-files.c
t/perf/p2000-sparse-operations.sh
t/t1092-sparse-checkout-compatibility.sh