On Tue, Jun 21, 2016 at 12:54:11AM +0200, René Scharfe wrote: > > Unfortunately, it's quite an expensive test to run. For one > > thing, unless your filesystem supports files with holes, it > > takes 64GB of disk space (you might think piping straight to > > `hash-object --stdin` would be better, but it's not; that > > tries to buffer all 64GB in RAM!). Furthermore, hashing and > > compressing the object takes several minutes of CPU time. > > > > We could ship just the resulting compressed object data as a > > loose object, but even that takes 64MB. So sadly, this code > > path remains untested in the test suite. > > If we could set the limit to a lower value than 8GB for testing then we > could at least check if the extended header is written, e.g. if ustar_size() > could be convinced to return 0 every time using a hidden command line > parameter or an environment variable or something better. Yes, we could do that, though I think it loses most of the value of the test. We can check that if we hit an arbitrary value we generate the pax header, but I think what we _really_ care about is: did we generate an output that somebody else's tar implementation can handle. And for the smaller-than-64GB case, GNU tar happily handles our existing output (though I suspect other tars might fail at "only" 8GB). > > +static inline unsigned long ustar_size(uintmax_t size) > > +{ > > + if (size < 077777777777UL) > > Shouldn't that be less-or-equal? Yeah, you're right (and for the one in the next patch, too). > > + if (ustar_size(size) != size) > > + strbuf_append_ext_header_uint(&ext_header, "size", size); > > It needs "S_ISREG(mode) && " as well, no? In practice it probably doesn't > matter (until someone stores a 8GB long symlink target), but the size field > should only be set for regular files. Thanks for noticing that. I remembered wondering that when I was early in debugging/diagnosing, but forgot to follow up on it. I agree it's unlikely in practice, but we should have consistent checks (I think it would actually make sense to move the ISREG check inside ustar_size, and then we can apply it consistently here and when generating the header; my goal with ustar_size() was to avoid having the same logic in multiple places). -Peff -- 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