diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -36,7 +36,10 @@ class changectx(object): return "" % str(self) def __eq__(self, other): - return self._rev == other._rev + try: + return self._rev == other._rev + except AttributeError: + return False def __nonzero__(self): return self._rev != nullrev @@ -176,7 +179,11 @@ class filectx(object): return "" % str(self) def __eq__(self, other): - return self._path == other._path and self._changeid == other._changeid + try: + return (self._path == other._path + and self._changeid == other._changeid) + except AttributeError: + return False def filectx(self, fileid): '''opens an arbitrary revision of the file without diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -139,9 +139,9 @@ def findcopies(repo, m1, m2, ma, limit): ''' check if an apparent pair actually matches ''' c2 = ctx(f2, man[f2]) ca = c.ancestor(c2) - if c == ca or c2 == ca: + if not ca or c == ca or c2 == ca: return - if ca and ca.path() == c.path() or ca.path() == c2.path(): + if ca.path() == c.path() or ca.path() == c2.path(): copy[c.path()] = f2 copy[f2] = c.path()