Git Mailing List Archive mirror
 help / color / mirror / Atom feed
From: Victoria Dye <vdye@github.com>
To: Shuqi Liang <cheskaqiqi@gmail.com>, git@vger.kernel.org
Cc: gitster@pobox.com, derrickstolee@github.com
Subject: Re: [PATCH v6 1/2] t1092: add tests for `git diff-files`
Date: Tue, 21 Mar 2023 14:21:46 -0700	[thread overview]
Message-ID: <d940fe05-de86-5069-1d77-f4c7d0d368b6@github.com> (raw)
In-Reply-To: <20230320205241.105476-2-cheskaqiqi@gmail.com>

Shuqi Liang wrote:
> 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.

> 
> 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.

> +
> +	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').

> +	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/

> +
> +	# 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


  reply	other threads:[~2023-03-21 21:21 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-04  2:57 [RFC][PATCH] t1092: add tests for `git diff-files` Shuqi Liang
2023-03-06 14:14 ` Derrick Stolee
2023-03-07  6:58 ` [PATCH v2 0/2] diff-files: integrate with sparse index Shuqi Liang
2023-03-07  6:58   ` [PATCH v2 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-03-07 18:53     ` Junio C Hamano
2023-03-08 22:04       ` Shuqi Liang
2023-03-08 22:40         ` Junio C Hamano
2023-03-07  6:58   ` [PATCH v2 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-03-09  1:33   ` [PATCH v3 0/2] " Shuqi Liang
2023-03-09  1:33     ` [PATCH v3 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-03-09  3:00       ` Junio C Hamano
2023-03-09  1:33     ` [PATCH v3 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-03-09  6:39     ` [PATCH v4 0/2] " Shuqi Liang
2023-03-09  6:39       ` [PATCH v4 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-03-09 17:20         ` Junio C Hamano
2023-03-09 23:21           ` Shuqi Liang
2023-03-09 23:40             ` Junio C Hamano
2023-03-09  6:39       ` [PATCH v4 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-03-10  5:00       ` [PATCH v5 0/2] " Shuqi Liang
2023-03-10  5:00         ` [PATCH v5 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-03-10 18:23           ` Victoria Dye
2023-03-20 20:55             ` Shuqi Liang
2023-03-10  5:00         ` [PATCH v5 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-03-10 18:23           ` Victoria Dye
2023-03-20 20:52         ` [RFC PATCH v6 0/2] " Shuqi Liang
2023-03-20 20:52           ` [PATCH v6 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-03-21 21:21             ` Victoria Dye [this message]
2023-03-21 21:25               ` Junio C Hamano
2023-03-21 22:19                 ` Victoria Dye
2023-03-20 20:52           ` [PATCH v6 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-03-21 22:34             ` Victoria Dye
2023-03-21 18:38           ` [RFC PATCH v6 0/2] " Victoria Dye
2023-03-22 16:18           ` [PATCH v7 " Shuqi Liang
2023-03-22 16:18             ` [PATCH v7 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-04-13 21:56               ` Victoria Dye
2023-03-22 16:18             ` [PATCH v7 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-04-13 21:54               ` Victoria Dye
2023-04-20  4:50                 ` Shuqi Liang
2023-04-20 15:26                   ` Victoria Dye
2023-04-21  1:10                     ` Shuqi Liang
2023-04-21 21:26                       ` Victoria Dye
2023-04-22 21:25                         ` Shuqi Liang
2023-03-22 23:36             ` [PATCH v7 0/2] " Junio C Hamano
2023-03-23  7:42               ` Shuqi Liang
2023-03-23 16:03                 ` Junio C Hamano
2023-03-23 23:59                   ` Shuqi Liang
2023-03-23 17:25                 ` Victoria Dye
2023-04-13 21:36             ` Junio C Hamano
2023-04-13 21:38               ` Victoria Dye
2023-04-23  1:07             ` [PATCH v8 " Shuqi Liang
2023-04-23  1:07               ` [PATCH v8 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-04-23  1:07               ` [PATCH v8 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-05-01 22:26                 ` Victoria Dye
2023-04-25 16:57               ` [PATCH v8 0/2] " Junio C Hamano
2023-05-01 22:04               ` Junio C Hamano
2023-05-02 17:23               ` [PATCH v9 " Shuqi Liang
2023-05-02 17:23                 ` [PATCH v9 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-05-02 19:25                   ` Junio C Hamano
2023-05-03 16:37                     ` Victoria Dye
2023-05-02 17:23                 ` [PATCH v9 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-05-03 21:55                 ` [PATCH v10 0/2] " Shuqi Liang
2023-05-03 21:55                   ` [PATCH v10 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-05-03 23:25                     ` Junio C Hamano
2023-05-03 21:55                   ` [PATCH v10 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-05-08 18:46                   ` [PATCH v11 0/2] " Shuqi Liang
2023-05-08 18:46                     ` [PATCH v11 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-05-08 22:25                       ` Victoria Dye
2023-05-08 18:46                     ` [PATCH v11 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-05-09 19:42                     ` [PATCH v12 0/2] " Shuqi Liang
2023-05-09 19:42                       ` [PATCH v12 1/2] t1092: add tests for `git diff-files` Shuqi Liang
2023-05-09 19:42                       ` [PATCH v12 2/2] diff-files: integrate with sparse index Shuqi Liang
2023-05-11  3:41                       ` [PATCH v12 0/2] " Victoria Dye
2023-05-11  5:04                         ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d940fe05-de86-5069-1d77-f4c7d0d368b6@github.com \
    --to=vdye@github.com \
    --cc=cheskaqiqi@gmail.com \
    --cc=derrickstolee@github.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).