On Wed, Jun 21, 2017 at 11:15:01AM -0700, Junio C Hamano wrote:
> > + if (!oi->typep && !oi->sizep && !oi->disk_sizep &&
> > + !oi->delta_base_sha1 && !oi->typename && !oi->contentp &&
> > + !oi->populate_u) {
> > + oi->whence = OI_PACKED;
> > + return 0;
> > + }
> > +
>
> ... this "if" statement feels like a maintenance nightmare. The
> intent of the guard, I think, is "when the call wants absolutely
> nothing but whence", but the implementation of the guard will not
> stay true to the intent whenever somebody adds a new field to oi.
>
> I wonder if it makes more sense to have a new field "whence_only",
> which is set only by such a specialized caller, which this guard
> checks (and no other fields).
The other nice thing about whence_only is that it flips the logic. So
any existing callers which depend on filling the union automatically
will not be affected (though I would be surprised if there are any such
callers; most of that information isn't actually that interesting).
-Peff