From 66dcd5e54fd8fb1f9413b4fac04e073984ed0713 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 26 Feb 2022 12:29:32 -0500 Subject: [PATCH] Use samefile from stdlib, supported on Windows since Python 3.2. --- changelog.d/3137.change.rst | 1 + setuptools/command/easy_install.py | 20 ++------------------ setuptools/package_index.py | 3 +-- 3 files changed, 4 insertions(+), 20 deletions(-) create mode 100644 changelog.d/3137.change.rst diff --git a/changelog.d/3137.change.rst b/changelog.d/3137.change.rst new file mode 100644 index 0000000000..e4186054a2 --- /dev/null +++ b/changelog.d/3137.change.rst @@ -0,0 +1 @@ +Use samefile from stdlib, supported on Windows since Python 3.2. diff --git a/setuptools/command/easy_install.py b/setuptools/command/easy_install.py index 07b45e5914..63403d1917 100644 --- a/setuptools/command/easy_install.py +++ b/setuptools/command/easy_install.py @@ -70,7 +70,7 @@ warnings.filterwarnings("default", category=pkg_resources.PEP440Warning) __all__ = [ - 'samefile', 'easy_install', 'PthDistributions', 'extract_wininst_cfg', + 'easy_install', 'PthDistributions', 'extract_wininst_cfg', 'get_exe_prefixes', ] @@ -79,22 +79,6 @@ def is_64bit(): return struct.calcsize("P") == 8 -def samefile(p1, p2): - """ - Determine if two paths reference the same file. - - Augments os.path.samefile to work on Windows and - suppresses errors if the path doesn't exist. - """ - both_exist = os.path.exists(p1) and os.path.exists(p2) - use_samefile = hasattr(os.path, 'samefile') and both_exist - if use_samefile: - return os.path.samefile(p1, p2) - norm_p1 = os.path.normpath(os.path.normcase(p1)) - norm_p2 = os.path.normpath(os.path.normcase(p2)) - return norm_p1 == norm_p2 - - def _to_bytes(s): return s.encode('utf8') @@ -928,7 +912,7 @@ def install_egg(self, egg_path, tmpdir): # noqa: C901 ensure_directory(destination) dist = self.egg_distribution(egg_path) - if not samefile(egg_path, destination): + if not os.path.samefile(egg_path, destination): if os.path.isdir(destination) and not os.path.islink(destination): dir_util.remove_tree(destination, dry_run=self.dry_run) elif os.path.exists(destination): diff --git a/setuptools/package_index.py b/setuptools/package_index.py index 051e523a57..4b127f8c54 100644 --- a/setuptools/package_index.py +++ b/setuptools/package_index.py @@ -680,8 +680,7 @@ def gen_setup(self, filename, fragment, tmpdir): # Make sure the file has been downloaded to the temp dir. if os.path.dirname(filename) != tmpdir: dst = os.path.join(tmpdir, basename) - from setuptools.command.easy_install import samefile - if not samefile(filename, dst): + if not os.path.samefile(filename, dst): shutil.copy2(filename, dst) filename = dst