mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
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()`.
This commit is contained in:
parent
e047239eaf
commit
f24e2e5464
5 changed files with 64 additions and 4 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue