◐ Shell
clean mode source ↗

GH-73991: Support preserving metadata in `pathlib.Path.copy()` by barneygale · Pull Request #120806 · python/cpython

Add *preserve_metadata* keyword-only argument to `pathlib.Path.copy()`,
defaulting to false. When set to true, we copy timestamps, permissions,
extended attributes and flags where available, like `shutil.copystat()`.
The argument has no effect on Windows, where metadata is always copied.

In the pathlib ABCs we copy the file permissions with `PathBase.chmod()`
where supported. In the future we might want to support a more generic
public interface for copying metadata between different types of `PathBase`
object, but it would be premature here.

barneygale added a commit to barneygale/cpython that referenced this pull request

Jul 6, 2024
Follow-up to python#120806. Use `os_helper.skip_unless_xattr` to skip testing
xattr preservation when unsupported.

barneygale added a commit that referenced this pull request

Jul 7, 2024
Follow-up to #120806. Use `os_helper.skip_unless_xattr` to skip testing
xattr preservation when unsupported.

noahbkim pushed a commit to hudson-trading/cpython that referenced this pull request

Jul 11, 2024
…ython#120806)

Add *preserve_metadata* keyword-only argument to `pathlib.Path.copy()`, defaulting to false. When set to true, we copy timestamps, permissions, extended attributes and flags where available, like `shutil.copystat()`. The argument has no effect on Windows, where metadata is always copied.

Internally (in the pathlib ABCs), path types gain `_readable_metadata` and `_writable_metadata` attributes. These sets of strings describe what kinds of metadata can be retrieved and stored. We take an intersection of `source._readable_metadata` and `target._writable_metadata` to minimise reads/writes. A new `_read_metadata()` method accepts a set of metadata keys and returns a dict with those keys, and a new `_write_metadata()` method accepts a dict of metadata. We *might* make these public in future, but it's hard to justify while the ABCs are still private.

noahbkim pushed a commit to hudson-trading/cpython that referenced this pull request

Jul 11, 2024
…thon#121444)

Follow-up to python#120806. Use `os_helper.skip_unless_xattr` to skip testing
xattr preservation when unsupported.

estyxx pushed a commit to estyxx/cpython that referenced this pull request

Jul 17, 2024
…ython#120806)

Add *preserve_metadata* keyword-only argument to `pathlib.Path.copy()`, defaulting to false. When set to true, we copy timestamps, permissions, extended attributes and flags where available, like `shutil.copystat()`. The argument has no effect on Windows, where metadata is always copied.

Internally (in the pathlib ABCs), path types gain `_readable_metadata` and `_writable_metadata` attributes. These sets of strings describe what kinds of metadata can be retrieved and stored. We take an intersection of `source._readable_metadata` and `target._writable_metadata` to minimise reads/writes. A new `_read_metadata()` method accepts a set of metadata keys and returns a dict with those keys, and a new `_write_metadata()` method accepts a dict of metadata. We *might* make these public in future, but it's hard to justify while the ABCs are still private.

estyxx pushed a commit to estyxx/cpython that referenced this pull request

Jul 17, 2024
…thon#121444)

Follow-up to python#120806. Use `os_helper.skip_unless_xattr` to skip testing
xattr preservation when unsupported.