On Fri, 8 Jan 2010, Junio C Hamano wrote: > > Given pathspecs that share a common prefix, ls-files optimized its call > into recursive directory reader by starting at the common prefix > directory. > > If you have a directory "t" with an untracked file "t/junk" in it, but the > top-level .gitignore file told us to ignore "t/", this resulted in an > unexpected behaviour: Ok, I'm not sure how "unexpected" this is, since arguably you are overriding the ignore file by _being_ in that directory (the same way index contents override ignore files), but I could go either way on that. Your patch looks fine, although I think you did this in a very odd way. > + at = 0; > + memcpy(path, path_, len); > + while (1) { > + char *cp; > + path[at] = '\0'; > + /* > + * NOTE! NOTE! NOTE!: we might want to actually lstat(2) > + * path[] to make sure it is a directory. > + */ > + if (excluded(dir, path, &dtype)) > + return 1; The above starts by testing the empty string, and then after that test it goes on to the next directory component. That is just _odd_. Wouldn't it be more natural to write the loop the other way around, ie _first_ look up the next directory component, and _then_ do the exclude processing for thoose components? Or is there some subtle reason I'm missing for actually checking the empty name? Linus -- 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