Skip to content

Commit

Permalink
bpo-39895: Move pathlib.Path.touch() implementation into the path a…
Browse files Browse the repository at this point in the history
…ccessor. (GH-18838)
  • Loading branch information
barneygale authored Apr 7, 2021
1 parent 04732ca commit 986da8e
Showing 1 changed file with 18 additions and 24 deletions.
42 changes: 18 additions & 24 deletions Lib/pathlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,23 @@ def link(self, src, dst):
def symlink(self, src, dst, target_is_directory=False):
raise NotImplementedError("os.symlink() not available on this system")

utime = os.utime
def touch(self, path, mode=0o666, exist_ok=True):
if exist_ok:
# First try to bump modification time
# Implementation note: GNU touch uses the UTIME_NOW option of
# the utimensat() / futimens() functions.
try:
os.utime(path, None)
except OSError:
# Avoid exception chaining
pass
else:
return
flags = os.O_CREAT | os.O_WRONLY
if not exist_ok:
flags |= os.O_EXCL
fd = os.open(path, flags, mode)
os.close(fd)

if hasattr(os, "readlink"):
readlink = os.readlink
Expand Down Expand Up @@ -1100,13 +1116,6 @@ def _opener(self, name, flags, mode=0o666):
# A stub for the opener argument to built-in open()
return self._accessor.open(self, flags, mode)

def _raw_open(self, flags, mode=0o777):
"""
Open the file pointed by this path and return a file descriptor,
as os.open() does.
"""
return self._accessor.open(self, flags, mode)

# Public API

@classmethod
Expand Down Expand Up @@ -1283,22 +1292,7 @@ def touch(self, mode=0o666, exist_ok=True):
"""
Create this file with the given access mode, if it doesn't exist.
"""
if exist_ok:
# First try to bump modification time
# Implementation note: GNU touch uses the UTIME_NOW option of
# the utimensat() / futimens() functions.
try:
self._accessor.utime(self, None)
except OSError:
# Avoid exception chaining
pass
else:
return
flags = os.O_CREAT | os.O_WRONLY
if not exist_ok:
flags |= os.O_EXCL
fd = self._raw_open(flags, mode)
os.close(fd)
self._accessor.touch(self, mode, exist_ok)

def mkdir(self, mode=0o777, parents=False, exist_ok=False):
"""
Expand Down

0 comments on commit 986da8e

Please sign in to comment.