On Fri, Sep 30, 2016 at 03:36:30PM -0400, Jeff King wrote: > @@ -1639,6 +1666,18 @@ static const char *unpack(int err_fd, struct shallow_info *si) > argv_array_push(&child.args, alt_shallow_file); > } > > + tmp_objdir = tmp_objdir_create(); > + if (!tmp_objdir) > + return "unable to create temporary object directory"; > + child.env = tmp_objdir_env(tmp_objdir); One thing to note here: this new code kicks in all the time. My reasoning was that there's basically no time you _wouldn't_ want it to, and certainly that was the case for us when I wrote it. But I tried to think of user-visible changes. Here's what I came up with: - we currently leave the tmp_pack_* for a failed push sitting around (e.g., if the client hangs up halfway through, or index-pack rejects the pack for some reason). But with this series, it would always be cleaned up. That's a very good thing if you're running a git hosting site. It might make things harder if you're debugging. I don't think it's a good reason not to enable this by default, but it _could_ be a reason to have a config switch to turn it off temporarily (or just leave the "incoming-*" directory in place). - the environment that pre-receive pack runs in has access to objects that the rest of the repository doesn't. So if you were to do something silly in your pre-receive like: # reject the push, but log a copy of the objects git update-ref refs/rejected/$(date +%s) $new_sha1 exit 1 Then your ref-update would succeed (you have $new_sha1), but the objects would be deleted immediately afterwards. I find this a somewhat questionable pattern, and I have no idea if anybody else has thought of it. But it _does_ work today, and not with this series. I don't think it would be too hard to put a config conditional around this tmp_objdir_create(). And then all of the tmp_objdir_env() calls would just return NULL, and effectively become noops. -Peff