From: René Scharfe Date: Tue, 14 Apr 2009 21:15:36 GMT Subject: Re: [PATCH v2 3/3] archive: do not read .gitattributes in working directory Message-ID: <49E4FCF8.3050207@lsrfire.ath.cx> In-Reply-To: <7vk55nakge.fsf@gitster.siamese.dyndns.org> Junio C Hamano schrieb: > René Scharfe 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();