Jeff King <peff@xxxxxxxx> writes: >> There's nothing for the calling program to act on on the basis of that >> error. Use status 0 consistently instead, to indicate that we decided >> not to run a gc (just like if no housekeeping was required). This >> way, repo and similar tools can get the benefit of the same behavior >> as tools like "git fetch" that ignore the exit status from gc --auto. > > I think this is a good change. > > In theory it might be useful to propagate the original exit code (_not_ > "did we see a warning or an error", but the true original exit code. But > as you note, it's not deterministic anyway (we'd miss that exit code on > the first run, or even any simultaneous runs that exit early due to lock > contention). So it's clear that callers can't really do anything robust > based on the exit code of a daemonized "gc --auto". > > I still think that "repo" should probably stop respecting the exit code. > But that's no excuse for Git not to have a sensible exit code in the > first place. I am not yet convinced that this last step to exit with 0 is a good change, even though I can understand that it would be more convenient, as there currently is no easy way for the calling script to tell two error cases apart. I think the "sensible exit code" you mention would be something like "1 for hard error, 2 for 'I am punting as I see there were previous errors---you may want to examine your repository'". If we did that from day one and documented that behaviour, nobody would have complained, but adopting that suddenly is of course a breaking change. Perhaps we should exit with 2 (not 0) in that "previous error" case by default, and then have a configuration knob to turn that 2 into 0 for those who cannot easily modify the calling script? That way, we by default will *not* break those who have been paying attention to zero-ness of the exit status, we allow those who want to treat this "prior error" case as if there were no error with just a knob, and then those who are willing to update their script can tell two cases by the exit status and act differently.