On Tue, Dec 20, 2016 at 6:19 AM, Stefan Beller <sbeller@xxxxxxxxxx> wrote: >> On 12/19, Stefan Beller wrote: > This code is heavily inspired by refs/files-backend.c which upon > closer inspection only retries directory things within the git directory > (which is assumed to be accessed in parallel by different invocations > of Git) I take inspiration from lock/temp files on the other hand. Could we keep some sort of "undo journal" as we move along and clear it when the "transaction" is completed? The good thing about lock files is, even if you die() or SIGTERM'd, rolling back can still take place (but it has to be something very simple, like removing or renaming because you don't want to do big things in a signal handler). If things turn out to be complicated and risky to be executed in an unknown context, we could still print a helpful message like "yeah you're in trouble, maybe try this and this, or consult git mailing list. We apologise for the inconvenience," -- Duy