diff mbox series

[1/4] t1092: add compatibility tests for 'git show'

Message ID 8c2fdb5a4fc3317c05324da54692036e36fc15f3.1649349442.git.gitgitgadget@gmail.com (mailing list archive)
State Superseded
Headers show
Series Sparse index integration with 'git show' | expand

Commit Message

Derrick Stolee April 7, 2022, 4:37 p.m. UTC
From: Derrick Stolee <dstolee@microsoft.com>

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
---
 t/t1092-sparse-checkout-compatibility.sh | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Josh Steadmon April 14, 2022, 6:37 p.m. UTC | #1
On 2022.04.07 16:37, Derrick Stolee via GitGitGadget wrote:
> From: Derrick Stolee <dstolee@microsoft.com>
> 
> Signed-off-by: Derrick Stolee <derrickstolee@github.com>
> ---
>  t/t1092-sparse-checkout-compatibility.sh | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh
> index 236ab530284..74792b5ebbc 100755
> --- a/t/t1092-sparse-checkout-compatibility.sh
> +++ b/t/t1092-sparse-checkout-compatibility.sh
> @@ -1151,6 +1151,22 @@ test_expect_success 'clean' '
>  	test_sparse_match test_path_is_dir folder1
>  '
>  
> +test_expect_success 'show (cached blobs/trees)' '
> +	init_repos &&
> +
> +	test_all_match git show :a &&
> +	test_all_match git show :deep/a &&
> +	test_sparse_match git show :folder1/a &&
> +
> +	# Asking "git show" for directories in the index
> +	# does not work as implemented. The error message is
> +	# different for a full checkout and a sparse checkout
> +	# when the directory is outside of the cone.
> +	test_all_match test_must_fail git show :deep/ &&
> +	test_must_fail git -C full-checkout show :folder1/ &&
> +	test_sparse_match test_must_fail git show :folder1/
> +'

A reminder that directories are not present in a non-sparse index would
help those of us unfamiliar with the differences between
sparse/non-sparse indexes to understand why the full-checkout cases fail
here. Initially I was confused why any of these lookups would fail
because my mental model was "a sparse-index is a proper subset of the
non-sparse index".

> +
>  test_expect_success 'submodule handling' '
>  	init_repos &&
>  
> -- 
> gitgitgadget
>
Derrick Stolee April 18, 2022, 12:23 p.m. UTC | #2
On 4/14/2022 2:37 PM, Josh Steadmon wrote:
> On 2022.04.07 16:37, Derrick Stolee via GitGitGadget wrote:
>> From: Derrick Stolee <dstolee@microsoft.com>
>>
>> Signed-off-by: Derrick Stolee <derrickstolee@github.com>
>> ---
>>  t/t1092-sparse-checkout-compatibility.sh | 16 ++++++++++++++++
>>  1 file changed, 16 insertions(+)
>>
>> diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh
>> index 236ab530284..74792b5ebbc 100755
>> --- a/t/t1092-sparse-checkout-compatibility.sh
>> +++ b/t/t1092-sparse-checkout-compatibility.sh
>> @@ -1151,6 +1151,22 @@ test_expect_success 'clean' '
>>  	test_sparse_match test_path_is_dir folder1
>>  '
>>  
>> +test_expect_success 'show (cached blobs/trees)' '
>> +	init_repos &&
>> +
>> +	test_all_match git show :a &&
>> +	test_all_match git show :deep/a &&
>> +	test_sparse_match git show :folder1/a &&
>> +
>> +	# Asking "git show" for directories in the index
>> +	# does not work as implemented. The error message is
>> +	# different for a full checkout and a sparse checkout
>> +	# when the directory is outside of the cone.
>> +	test_all_match test_must_fail git show :deep/ &&
>> +	test_must_fail git -C full-checkout show :folder1/ &&
>> +	test_sparse_match test_must_fail git show :folder1/
>> +'
> 
> A reminder that directories are not present in a non-sparse index would
> help those of us unfamiliar with the differences between
> sparse/non-sparse indexes to understand why the full-checkout cases fail
> here. Initially I was confused why any of these lookups would fail
> because my mental model was "a sparse-index is a proper subset of the
> non-sparse index".

At this point, it would be repetitive to explain the sparse index
every time we do anything involving it. Reviewers should expect to
be familiar with the topic, or consult the in-tree documentation [1, 2].

[1] https://github.com/git/git/blob/master/Documentation/technical/sparse-index.txt
[2] https://github.com/git/git/blob/4027e30c5395c9c1aeea85e99f51ac62f5148145/Documentation/technical/index-format.txt#L396-L406

Specific to this change, sparse directories are not being taken into
account, since 'git show' is still in the compatibility mode that
expands a sparse index to a full one [3]. Thus, the differences in this
patch are only related to full-checkout versus sparse-checkout.

[3] https://github.com/git/git/blob/4027e30c5395c9c1aeea85e99f51ac62f5148145/Documentation/technical/sparse-index.txt#L69-L74

Thanks,
-Stolee
diff mbox series

Patch

diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh
index 236ab530284..74792b5ebbc 100755
--- a/t/t1092-sparse-checkout-compatibility.sh
+++ b/t/t1092-sparse-checkout-compatibility.sh
@@ -1151,6 +1151,22 @@  test_expect_success 'clean' '
 	test_sparse_match test_path_is_dir folder1
 '
 
+test_expect_success 'show (cached blobs/trees)' '
+	init_repos &&
+
+	test_all_match git show :a &&
+	test_all_match git show :deep/a &&
+	test_sparse_match git show :folder1/a &&
+
+	# Asking "git show" for directories in the index
+	# does not work as implemented. The error message is
+	# different for a full checkout and a sparse checkout
+	# when the directory is outside of the cone.
+	test_all_match test_must_fail git show :deep/ &&
+	test_must_fail git -C full-checkout show :folder1/ &&
+	test_sparse_match test_must_fail git show :folder1/
+'
+
 test_expect_success 'submodule handling' '
 	init_repos &&