peer-or-repo: stop relying on AttributeError in `islocal`
authorPierre-Yves David <pierre-yves.david@octobus.net>
Wed, 30 Nov 2022 13:55:15 +0100
changeset 49688 0d5b2e010614
parent 49687 b478e1b132e9
child 49689 f73f02ef8cb6
peer-or-repo: stop relying on AttributeError in `islocal` This will confused pytypes in a future changeset.
mercurial/hg.py
--- a/mercurial/hg.py	Tue Nov 29 21:42:08 2022 +0100
+++ b/mercurial/hg.py	Wed Nov 30 13:55:15 2022 +0100
@@ -164,10 +164,11 @@
 def islocal(repo):
     '''return true if repo (or path pointing to repo) is local'''
     if isinstance(repo, bytes):
-        try:
-            return _peerlookup(repo).islocal(repo)
-        except AttributeError:
-            return False
+        cls = _peerlookup(repo)
+        cls.instance  # make sure we load the module
+        if util.safehasattr(cls, 'islocal'):
+            return cls.islocal(repo)  # pytype: disable=module-attr
+        return False
     repo.ui.deprecwarn(b"use obj.local() instead of islocal(obj)", b"6.4")
     return repo.local()