[PATCH 3 of 7] transaction: add onclose hook for pre-close logic
Durham Goode
durham at fb.com
Tue Mar 25 20:45:05 CDT 2014
On 3/25/14 6:23 PM, "David Soria Parra" <davidsp at fb.com> wrote:
>Durham Goode <durham at fb.com> writes:
>
>> # HG changeset patch
>> # User Durham Goode <durham at fb.com>
>> # Date 1395701867 25200
>> # Mon Mar 24 15:57:47 2014 -0700
>> # Node ID c84f51f8f92e0a3db4888ac9739f43fd866cac20
>> # Parent 08595987c5b0e8af5aa8fec4debd7260f5a79e8f
>> transaction: add onclose hook for pre-close logic
>>
>> Adds an optional onclose parameter to transactions that gets called
>>just before
>> the transaction is committed. This allows things that build up data
>>over the
>> course of the transaction (like the fncache) to commit their data.
>>
>> diff --git a/mercurial/transaction.py b/mercurial/transaction.py
>> --- a/mercurial/transaction.py
>> +++ b/mercurial/transaction.py
>> @@ -42,12 +42,14 @@
>> opener.unlink(journal)
>>
>> class transaction(object):
>> - def __init__(self, report, opener, journal, after=None,
>>createmode=None):
>> + def __init__(self, report, opener, journal, after=None,
>>createmode=None,
>> + onclose=None):
>> self.count = 1
>> self.usages = 1
>> self.report = report
>> self.opener = opener
>> self.after = after
>> + self.onclose = onclose
>> self.entries = []
>> self.map = {}
>> self.journal = journal
>> @@ -126,6 +128,9 @@
>> @active
>> def close(self):
>> '''commit the transaction'''
>> + if self.count == 1 and self.onclose:
>> + self.onclose()
>> +
>I think we can do a
>
> if self.onclose:
> self.onclose()
>
>just after
>
> self.count -= 1
> if self.count != 0:
> return
>
>so together with the rest of the actions done
>the last reference is closed.
I thought about that, but if onclose throws an exception, the tr.release()
won't call abort if self.count == 0. So I need to do onclose before count
is decremented.
More information about the Mercurial-devel
mailing list