[PATCH 5 of 7] reachableroots: use internal "revstates" array to test if rev is a root
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Tue Aug 18 14:32:55 CDT 2015
On 08/18/2015 12:26 PM, Pierre-Yves David wrote:
>
>
> On 08/18/2015 07:42 AM, Yuya Nishihara wrote:
>> # HG changeset patch
>> # User Yuya Nishihara <yuya at tcha.org>
>> # Date 1439534609 -32400
>> # Fri Aug 14 15:43:29 2015 +0900
>> # Node ID 93e5cd30d2ff9b63f11616054cb647d6ac998053
>> # Parent 2ca0b48b6de1c79bc205e7a660a5531c125cad9e
>> reachableroots: use internal "revstates" array to test if rev is a root
>>
>> The main goal of this patch series is to reduce the use of PyXxx()
>> function
>> that is likely to require ugly error handling and inc/decref. Plus,
>> this is
>> faster than using PySet_Contains().
>>
>> revset #0: 0::tip
>> 0) 0.004168
>> 1) 0.003678 88%
>>
>> This patch ignores out-of-range roots as they are in the pure
>> implementation.
>> Because reachable sets are calculated from heads, and out-of-range
>> heads raise
>> IndexError, we can just take out-of-range roots as unreachable.
>> Otherwise,
>> the test of "hg log -Gr '. + wdir()'" would fail.
>>
>> "heads" argument is changed to a list. Should we have to rename the C
>> function
>> as its signature is changed?
>
> Do we actually need (take advantage of) theses argument being a list?
> Could it take an arbitrary iterable? This would allow use to pass
> arbitrary smartset.
So reading more of the current implementation, it seems we are not doing
anything specific with the list (beside iterating over it) and nothing
special with the set beside membership (removed in this series).
So, I think we should enforce the argument to be smartsets and use
smartset available API in the C code.
that would probably justify a signature change, but we never released
this code, so I'm unsure. If the old/new code raise proper exception
when passed the new/argument and fallback to the pure implementation, I
do not think we need to change the name
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list