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

Re: [PATCH v6 1/2] t1092: add tests for `git diff-files`

From
Victoria Dye <vdye@github.com>
Date
Mar 21, 2023, 21:21 UTC
Message-ID
<d940fe05-de86-5069-1d77-f4c7d0d368b6@github.com>
In-Reply-To
<20230320205241.105476-2-cheskaqiqi@gmail.com>
Shuqi Liang wrote:
Show 18 quoted lines
> Before integrating the 'git diff-files' builtin
> with the sparse index feature, add tests to
> t1092-sparse-checkout-compatibility.sh to ensure it currently works
> with sparse-checkout and will still work with sparse index
> after that integration.
> 
> When adding tests against a sparse-checkout
> definition, we test two modes: all changes are
> within the sparse-checkout cone and some changes are outside
> the sparse-checkout cone.
> 
> In order to have staged changes outside of
> 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.

The word wrapping on this message (and your other commits/cover letter) is a bit strange. By convention, it should be consistently wrapped to 72 columns per line. Most text editors have some way of configuring that so you don't need to do it manually.

Show 35 quoted lines
> 
> Signed-off-by: Shuqi Liang <cheskaqiqi@gmail.com>
> ---
>  t/t1092-sparse-checkout-compatibility.sh | 42 ++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
> 
> diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh
> index 801919009e..c1329e2f16 100755
> --- a/t/t1092-sparse-checkout-compatibility.sh
> +++ b/t/t1092-sparse-checkout-compatibility.sh
> @@ -2055,4 +2055,46 @@ test_expect_success 'grep sparse directory within submodules' '
>  	test_cmp actual expect
>  '
>  
> +test_expect_success 'diff-files with pathspec inside sparse definition' '
> +	init_repos &&
> +
> +	write_script edit-contents <<-\EOF &&
> +	echo text >>"$1"
> +	EOF
> +
> +	run_on_all ../edit-contents deep/a &&
> +
> +	test_all_match git diff-files &&
> +
> +	test_all_match git diff-files deep/a && 
> +
> +	# test wildcard
> +	test_all_match git diff-files deep/*
> +'
> +
> +test_expect_failure 'diff-files with pathspec outside sparse definition' '
> +	init_repos &&
> +
> +	test_sparse_match test_must_fail git diff-files folder2/a &&

Makes sense. In a sparse-checkout, folder2/a isn't in the working tree, so 'diff-files' (which compares working tree vs. index) doesn't really apply.

Show 9 quoted lines
> +
> +	write_script edit-contents <<-\EOF &&
> +	echo text >>"$1"
> +	EOF
> +
> +	# 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 &&

The test is failing because of this line. It should be 'mkdir -p folder1'; as you have it now, the command fails because 'folder1' already exists in 'full-checkout'. Alternatively, you could use 'run_on_sparse mkdir folder1', but using '-p' seems like the less fragile approach.

For reference, the way I figured that out was to run 't1092' as follows:
	cd t && ./t1092-sparse-checkout-compatibility.sh -xvdi --run=1,82
What the options correspond to:
* -x: print the commands called in the test (equivalent of calling 'set -x'
      in the test script).
* -v: print stdout/stderr to the console.
* -d: do not remove the "trash directory" of the test.
* -i: stop test execution once it encounters a failure.
* --run: run only the specified tests (1 is the first test - 'setup' - and
         82 is 'diff-files with pathspec outside sparse definition').
Show 5 quoted lines
> +	run_on_all cp a folder1/a &&
> +
> +	# file present on-disk without modifications
> +	test_all_match git diff-files &&
> +	test_all_match git diff-files folder1/a &&

The strange thing is, once I fixed the 'mkdir' issue in my local copy of these patches, these 'test_all_match diff-files' calls succeeded. It turns out that 'git diff-files' in the 'full-checkout', like in 'sparse-checkout', reports a difference in 'folder1/a' that doesn't actually exist. So the bug isn't in sparse-checkout as I initially assumed [1], but rather in diff-files itself.

At this point, I'd say the diff-files bug is out-of-scope of this sparse index integration; in your implementation, sparse-checkout and sparse index work the same as a full checkout, it's just that the "normal" full checkout behavior is wrong. My recommendation would be that you keep this test as-is and, to force the failure, add a check that 'full-checkout-out' is empty. Then, in a "NEEDSWORK" comment on the test (like the one on 'diff with renames and conflicts') that indicates that the 'diff-files' behavior is wrong.

I'll try to make some time this week to look into the 'diff-files' bug. Sorry for the back-and-forth and distraction from your sparse index integration. Other than the 'mkdir' issue, these updated tests look great!

[1] https://lore.kernel.org/git/b537d855-edb7-4f67-de08-d651868247a5@github.com/
Show 8 quoted lines
> +
> +	# file present on-disk with modifications
> +	run_on_all ../edit-contents folder1/a &&
> +	test_all_match git diff-files &&
> +	test_all_match git diff-files folder1/a
> +'
> +
>  test_done
Previous: Shuqi LiangNext: Junio C Hamano
Message 29 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.