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

Re: [RFC PATCH v6 0/2] diff-files: integrate with sparse index

From
Victoria Dye <vdye@github.com>
Date
Mar 21, 2023, 18:38 UTC
Message-ID
<af4cd38c-bd57-6e32-867d-a205ff0bb93b@github.com>
In-Reply-To
<20230320205241.105476-1-cheskaqiqi@gmail.com>
Shuqi Liang wrote:
Show 28 quoted lines
> Did not fix the logic of spare-checkout yet. Leave the spare diff-files 
> with pathspec outside sparse definition as 'test_expect_failure' now.
> but will fix soon.
> 
> Changes since v5:
> 
> 1. Add space after "definition."
> 
> 2. Add test case for a pathspec with wildcards or other "magic"
> 
> 3. Before messing with modified files on disk, add a "baseline" 
> of correct behavior when a pathspec points to out-of-cone files.
> 
> 4. Write the contents of an
> existing file inside that sparse directory to disk manually
> 
> 5. Use 'test_all_match' rather than 'test_sparse_match'. 
> wouldn't need the additional 'test_must_be_empty' checks.
> 
> 
> Shuqi Liang (2):
>   t1092: add tests for `git diff-files`
>   diff-files: integrate with sparse index
> 
>  builtin/diff-files.c                     |  8 +++
>  t/perf/p2000-sparse-operations.sh        |  2 +
>  t/t1092-sparse-checkout-compatibility.sh | 73 ++++++++++++++++++++++++
>  3 files changed, 83 insertions(+)
[forgot to Reply-All - Shuqi, sorry for the duplicate email!]

In future iterations, please also include a range-diff in your version iterations. The description of changes is useful, but the range-diff provides a much more detailed and comprehensive summary of the changes (making it exceptionally helpful for reviewers). I *think* you can just add the '--range-diff <previous iteration>' option to 'git format-patch' (see MyFirstContribution [1] for more detailed instructions).

[1] https://git-scm.com/docs/MyFirstContribution#v2-git-send-email
For anyone that's interested, here's the range-diff vs. v5:
1:  fb9ec0901c ! 1:  14bbcf41e0 t1092: add tests for `git diff-files`
    @@ Commit message
         the sparse-checkout cone.
     
         In order to have staged changes outside of
    -    the sparse-checkout cone, create a 'newdirectory/testfile' and
    -    add it to the index, while leaving it outside of
    -    the sparse-checkout definition.Test 'newdirectory/testfile'
    -    being present on-disk without modifications, then change content inside
    -    'newdirectory/testfile' in order to test 'newdirectory/testfile'
    -    being present on-disk with modifications.
    +    the sparse-checkout cone, make a directory called 'folder1' and
    +    copy `a` into 'folder1/a'. 'folder1/a' is identical to `a` in the base
    +    commit. These make 'folder1/a' in the index, while leaving it outside of
    +    the sparse-checkout definition. Test 'folder1/a'being present on-disk
    +    without modifications, then change content inside 'folder1/a' in order
    +    to test 'folder1/a' being present on-disk with modifications.
     
         Signed-off-by: Shuqi Liang <cheskaqiqi@gmail.com>
     
    @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'grep sparse direc
     +
     +	test_all_match git diff-files &&
     +
    -+	test_all_match git diff-files deep/a 
    ++	test_all_match git diff-files deep/a && 
     +
    ++	# test wildcard
    ++	test_all_match git diff-files deep/*
     +'
     +
    -+test_expect_success 'diff-files with pathspec outside sparse definition' '
    ++test_expect_failure 'diff-files with pathspec outside sparse definition' '
     +	init_repos &&
     +
    ++	test_sparse_match test_must_fail git diff-files folder2/a &&
    ++
     +	write_script edit-contents <<-\EOF &&
     +	echo text >>"$1"
     +	EOF
     +
    -+	# add file to the index but outside of cone
    -+	run_on_sparse mkdir newdirectory &&
    -+	run_on_sparse ../edit-contents newdirectory/testfile &&
    -+	test_sparse_match git add --sparse newdirectory/testfile &&
    ++	# Add file to the index but outside of cone for sparse-checkout cases.
    ++	# Add file to the index without sparse-checkout cases to ensure all have 
    ++	# same output.
    ++	run_on_all mkdir folder1 &&
    ++	run_on_all cp a folder1/a &&
     +
     +	# file present on-disk without modifications
    -+	test_sparse_match git diff-files &&
    -+	test_must_be_empty sparse-checkout-out &&
    -+	test_must_be_empty sparse-checkout-err &&
    -+	test_sparse_match git diff-files newdirectory/testfile &&
    -+	test_must_be_empty sparse-checkout-out &&
    -+	test_must_be_empty sparse-checkout-err &&
    ++	test_all_match git diff-files &&
    ++	test_all_match git diff-files folder1/a &&
     +
     +	# file present on-disk with modifications
    -+	FN=newdirectory/testfile &&
    -+	OID=$(git -C sparse-checkout hash-object $FN) &&
    -+	ZERO=$(test_oid zero) &&
    -+	echo ":100644 100644 $OID $ZERO M	$FN" >expect &&
    -+
    -+	run_on_sparse ../edit-contents newdirectory/testfile &&
    -+	test_sparse_match git diff-files &&
    -+	test_cmp expect sparse-checkout-out &&
    -+	test_sparse_match git diff-files newdirectory/testfile &&
    -+	test_cmp expect sparse-checkout-out
    ++	run_on_all ../edit-contents folder1/a &&
    ++	test_all_match git diff-files &&
    ++	test_all_match git diff-files folder1/a
     +'
     +
      test_done
2:  04e24f7db5 ! 2:  734cd24f0c diff-files: integrate with sparse index
    @@ Metadata
      ## Commit message ##
         diff-files: integrate with sparse index
     
    +    Originally, diff-files a pathspec that is out-of-cone in a sparse-index
    +    environment, Git dies with "pathspec '<x>' did not match any files",
    +    mainly because it does not expand the index so nothing is matched.
    +    Expand the index when the <pathspec> needs an expanded index, i.e. the
    +    <pathspec> contains wildcard that may need a full-index or the
    +    <pathspec> is simply outside of sparse-checkout definition.
    +
         Remove full index requirement for `git diff-files`
    -    and test to ensure the index is not expanded in `git diff-files`.
    +    and add test to ensure the index only expanded when necessary
    +    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'
    @@ builtin/diff-files.c: int cmd_diff_files(int argc, const char **argv, const char
      	repo_init_revisions(the_repository, &rev, prefix);
      	rev.abbrev = 0;
      
    +@@ builtin/diff-files.c: int cmd_diff_files(int argc, const char **argv, const char *prefix)
    + 		result = -1;
    + 		goto cleanup;
    + 	}
    ++
    ++	if (pathspec_needs_expanded_index(the_repository->index, &rev.diffopt.pathspec))
    ++		ensure_full_index(the_repository->index);
    ++		
    + 	result = run_diff_files(&rev, options);
    + 	result = diff_result_code(&rev.diffopt, result);
    + cleanup:
     
      ## t/perf/p2000-sparse-operations.sh ##
     @@ t/perf/p2000-sparse-operations.sh: test_perf_on_all git checkout-index -f --all
    @@ t/perf/p2000-sparse-operations.sh: test_perf_on_all git checkout-index -f --all
      test_done
     
      ## t/t1092-sparse-checkout-compatibility.sh ##
    -@@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'diff-files with pathspec outside sparse definition' '
    - 	test_cmp expect sparse-checkout-out
    +@@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'diff-files with pathspec outside sparse definition' '
    + 	test_all_match git diff-files folder1/a
      '
      
    ++test_expect_success 'diff-files pathspec expands index when necessary' '
    ++	init_repos &&
    ++
    ++	write_script edit-contents <<-\EOF &&
    ++	echo text >>"$1"
    ++	EOF
    ++
    ++	run_on_all ../edit-contents deep/a &&
    ++	
    ++	# pathspec that should expand index
    ++	! ensure_not_expanded diff-files "*/a" &&
    ++	test_must_be_empty sparse-index-err &&
    ++
    ++	! ensure_not_expanded diff-files "**a" &&
    ++	test_must_be_empty sparse-index-err
    ++'
    ++
     +test_expect_success 'sparse index is not expanded: diff-files' '
     +	init_repos &&
     +
    @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'diff-files with p
     +
     +	run_on_all ../edit-contents deep/a &&
     +
    -+	ensure_not_expanded diff-files  &&
    -+	ensure_not_expanded diff-files deep/a 
    ++	ensure_not_expanded diff-files &&
    ++	ensure_not_expanded diff-files deep/a &&
    ++	ensure_not_expanded diff-files deep/*
     +'
     +
      test_done
> 
> 
> base-commit: a38d39a4c50d1275833aba54c4dbdfce9e2e9ca1
Previous: Victoria DyeNext: Shuqi Liang
Message 32 of 73 in “t1092: add tests for `git diff-files`”
  1. Shuqi LiangMar 4, 2023
  2. Derrick StoleeMar 6, 2023
  3. 0/2 diff-files: integrate with sparse indexShuqi Liang, Mar 7, 2023
  4. 2/2 diff-files: integrate with sparse indexShuqi Liang, Mar 7, 2023
  5. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, Mar 7, 2023
  6. Junio C HamanoMar 7, 2023
  7. Shuqi LiangMar 8, 2023
  8. Junio C HamanoMar 8, 2023
  9. 0/2 diff-files: integrate with sparse indexShuqi Liang, Mar 9, 2023
  10. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, Mar 9, 2023
  11. Junio C HamanoMar 9, 2023
  12. 2/2 diff-files: integrate with sparse indexShuqi Liang, Mar 9, 2023
  13. 0/2 diff-files: integrate with sparse indexShuqi Liang, Mar 9, 2023
  14. 2/2 diff-files: integrate with sparse indexShuqi Liang, Mar 9, 2023
  15. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, Mar 9, 2023
  16. Junio C HamanoMar 9, 2023
  17. Shuqi LiangMar 9, 2023
  18. Junio C HamanoMar 9, 2023
  19. 0/2 diff-files: integrate with sparse indexShuqi Liang, Mar 10, 2023
  20. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, Mar 10, 2023
  21. Victoria DyeMar 10, 2023
  22. Shuqi LiangMar 20, 2023
  23. 2/2 diff-files: integrate with sparse indexShuqi Liang, Mar 10, 2023
  24. Victoria DyeMar 10, 2023
  25. 0/2 diff-files: integrate with sparse indexShuqi Liang, Mar 20, 2023
  26. 2/2 diff-files: integrate with sparse indexShuqi Liang, Mar 20, 2023
  27. Victoria DyeMar 21, 2023
  28. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, Mar 20, 2023
  29. Victoria DyeMar 21, 2023
  30. Junio C HamanoMar 21, 2023
  31. Victoria DyeMar 21, 2023
  32. Victoria DyeMar 21, 2023
  33. 0/2 diff-files: integrate with sparse indexShuqi Liang, Mar 22, 2023
  34. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, Mar 22, 2023
  35. Victoria DyeApr 13, 2023
  36. 2/2 diff-files: integrate with sparse indexShuqi Liang, Mar 22, 2023
  37. Victoria DyeApr 13, 2023
  38. Shuqi LiangApr 20, 2023
  39. Victoria DyeApr 20, 2023
  40. Shuqi LiangApr 21, 2023
  41. Victoria DyeApr 21, 2023
  42. Shuqi LiangApr 22, 2023
  43. Junio C HamanoMar 22, 2023
  44. Shuqi LiangMar 23, 2023
  45. Junio C HamanoMar 23, 2023
  46. Shuqi LiangMar 23, 2023
  47. Victoria DyeMar 23, 2023
  48. Junio C HamanoApr 13, 2023
  49. Victoria DyeApr 13, 2023
  50. 0/2 diff-files: integrate with sparse indexShuqi Liang, Apr 23, 2023
  51. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, Apr 23, 2023
  52. 2/2 diff-files: integrate with sparse indexShuqi Liang, Apr 23, 2023
  53. Victoria DyeMay 1, 2023
  54. Junio C HamanoApr 25, 2023
  55. Junio C HamanoMay 1, 2023
  56. 0/2 diff-files: integrate with sparse indexShuqi Liang, May 2, 2023
  57. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, May 2, 2023
  58. Junio C HamanoMay 2, 2023
  59. Victoria DyeMay 3, 2023
  60. 2/2 diff-files: integrate with sparse indexShuqi Liang, May 2, 2023
  61. 0/2 diff-files: integrate with sparse indexShuqi Liang, May 3, 2023
  62. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, May 3, 2023
  63. Junio C HamanoMay 3, 2023
  64. 2/2 diff-files: integrate with sparse indexShuqi Liang, May 3, 2023
  65. 0/2 diff-files: integrate with sparse indexShuqi Liang, May 8, 2023
  66. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, May 8, 2023
  67. Victoria DyeMay 8, 2023
  68. 2/2 diff-files: integrate with sparse indexShuqi Liang, May 8, 2023
  69. 0/2 diff-files: integrate with sparse indexShuqi Liang, May 9, 2023
  70. 1/2 t1092: add tests for `git diff-files`Shuqi Liang, May 9, 2023
  71. 2/2 diff-files: integrate with sparse indexShuqi Liang, May 9, 2023
  72. Victoria DyeMay 11, 2023
  73. Junio C HamanoMay 11, 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.