[PATCH 3 of 4] diff: accept "dict" as diff option

Boris FELD boris.feld at octobus.net
Fri Jun 15 08:48:34 UTC 2018



On 24/05/2018 15:43, Yuya Nishihara wrote:
> On Thu, 24 May 2018 10:38:56 +0200, Boris Feld wrote:
>> # HG changeset patch
>> # User Boris Feld <boris.feld at octobus.net>
>> # Date 1526993961 -7200
>> #      Tue May 22 14:59:21 2018 +0200
>> # Node ID d76075d78a860ea2b3e01f3c05969cd0b8839f35
>> # Parent  2f2232e5f0b60a3dd591ea16dfffc3c0a050acdc
>> # EXP-Topic diff-cleanup
>> # Available At https://bitbucket.org/octobus/mercurial-devel/
>> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r d76075d78a86
>> diff: accept "dict" as diff option
>> diff --git a/mercurial/context.py b/mercurial/context.py
>> --- a/mercurial/context.py
>> +++ b/mercurial/context.py
>> @@ -34,7 +34,6 @@ from . import (
>>       patch,
>>       pathutil,
>>       phases,
>> -    pycompat,
>>       repoview,
>>       revlog,
>>       scmutil,
>> @@ -302,9 +301,8 @@ class basectx(object):
>>               ctx2 = self.p1()
>>           if ctx2 is not None:
>>               ctx2 = self._repo[ctx2]
>> -        diffopts = patch.diffopts(self._repo.ui, pycompat.byteskwargs(opts))
>>           return patch.diff(self._repo, ctx2, self, match=match, changes=changes,
>> -                          opts=diffopts, losedatafn=losedatafn, prefix=prefix,
>> +                          opts=opts, losedatafn=losedatafn, prefix=prefix,
> I think this goes the opposite direction. We've introduced patch.diff*opts()
> functions because initializing diffopts by patch.diffopts() tends to be buggy.
Creating diffopts object requires the patch module. This creates a cycle 
in places where we would need it.

We have a slight preference on passing opts as dict as it would simplify 
callers code, but it's not a strong preference.
>
> I'd rather force callers of ctx.diff() to build a diffopts object.
Do you see a way to solves the import cycle?


More information about the Mercurial-devel mailing list