diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -8,7 +8,6 @@ import collections import contextlib -import errno import os import stat import uuid @@ -1035,13 +1034,11 @@ class dirstate: try: with tracing.log('dirstate.walk.traverse listdir %s', nd): entries = listdir(join(nd), stat=True, skip=skip) - except OSError as inst: - if inst.errno in (errno.EACCES, errno.ENOENT): - match.bad( - self.pathto(nd), encoding.strtolocal(inst.strerror) - ) - continue - raise + except (PermissionError, FileNotFoundError) as inst: + match.bad( + self.pathto(nd), encoding.strtolocal(inst.strerror) + ) + continue for f, kind, st in entries: # Some matchers may return files in the visitentries set, # instead of 'this', if the matcher explicitly mentions them diff --git a/mercurial/fileset.py b/mercurial/fileset.py --- a/mercurial/fileset.py +++ b/mercurial/fileset.py @@ -6,7 +6,6 @@ # GNU General Public License version 2 or any later version. -import errno import re from .i18n import _ @@ -575,16 +574,14 @@ class matchctx: return False try: return predfn(fctx) - except (IOError, OSError) as e: - # open()-ing a directory fails with EACCES on Windows - if e.errno in ( - errno.ENOENT, - errno.EACCES, - errno.ENOTDIR, - errno.EISDIR, - ): - return False - raise + # open()-ing a directory fails with PermissionError on Windows + except ( + FileNotFoundError, + PermissionError, + NotADirectoryError, + IsADirectoryError, + ): + return False else: diff --git a/mercurial/lock.py b/mercurial/lock.py --- a/mercurial/lock.py +++ b/mercurial/lock.py @@ -38,9 +38,8 @@ def _getlockprefix(): if pycompat.sysplatform.startswith(b'linux'): try: result += b'/%x' % os.stat(b'/proc/self/ns/pid').st_ino - except OSError as ex: - if ex.errno not in (errno.ENOENT, errno.EACCES, errno.ENOTDIR): - raise + except (FileNotFoundError, PermissionError, NotADirectoryError): + pass return result diff --git a/mercurial/posix.py b/mercurial/posix.py --- a/mercurial/posix.py +++ b/mercurial/posix.py @@ -581,9 +581,7 @@ def statfiles(files): st = lstat(nf) if getkind(st.st_mode) not in _wantedkinds: st = None - except OSError as err: - if err.errno not in (errno.ENOENT, errno.ENOTDIR): - raise + except (FileNotFoundError, NotADirectoryError): st = None yield st diff --git a/setup.py b/setup.py --- a/setup.py +++ b/setup.py @@ -95,7 +95,6 @@ else: ispypy = "PyPy" in sys.version import ctypes -import errno import stat, subprocess, time import re import shutil @@ -1422,15 +1421,12 @@ class RustExtension(Extension): ) try: subprocess.check_call(cargocmd, env=env, cwd=self.rustsrcdir) - except OSError as exc: - if exc.errno == errno.ENOENT: - raise RustCompilationError("Cargo not found") - elif exc.errno == errno.EACCES: - raise RustCompilationError( - "Cargo found, but permission to execute it is denied" - ) - else: - raise + except FileNotFoundError: + raise RustCompilationError("Cargo not found") + except PermissionError: + raise RustCompilationError( + "Cargo found, but permission to execute it is denied" + ) except subprocess.CalledProcessError: raise RustCompilationError( "Cargo failed. Working directory: %r, "