Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GH-73991: Add pathlib.Path.copy() #119058

Merged
merged 19 commits into from
Jun 14, 2024
Merged

Conversation

barneygale
Copy link
Contributor

@barneygale barneygale commented May 14, 2024

Add a Path.copy() method that copies the content of one file to another.

This method is similar to shutil.copyfile() but differs in the following ways:

The method is deliberately less specified than the shutil functions to allow OS-specific optimizations that might copy more or less metadata.

Incorporates code by @illia-v and @giampaolo from #81338 and #93152 respectively.


📚 Documentation preview 📚: https://cpython-previews--119058.org.readthedocs.build/

Add a `Path.copy()` method that copies a file to a target file or directory
using `shutil.copy2()`.

In the private pathlib ABCs, we add a version that supports copying from
one instance of `PathBase` to another. We don't copy metadata, because
doing so probably requires new APIs that haven't been designed yet.
@barneygale barneygale changed the title GH-73991: Add pathlib.Path.copy() method. GH-73991: Add pathlib.Path.copy() May 15, 2024
@barneygale
Copy link
Contributor Author

Marking this PR as a draft, because I think we'll need to introduce os.copy() first.

@barneygale barneygale marked this pull request as draft May 27, 2024 14:40
@barneygale barneygale marked this pull request as ready for review June 3, 2024 06:42
@barneygale barneygale requested a review from zooba June 3, 2024 20:56
Copy link
Member

@zooba zooba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some thoughts, nothing I'd necessarily block the PR on. I like the way it looks overall!

Doc/library/pathlib.rst Outdated Show resolved Hide resolved
Lib/pathlib/_local.py Outdated Show resolved Hide resolved
Lib/pathlib/_abc.py Outdated Show resolved Hide resolved
Lib/pathlib/_local.py Outdated Show resolved Hide resolved
Lib/pathlib/_os.py Outdated Show resolved Hide resolved
Lib/pathlib/_os.py Outdated Show resolved Hide resolved
Lib/pathlib/_os.py Outdated Show resolved Hide resolved
Modules/_winapi.c Outdated Show resolved Hide resolved
@barneygale barneygale requested review from zooba and eryksun June 12, 2024 22:07
@zooba
Copy link
Member

zooba commented Jun 12, 2024

Looks fine to me, but I only quickly reskimmed it. I'll be away for the next few days, so don't wait for me if you guys think it's ready.

@barneygale barneygale merged commit 7c38097 into python:main Jun 14, 2024
33 checks passed
mrahtz pushed a commit to mrahtz/cpython that referenced this pull request Jun 30, 2024
Add a `Path.copy()` method that copies the content of one file to another.

This method is similar to `shutil.copyfile()` but differs in the following ways:

- Uses `fcntl.FICLONE` where available (see pythonGH-81338)
- Uses `os.copy_file_range` where available (see pythonGH-81340)
- Uses `_winapi.CopyFile2` where available, even though this copies more metadata than the other implementations. This makes `WindowsPath.copy()` more similar to `shutil.copy2()`.

The method is presently _less_ specified than the `shutil` functions to allow OS-specific optimizations that might copy more or less metadata.

Incorporates code from pythonGH-81338 and pythonGH-93152.

Co-authored-by: Eryk Sun <[email protected]>
noahbkim pushed a commit to hudson-trading/cpython that referenced this pull request Jul 11, 2024
Add a `Path.copy()` method that copies the content of one file to another.

This method is similar to `shutil.copyfile()` but differs in the following ways:

- Uses `fcntl.FICLONE` where available (see pythonGH-81338)
- Uses `os.copy_file_range` where available (see pythonGH-81340)
- Uses `_winapi.CopyFile2` where available, even though this copies more metadata than the other implementations. This makes `WindowsPath.copy()` more similar to `shutil.copy2()`.

The method is presently _less_ specified than the `shutil` functions to allow OS-specific optimizations that might copy more or less metadata.

Incorporates code from pythonGH-81338 and pythonGH-93152.

Co-authored-by: Eryk Sun <[email protected]>
estyxx pushed a commit to estyxx/cpython that referenced this pull request Jul 17, 2024
Add a `Path.copy()` method that copies the content of one file to another.

This method is similar to `shutil.copyfile()` but differs in the following ways:

- Uses `fcntl.FICLONE` where available (see pythonGH-81338)
- Uses `os.copy_file_range` where available (see pythonGH-81340)
- Uses `_winapi.CopyFile2` where available, even though this copies more metadata than the other implementations. This makes `WindowsPath.copy()` more similar to `shutil.copy2()`.

The method is presently _less_ specified than the `shutil` functions to allow OS-specific optimizations that might copy more or less metadata.

Incorporates code from pythonGH-81338 and pythonGH-93152.

Co-authored-by: Eryk Sun <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants