René Scharfe <rene.scharfe@xxxxxxxxxxxxxx> 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? attr.c | 48 ++++++++++++++++++++++-------------------------- 1 files changed, 22 insertions(+), 26 deletions(-) diff --git a/attr.c b/attr.c index 37ca288..f5917de 100644 --- a/attr.c +++ b/attr.c @@ -468,13 +468,11 @@ static void bootstrap_attr_stack(void) elem->prev = attr_stack; attr_stack = elem; - if (!is_bare_repository()) { - elem = read_attr(GITATTRIBUTES_FILE, 1); - elem->origin = strdup(""); - elem->prev = attr_stack; - attr_stack = elem; - debug_push(elem); - } + elem = read_attr(GITATTRIBUTES_FILE, 1); + elem->origin = strdup(""); + elem->prev = attr_stack; + attr_stack = elem; + debug_push(elem); elem = read_attr_from_file(git_path(INFOATTRIBUTES_FILE), 1); if (!elem) @@ -535,25 +533,23 @@ static void prepare_attr_stack(const char *path, int dirlen) /* * Read from parent directories and push them down */ - if (!is_bare_repository()) { - while (1) { - char *cp; - - len = strlen(attr_stack->origin); - if (dirlen <= len) - break; - strbuf_reset(&pathbuf); - strbuf_add(&pathbuf, path, dirlen); - strbuf_addch(&pathbuf, '/'); - cp = strchr(pathbuf.buf + len + 1, '/'); - strcpy(cp + 1, GITATTRIBUTES_FILE); - elem = read_attr(pathbuf.buf, 0); - *cp = '\0'; - elem->origin = strdup(pathbuf.buf); - elem->prev = attr_stack; - attr_stack = elem; - debug_push(elem); - } + while (1) { + char *cp; + + len = strlen(attr_stack->origin); + if (dirlen <= len) + break; + strbuf_reset(&pathbuf); + strbuf_add(&pathbuf, path, dirlen); + strbuf_addch(&pathbuf, '/'); + cp = strchr(pathbuf.buf + len + 1, '/'); + strcpy(cp + 1, GITATTRIBUTES_FILE); + elem = read_attr(pathbuf.buf, 0); + *cp = '\0'; + elem->origin = strdup(pathbuf.buf); + elem->prev = attr_stack; + attr_stack = elem; + debug_push(elem); } /* -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html