Don't copy file file ownership, permissions and metadata

When building the default template with pelican installed through a
distro package manager, the copied files are usually owned by root and
likely have 644 or 444 set which aborts the build.
Ownership and permissions should be based on the destination directory
and umask, not on the referenced files.
This commit is contained in:
Sandro Jäckel 2023-02-18 00:00:16 +01:00
commit 401c24bdf4
No known key found for this signature in database
GPG key ID: 3AF5A43A3EECC2E5

View file

@ -300,7 +300,7 @@ def copy(source, destination, ignores=None):
logger.info('Creating directory %s', dst_dir) logger.info('Creating directory %s', dst_dir)
os.makedirs(dst_dir) os.makedirs(dst_dir)
logger.info('Copying %s to %s', source_, destination_) logger.info('Copying %s to %s', source_, destination_)
copy_file_metadata(source_, destination_) copy_file(source_, destination_)
elif os.path.isdir(source_): elif os.path.isdir(source_):
if not os.path.exists(destination_): if not os.path.exists(destination_):
@ -330,20 +330,17 @@ def copy(source, destination, ignores=None):
dst_path = os.path.join(dst_dir, o) dst_path = os.path.join(dst_dir, o)
if os.path.isfile(src_path): if os.path.isfile(src_path):
logger.info('Copying %s to %s', src_path, dst_path) logger.info('Copying %s to %s', src_path, dst_path)
copy_file_metadata(src_path, dst_path) copy_file(src_path, dst_path)
else: else:
logger.warning('Skipped copy %s (not a file or ' logger.warning('Skipped copy %s (not a file or '
'directory) to %s', 'directory) to %s',
src_path, dst_path) src_path, dst_path)
def copy_file_metadata(source, destination): def copy_file(source, destination):
'''Copy a file and its metadata (perm bits, access times, ...)''' '''Copy a file'''
# This function is a workaround for Android python copystat
# bug ([issue28141]) https://bugs.python.org/issue28141
try: try:
shutil.copy2(source, destination) shutil.copyfile(source, destination)
except OSError as e: except OSError as e:
logger.warning("A problem occurred copying file %s to %s; %s", logger.warning("A problem occurred copying file %s to %s; %s",
source, destination, e) source, destination, e)