diff options
author | Barney Gale <barney.gale@gmail.com> | 2021-04-23 21:48:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-23 13:48:52 -0700 |
commit | f24e2e5464ba6498e7b8d73c3f9b417d59fd1b26 (patch) | |
tree | cef5b64a2c1c204cc45ec778be4689f0ed5d811d /Lib/test/test_pathlib.py | |
parent | e047239eafefe8b19725efffe7756443495cf78b (diff) | |
download | cpython-f24e2e5464ba6498e7b8d73c3f9b417d59fd1b26.tar.gz cpython-f24e2e5464ba6498e7b8d73c3f9b417d59fd1b26.zip |
bpo-39950: add `pathlib.Path.hardlink_to()` method that supersedes `link_to()` (GH-18909)
The argument order of `link_to()` is reversed compared to what one may expect, so:
a.link_to(b)
Might be expected to create *a* as a link to *b*, in fact it creates *b* as a link to *a*, making it function more like a "link from". This doesn't match `symlink_to()` nor the documentation and doesn't seem to be the original author's intent.
This PR deprecates `link_to()` and introduces `hardlink_to()`, which has the same argument order as `symlink_to()`.
Diffstat (limited to 'Lib/test/test_pathlib.py')
-rw-r--r-- | Lib/test/test_pathlib.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index 0c89b6ef141..6ed08f7e70c 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1925,7 +1925,8 @@ class _BasePathTest(object): # linking to another path. q = P / 'dirA' / 'fileAA' try: - p.link_to(q) + with self.assertWarns(DeprecationWarning): + p.link_to(q) except PermissionError as e: self.skipTest('os.link(): %s' % e) self.assertEqual(q.stat().st_size, size) @@ -1937,6 +1938,24 @@ class _BasePathTest(object): self.assertEqual(os.stat(r).st_size, size) self.assertTrue(q.stat) + @unittest.skipUnless(hasattr(os, "link"), "os.link() is not present") + def test_hardlink_to(self): + P = self.cls(BASE) + target = P / 'fileA' + size = target.stat().st_size + # linking to another path. + link = P / 'dirA' / 'fileAA' + link.hardlink_to(target) + self.assertEqual(link.stat().st_size, size) + self.assertTrue(os.path.samefile(target, link)) + self.assertTrue(target.exists()) + # Linking to a str of a relative path. + link2 = P / 'dirA' / 'fileAAA' + target2 = rel_join('fileA') + link2.hardlink_to(target2) + self.assertEqual(os.stat(target2).st_size, size) + self.assertTrue(link2.exists()) + @unittest.skipIf(hasattr(os, "link"), "os.link() is present") def test_link_to_not_implemented(self): P = self.cls(BASE) |