blob: 3d9b745be0cc17e6876993138e51e80927deae28 [file] [log] [blame]
# 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