[PATCH] changelog: make native head computation aware of filtering

Laurent Charignon lcharignon at fb.com
Wed May 20 18:41:21 CDT 2015



On 5/20/15, 4:09 PM, "Pierre-Yves David" <pierre-yves.david at ens-lyon.org>
wrote:

>
>
>On 05/20/2015 06:01 PM, Laurent Charignon wrote:
>> # HG changeset patch
>> # User Laurent Charignon <lcharignon at fb.com>
>> # Date 1432162260 25200
>> #      Wed May 20 15:51:00 2015 -0700
>> # Node ID a89ff1dfbc175d72d6654ec6e94e52fe81c1875c
>> # Parent  a39c35e8e559e238f311c647679e8de3b91748c6
>> changelog: make native head computation aware of filtering
>>
>> The code to compute the heads natively was returning all of the heads of
>> the repository regardless of filtering state. This patch makes the
>>native
>> implementation of headrevs() discard the filtered heads matching the
>>pure
>> implementation.
>>
>> diff --git a/mercurial/changelog.py b/mercurial/changelog.py
>> --- a/mercurial/changelog.py
>> +++ b/mercurial/changelog.py
>> @@ -175,7 +175,9 @@
>>       def headrevs(self):
>>           if self.filteredrevs:
>>               try:
>> -                return self.index.headrevsfiltered(self.filteredrevs)
>> +                return [h for h
>> +                          in
>>self.index.headrevsfiltered(self.filteredrevs)
>> +                          if h not in self.filteredrevs]
>
>This "does not make senses to me"².
>
>1) the reason for which we pass 'self.filteredrevs' to
>'headrevsfiltered' is for it to respect this filtering. If it return
>anything unfiltered it is clearly not doing its job.
>
>2) You cannot just drop filtered head like that. consider the following
>case:
>
>   x B
>   |
>   o A
>   |
>
>Unfiltered heads are [B].
>visible heads are [A].
>
>Just dropping filtered entry from unfiltered heads would give your
>"visible heads are []".

I will look into it again
>
>
>-- 
>Pierre-Yves David



More information about the Mercurial-devel mailing list