On 09/21/2011 10:17 PM, Junio C Hamano wrote: > Michael Haggerty <mhagger@xxxxxxxxxxxx> writes: >> I was thinking of using git attributes to configure a server-side >> "update" hook that does some basic sanity checking before accepting a >> push. I thought I could do something like >> [...] >> I see that there is an (undocumented) API involving >> git_attr_set_direction() that seems to let gitattributes to be read out >> of the index instead of the working tree. But I am still confused: > > The words "server side" automatically mean that there should be no working > tree, and where there is no working tree there should be no index, so the > direction should not make any difference. The attributes that are used to > help whitespace checks should come from project.git/info/attributes in > such a case [*...*]. I was just alerted by Scott Chacon's blog [1] to the fact that one can set GIT_INDEX_FILE to an arbitrary filename, thereby causing the index to be read/written from that file instead of $GIT_DIR/index. It occurred to me that this feature, along with the addition of "git check-attr --cached" in 1.7.8, can be used to give server-side access to the gitattributes for an arbitrary commit: GIT_INDEX_FILE="$(tempfile)" export GIT_INDEX_FILE git read-tree $COMMIT git check-attr --cached attr -- pathname ... rm "$GIT_INDEX_FILE" Empirically it seems to work (and it is surprisingly fast). The use of a temporary file prevents simultaneous accesses to the repository from stepping on each other. This looks like a clean solution to my problem. Or is there some hidden pitfall in this approach? Michael [1] http://progit.org/2010/04/11/environment.html -- Michael Haggerty mhagger@xxxxxxxxxxxx http://softwareswirl.blogspot.com/ -- 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