| # Copyright 2017 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| import os |
| import shutil |
| import tempfile |
| |
| try: |
| from portage.util.file_copy.reflink_linux import file_copy as _file_copy |
| except ImportError: |
| _file_copy = None |
| |
| |
| def _optimized_copyfile(src, dst): |
| """ |
| Copy the contents (no metadata) of the file named src to a file |
| named dst. |
| |
| If possible, copying is done within the kernel, and uses |
| "copy acceleration" techniques (such as reflinks). This also |
| supports sparse files. |
| |
| @param src: path of source file |
| @type src: str |
| @param dst: path of destination file |
| @type dst: str |
| """ |
| with open(src, 'rb', buffering=0) as src_file, \ |
| open(dst, 'wb', buffering=0) as dst_file: |
| _file_copy(src_file.fileno(), dst_file.fileno()) |
| |
| |
| if _file_copy is None: |
| copyfile = shutil.copyfile |
| else: |
| copyfile = _optimized_copyfile |