Re: [PATCH v2 3/3] archive: do not read .gitattributes in working directory
Show 30 quoted lines
> René Scharfe <rene.scharfe@lsrfire.ath.cx> writes:
>
>> René Scharfe schrieb:
>>>> I
>>>> think it makes sense to create a separate script for the new tests and
>>>> eventually move the existing archive attribute tests there.
>>> Something like this?
>> I forgot to add tests against bare repositories. Otherwise I'd noticed
>> earlier that read_attr() is only called for non-bare repositories
>> currently, i.e. your patches won't allow reading of .gitattribute files
>> from the tree in bare repos.
>
> Curious.
>
> Shouldn't the call chain look like:
>
> write_archive()
> ->write_archive_entries()
> ->unpack_trees() to read the tree into the in-core index
> ->git_attr_set_direction()
> ->read_tree_recursive()
> ->write_archive_entry()
> ->git_checkattr()
>
> Ah, bootstrap_attr_stack() and prepare_attr_stack() still assume that you
> won't be doing any per-level attributes in a bare repository because the
> concept of attributes is inherently tied to having a work tree from their
> point of view.
>
> How about this "mostly re-indent with four line removal" patch?
Plus the following (on top of Duy's GIT_ATTR_INDEX patch)?
diff --git a/attr.c b/attr.c
index f5917de..cce561b 100644
--- a/attr.c
+++ b/attr.c
@@ -672,6 +672,8 @@ int git_checkattr(const char *path, int num, struct git_attr_check *check)
void git_attr_set_direction(enum git_attr_direction new, struct index_state *istate)
{
enum git_attr_direction old = direction;
+ if (is_bare_repository())
+ new = GIT_ATTR_INDEX;
direction = new;
if (new != old)
drop_attr_stack();