git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[GSOC][PATCH v1] diff-index: enable diff-index

From
Raghul Nanth A <nanth.raghul@gmail.com>
Date
Apr 3, 2023, 19:05 UTC
Message-ID
<20230403190538.361840-1-nanth.raghul@gmail.com>

Uses the run_diff_index() function to generate its diff. This function has been made sparse-index aware in the series that led to 8d2c3732 (Merge branch 'ld/sparse-diff-blame', 2021-12-21). Hence we can just set the requires-full-index to false for "diff-index".

Performance metrics
  Test                                        HEAD~1            HEAD
  ------------------------------------------------------------------------------------
  2000.2: git diff-index HEAD (full-v3)       0.09(0.05+0.05)   0.09(0.06+0.04) +0.0%
  2000.3: git diff-index HEAD (full-v4)       0.09(0.05+0.05)   0.09(0.06+0.03) +0.0%
  2000.4: git diff-index HEAD (sparse-v3)     0.32(0.28+0.05)   0.01(0.01+0.04) -96.9%
  2000.5: git diff-index HEAD (sparse-v4)     0.34(0.29+0.06)   0.01(0.02+0.03) -97.1%
  2000.6: git diff-index HEAD~1 (full-v3)     3.77(3.62+0.14)   3.37(3.27+0.09) -10.6%
  2000.7: git diff-index HEAD~1 (full-v4)     3.18(3.07+0.11)   3.20(3.10+0.09) +0.6%
  2000.8: git diff-index HEAD~1 (sparse-v3)   3.78(3.65+0.12)   0.22(0.20+0.06) -94.2%
  2000.9: git diff-index HEAD~1 (sparse-v4)   3.86(3.74+0.12)   0.28(0.28+0.04) -92.7%
Signed-off-by: Raghul Nanth A <nanth.raghul@gmail.com>
---
 builtin/diff-index.c                     |  4 ++++
 t/perf/p2000-sparse-operations.sh        |  2 ++
 t/t1092-sparse-checkout-compatibility.sh | 18 ++++++++++++++++++
 3 files changed, 24 insertions(+)
diff --git a/builtin/diff-index.c b/builtin/diff-index.c
index 35dc9b23ee..8b9871d611 100644
--- a/builtin/diff-index.c
+++ b/builtin/diff-index.c
@@ -24,6 +24,10 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
 		usage(diff_cache_usage);
 
 	git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
+
+	prepare_repo_settings(the_repository);
+	the_repository->settings.command_requires_full_index = 0;
+
 	repo_init_revisions(the_repository, &rev, prefix);
 	rev.abbrev = 0;
 	prefix = precompose_argv_prefix(argc, argv, prefix);
diff --git a/t/perf/p2000-sparse-operations.sh b/t/perf/p2000-sparse-operations.sh
index 3242cfe91a..9e74cb22b9 100755
--- a/t/perf/p2000-sparse-operations.sh
+++ b/t/perf/p2000-sparse-operations.sh
@@ -125,5 +125,7 @@ test_perf_on_all git checkout-index -f --all
 test_perf_on_all git update-index --add --remove $SPARSE_CONE/a
 test_perf_on_all "git rm -f $SPARSE_CONE/a && git checkout HEAD -- $SPARSE_CONE/a"
 test_perf_on_all git grep --cached --sparse bogus -- "f2/f1/f1/*"
+test_perf_on_all git diff-index HEAD
+test_perf_on_all git diff-index HEAD~1
 
 test_done
diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh
index 801919009e..13801f327d 100755
--- a/t/t1092-sparse-checkout-compatibility.sh
+++ b/t/t1092-sparse-checkout-compatibility.sh
@@ -1996,6 +1996,24 @@ test_expect_success 'sparse index is not expanded: rm' '
 	ensure_not_expanded rm -r deep
 '
 
+test_expect_success 'sparse index is not expanded: diff-index' '
+	init_repos &&
+
+	echo "new" >>sparse-index/g &&
+	git -C sparse-index add g &&
+	git -C sparse-index commit -m "dummy" &&
+	ensure_not_expanded diff-index HEAD~1
+'
+
+test_expect_success 'match all: diff-index' '
+	init_repos &&
+
+	test_all_match git diff-index HEAD &&
+	run_on_all rm g &&
+	test_all_match git diff-index HEAD &&
+	test_all_match git diff-index HEAD --cached
+'
+
 test_expect_success 'grep with and --cached' '
 	init_repos &&
 
-- 
2.40.0
Next: Junio C Hamano
Message 1 of 10 in “diff-index: enable diff-index”
  1. Raghul Nanth AApr 3, 2023
  2. Junio C HamanoApr 4, 2023
  3. Victoria DyeApr 5, 2023
  4. Junio C HamanoApr 5, 2023
  5. [GSOC][PATCH v2] diff-index: enable sparse indexRaghul Nanth A, Apr 8, 2023
  6. Victoria DyeApr 13, 2023
  7. RAGHUL NANTHApr 19, 2023
  8. Shuqi LiangApr 22, 2023
  9. [GSOC] diff-index: enable sparse indexRaghul Nanth A, May 2, 2023
  10. Victoria DyeMay 2, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.