On Thu, Dec 15, 2016 at 04:13:38PM -0800, Junio C Hamano wrote: > > So I think complaining to the user is the right thing to do here. I > > started to write a patch to have index-pack notice when it needs a repo > > and doesn't have one, but the logic is actually a bit unclear. Do we > > need to complain early _just_ when --stdin is specified, or does that > > miss somes cases? Likewise, are there cases where --stdin can operate > > without a repo? I couldn't think of any. > > I think there are two and only two major modes; --stdin wants to put > the result in the repository it is working on, while the other mode > takes a filename to deposit the result in, so the latter does not > technically need a repository. OK. That's easy to check for, then. Reverse-engineering that logic from the actual calls in index-pack.c:final() is complicated. But certainly basing it on --stdin is what I would have expected. > > That strategy _might_ be a problem for some programs, which would want > > to notice the issue early before doing work. But it seems like a > > reasonable outcome for index-pack. Thoughts? > > That is, once we know which codepaths should require a repository, I > think it is reasonable to add a check that is done earlier than the > place where we currently try to see where we have one (which could > be deep in the callchain). But we are all human and can miss things, > so the BUG() thing is probably fine. We are cooking it exactly because > we would want to find such corner cases we missed, no? Right, that was my original intent in adding the BUG(): to catch unhandled cases, and then do the appropriate thing earlier. I was just questioning whether the appropriate thing in some cases might be dying at the BUG(), just with a more friendly message. That has the benefit of being very easy to implement, and never wrong (e.g., forbidding a case that actually _doesn't_ need to look at the repo). But if this case really is just "if (from_stdin)" that's quite easy, too. -Peff