[PATCH 1 of 2] convert: temporarily disable hg p2 optimization

Durham Goode durham at fb.com
Thu Oct 22 12:15:34 CDT 2015



On 10/22/15 3:16 AM, Mads Kiilerich wrote:
> On 10/16/2015 11:14 PM, Durham Goode wrote:
>>
>>
>> On 10/16/15 2:11 PM, Durham Goode wrote:
>>>
>>>
>>> On 10/15/15 2:46 PM, Mads Kiilerich wrote:
>>>> # HG changeset patch
>>>> # User Mads Kiilerich <madski at unity3d.com>
>>>> # Date 1444945384 -7200
>>>> #      Thu Oct 15 23:43:04 2015 +0200
>>>> # Node ID 8c7010f12530b69c86d2bcdd70098ced582ece49
>>>> # Parent  07db7e95c464537aeb2dd7aba39de0813eaffd04
>>>> convert: temporarily disable hg p2 optimization
>>>>
>>>> Disabling the optimization gives a test change. That proves that 
>>>> the optimized
>>>> code path is wrong. That seems to have been introduced in 
>>>> a75d24539aba.
>>>>
>>>> diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py
>>>> --- a/hgext/convert/hg.py
>>>> +++ b/hgext/convert/hg.py
>>>> @@ -221,7 +221,7 @@ class mercurial_sink(converter_sink):
>>>>           files = dict(files)
>>>>             def getfilectx(repo, memctx, f):
>>>> -            if p2ctx and f in p2files and f not in copies:
>>>> +            if p2ctx and f in p2files and f not in copies and False:
>>>>                   self.ui.debug('reusing %s from p2\n' % f)
>>>>                   try:
>>>>                       return p2ctx[f]
>>>> diff --git a/tests/test-convert-filemap.t 
>>>> b/tests/test-convert-filemap.t
>>>> --- a/tests/test-convert-filemap.t
>>>> +++ b/tests/test-convert-filemap.t
>>>> @@ -723,11 +723,11 @@ test converting merges into a repo that
>>>>     $ hg -R merge-test2 manifest -r tip
>>>>     converted/a
>>>>     converted/b
>>>> -  x
>>>>     $ hg -R merge-test2 log -G -T '{shortest(node)} {desc}\n{files 
>>>> % "- {file}\n"}\n'
>>>> -  o    6eaa merge a & b
>>>> +  o    0390 merge a & b
>>>>     |\   - converted/a
>>>>     | |  - toberemoved
>>>> +  | |  - x
>>>>     | |
>>>>     | o  2995 add b
>>>>     | |  - converted/b
>>> I don't understand what you're saying here.
>>>
>>> In the test, it takes merge-test1 (which adds file 'x' in rev 1), 
>>> and it calls convert in such a way that it imports the contents of 
>>> merge-test2 on top of the 'x' commit.  That means 'x' should not be 
>>> affected by the convert, and that it should appear in the tip 
>>> manifest, as it currently does.
>>>
>>> Your change makes the convert delete 'x', when 'x' isn't related to 
>>> the incoming changes in any way.  So am I missing something?
>> I got my repo-names reversed.  Here's the same text with the correct 
>> repo names:
>>
>> In the test, it takes merge-test1 (which edits files 'a' and 'b') and 
>> merge-test2 (which adds 'x'), and it calls convert in such a way that 
>> it imports the contents of merge-test1 on top of the 'x' commit.  
>> That means 'x' should not be affected by the convert, and that it 
>> should appear in the tip manifest, as it currently does.
>>
>> Your change makes the convert delete 'x', when 'x' isn't related to 
>> the incoming changes in any way.  So am I missing something?
>
> First, do you agree that the p2clean part just is an optimization? Or 
> should we intentionally put different semantics in that?
>
> /Mads
>
p2clean may be an optimization, but p2clean is no longer used inside 
getfilectx(). We now use p2files, which is a union of p2clean and the 
files that exist in the target p2 that don't exist anywhere in the source.

p2files is necessary because it is the only way target-p2 specific data 
can make it into the commit (because the way convert works is to take 
target-p1 and apply the incoming changes on top of it, which would lose 
changes specific to target-p2)


More information about the Mercurial-devel mailing list