Jeff King wrote:
> On Mon, Jul 16, 2018 at 12:54:31PM -0700, Jonathan Nieder wrote:
>> Even restricting attention to the warning, not the exit code, I think
>> you are saying the current behavior is acceptable. I do not believe
>> it is.
>
> I didn't say that at all. The current situation sucks,
Thanks for clarifying. That helps.
> and I think the
> right solution is to pack the unreachable objects instead of exploding
> them.
That seems like a huge widening in scope relative to what this
original patch tackled. I'm not aware of a way to do this without
breaking compatibility with the current (broken) race prevention. If
you're saying that breaking compatibility in that way is okay with
you, then great!
[...]
>> I think you are saying Jonathan's patch makes the behavior
>> worse, and I'm not seeing it. Can you describe an example user
>> interaction where the current behavior would be better than the
>> behavior after Jonathan's patch? That might help make this discussion
>> more concrete.
>
> It makes it worse because there is nothing to throttle a "gc --auto"
> that is making no progress.
[...]
> With the current code, that produces a bunch of annoying warnings for
> every commit ("I couldn't gc because the last gc reported a warning").
> But after Jonathan's patch, every single commit will do a full gc of the
> repository. In this tiny repository that's relatively quick, but in a
> real repo it's a ton of CPU and I/O, all for nothing.
I see. Do I understand correctly that if we find a way to print the
warning but not error out, that would be good enough for you?
[...]
>> Have you looked over the discussion in "Loose objects and unreachable
>> objects" in Documentation/technical/hash-function-transition.txt? Do
>> you have thoughts on it (preferrably in a separate thread)?
>
> It seems to propose putting the unreachable objects into a pack. Which
> yes, I absolutely agree with (as I thought I'd been saying in every
> single email in this thread).
I figured you were proposing something like
https://public-inbox.org/git/[email protected]/,
which is still racy (because it does not handle the freshening in a safe
way).
[...]
> Even if we were going to remove this message to help the
> daemonized case, I think we'd want to retain it for the non-daemon case.
Interesting. That should be doable, e.g. following the approach
described below.
[...]
>> A simple way to do that without changing formats is to truncate the
>> file when exiting with status 0.
>
> That's a different behavior than what we do now (and what was suggested
> earlier), in that it assumes that anything written to stderr is OK for
> gc to hide from the user if the process exits with code zero.
>
> That's probably OK in most cases, though I wonder if there are corner
> cases. For example, if you have a corrupt ref, we used to say "error:
> refs/heads/foo does not point to a valid object!" but otherwise ignore
> it. These days git-gc sets REF_PARANOIA=1, so we'll actually barf on a
> corrupt ref. But I wonder if there are other cases lurking.
What decides it for me is that the user did not invoke "git gc --auto"
explicitly, so anything "git gc --auto" prints is tangential to what
the user was trying to do. If the gc failed, that is worth telling
them, but if e.g. it encountered a disk I/O error reading and
succeeded on retry (to make up a fake example), then that's likely
worth logging to syslog but it's not something the user asked to be
directly informed about.
Thanks,
Jonathan