Hi,
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 agree that given the better alternatives we have now, "git prune" is
not such a great option these days. E.g. should it say
struct strbuf now = STRBUF_INIT;
date_stamp(&now);
...
"run 'git gc --prune=%s' to remove them", now.buf);
?
> 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).
Here's a series to address that motivating case. Thanks for the
careful analysis and to Peff for the patient explanations.
Sincerely,
Jonathan Nieder (3):
gc: improve handling of errors reading gc.log
gc: exit with status 128 on failure
gc: do not return error for prior errors in daemonized mode
Documentation/config.txt | 3 ++-
builtin/gc.c | 53 ++++++++++++++++++++++++++--------------
t/t6500-gc.sh | 6 ++---
3 files changed, 40 insertions(+), 22 deletions(-)