On Thu, Dec 15, 2016 at 04:13:38PM -0800, Junio C Hamano wrote:
quoted
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.
quoted
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