Please note that this is my first contribution to git. I've tried to follow the instructions about how to correctly submit a patch (I'm using GitGitGadget as getting Outlook to do plain text e-mail correctly seems impossible), but please let me know if I've missed something. My motivation for making this change is purely performance. We have a large repository that we enable the sparse index for, and I am developing a pre-commit hook that (among other things) uses git cat-file to get the staged contents of certain files. Without this change, getting the contents of a single small file from the index can take upwards of 10 seconds due to the index expansion. After this change, it only takes ~0.3 seconds unless the file is outside of the sparse index. Kevin Lyles (2): Allow using stdin in run_on_* functions Mark 'git cat-file' sparse-index compatible builtin/cat-file.c | 3 ++ t/t1092-sparse-checkout-compatibility.sh | 50 +++++++++++++++++++++--- 2 files changed, 48 insertions(+), 5 deletions(-) base-commit: 4590f2e9412378c61eac95966709c78766d326ba Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1770%2Fklylesatepic%2Fkl%2Fmark-cat-file-sparse-index-compatible-v3 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1770/klylesatepic/kl/mark-cat-file-sparse-index-compatible-v3 Pull-Request: https://github.com/git/git/pull/1770 Range-diff vs v2: 1: 7067a4c5da2 = 1: b310593aec2 Allow using stdin in run_on_* functions 2: a92825e502f ! 2: f4d1461b993 Mark 'git cat-file' sparse-index compatible @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'advice.sparseInde + test_all_match git cat-file -p :deep/a && + ensure_not_expanded cat-file -p :deep/a && + test_all_match git cat-file -p :folder1/a && -+ ensure_expanded cat-file -p :folder1/a' ++ ensure_expanded cat-file -p :folder1/a ++' + +test_expect_success 'cat-file --batch' ' + init_repos && @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'advice.sparseInde + echo "new content" >>sparse-index/deep/a && + run_on_all git add deep/a && + -+ echo ":deep/a">in && ++ echo ":deep/a" >in && + test_all_match git cat-file --batch <in && + ensure_not_expanded cat-file --batch <in && + -+ echo ":folder1/a">in && ++ echo ":folder1/a" >in && + test_all_match git cat-file --batch <in && + ensure_expanded cat-file --batch <in && + -+ cat <<-\EOF >in && ++ cat >in <<-\EOF && + :deep/a + :folder1/a + EOF + test_all_match git cat-file --batch <in && -+ ensure_expanded cat-file --batch <in' ++ ensure_expanded cat-file --batch <in ++' + test_done -- gitgitgadget