On Mon, Jul 16, 2018 at 10:27:17AM -0700, Jonathan Tan wrote: > In a087cc9819 ("git-gc --auto: protect ourselves from accumulated > cruft", 2007-09-17), the user was warned if there were too many > unreachable loose objects. This made sense at the time, because gc > couldn't prune them safely. But subsequently, git prune learned the > ability to not prune recently created loose objects, making pruning able > to be done more safely, and gc was made to automatically prune old > unreachable loose objects in 25ee9731c1 ("gc: call "prune --expire > 2.weeks.ago" by default", 2008-03-12). > > This makes the warning unactionable by the user, as any loose objects > left are not deleted yet because of safety, and "git prune" is not a > command that the user is recommended to run directly anyway. I'm not sure if this tells the whole story. You may still run into a case where auto-gc runs over and over during the grace period, because you have a bunch of objects which are not reachable and not yet ready to be expired. So a gc cannot make forward progress until the 2-week expiration, and the way to break the cycle is to run an immediate "prune". So while I completely agree that it's not a great thing to encourage users to blindly run "git prune", I think it _is_ actionable. But... > This was noticed when a daemonized gc run wrote this warning to the log > file, and returned 0; but a subsequent run merely read the log file, saw > that it is non-empty and returned -1 (which is inconsistent in that such > a run should return 0, as it did the first time). Yes, this got much worse with daemonized gc. The warning blocks further runs. And then even after the 2-week period, you still cannot make further progress until the user steps in! I think we dealt with that in a831c06a2b (gc: ignore old gc.log files, 2017-02-10). So now we won't run gc for a day, but eventually we may make further progress. So the warning _is_ still doing something useful there (it's blocking immediate auto-gc and kicking in the 1-day threshold). I agree that the "-1" return is a little funny. Perhaps on the reading side we should detect that the log contains only a "warning" line and adjust our exit code accordingly. Ultimately, I think Git should avoid keeping unreachable objects as loose in the first place, which would make this whole problem go away. There's some discussion in this thread: https://public-inbox.org/git/87inc89j38.fsf@xxxxxxxxxxxxxxxxxxx/ -Peff