# HG changeset patch # User Pulkit Goyal # Date 2019-02-15 14:36:57 # Node ID 9de6c4f616081d39ee585636c3a6c605d3a6acd1 # Parent 88d4477ac4f60d9965bcc5b2352ad2c96b60c82c obsutil: don't assume leftctx and rightctx repo as same Backed out changeset 520514af2d93. hgsubversion can pass leftctx and rightctx which are instances of two different repositories. This was making tests fail on hgsubversion with 4.9. The two different instances are: (Pdb) p rightctx.repo() > (Pdb) p leftctx.repo() > Differential Revision: https://phab.mercurial-scm.org/D5968 diff --git a/mercurial/obsutil.py b/mercurial/obsutil.py --- a/mercurial/obsutil.py +++ b/mercurial/obsutil.py @@ -397,14 +397,17 @@ def _cmpdiff(leftctx, rightctx): This is a first and basic implementation, with many shortcoming. """ - # lefctx.repo() and rightctx.repo() are the same here - repo = leftctx.repo() - diffopts = diffutil.diffallopts(repo.ui, {'git': True}) + diffopts = diffutil.diffallopts(leftctx.repo().ui, {'git': True}) + # Leftctx or right ctx might be filtered, so we need to use the contexts # with an unfiltered repository to safely compute the diff - leftunfi = repo.unfiltered()[leftctx.rev()] + + # leftctx and rightctx can be from different repository views in case of + # hgsubversion, do don't try to access them from same repository + # rightctx.repo() and leftctx.repo() are not always the same + leftunfi = leftctx._repo.unfiltered()[leftctx.rev()] leftdiff = leftunfi.diff(opts=diffopts) - rightunfi = repo.unfiltered()[rightctx.rev()] + rightunfi = rightctx._repo.unfiltered()[rightctx.rev()] rightdiff = rightunfi.diff(opts=diffopts) left, right = (0, 0)