]> git.ipfire.org Git - thirdparty/git.git/commit - attr.c
attr.c: read attributes in a sparse directory
authorShuqi Liang <cheskaqiqi@gmail.com>
Fri, 11 Aug 2023 14:22:10 +0000 (10:22 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 11 Aug 2023 16:44:51 +0000 (09:44 -0700)
commit4723ae1007f94cbb391c4fb5a042adccd038d9ae
treec9ce949dd7bc59af29f97832da281267d36e5329
parentfd4faf7a5d5d92ca3e50f5a6ee2f94676d83530b
attr.c: read attributes in a sparse directory

Before this patch, git check-attr was unable to read the attributes from
a .gitattributes file within a sparse directory. The original comment
was operating under the assumption that users are only interested in
files or directories inside the cones. Therefore, in the original code,
in the case of a cone-mode sparse-checkout, we didn't load the
.gitattributes file.

However, this behavior can lead to missing attributes for files inside
sparse directories, causing inconsistencies in file handling.

To resolve this, revise 'git check-attr' to allow attribute reading for
files in sparse directories from the corresponding .gitattributes files:

1.Utilize path_in_cone_mode_sparse_checkout() and index_name_pos_sparse
to check if a path falls within a sparse directory.

2.If path is inside a sparse directory, employ the value of
index_name_pos_sparse() to find the sparse directory containing path and
path relative to sparse directory. Proceed to read attributes from the
tree OID of the sparse directory using read_attr_from_blob().

3.If path is not inside a sparse directory,ensure that attributes are
fetched from the index blob with read_blob_data_from_index().

Change the test 'check-attr with pathspec outside sparse definition' to
'test_expect_success' to reflect that the attributes inside a sparse
directory can now be read. Ensure that the sparse index case works
correctly for git check-attr to illustrate the successful handling of
attributes within sparse directories.

Helped-by: Victoria Dye <vdye@github.com>
Signed-off-by: Shuqi Liang <cheskaqiqi@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
attr.c
t/t1092-sparse-checkout-compatibility.sh