mirror of
https://github.com/thegeeklab/git-batch.git
synced 2024-11-13 23:00:39 +00:00
fix: use custom copy function to ignore extended attributes
This commit is contained in:
parent
4b424d5e7c
commit
dd6af2416a
@ -14,6 +14,7 @@ import git
|
||||
from gitbatch import __version__
|
||||
from gitbatch.logging import SingleLog
|
||||
from gitbatch.utils import normalize_path, to_bool
|
||||
from gitbatch.utils.copy import copy_file_with_basic_stats
|
||||
|
||||
|
||||
class GitBatch:
|
||||
@ -135,6 +136,7 @@ class GitBatch:
|
||||
repo["dest"],
|
||||
ignore=shutil.ignore_patterns(".git"),
|
||||
dirs_exist_ok=self.config["ignore_existing"],
|
||||
copy_function=copy_file_with_basic_stats,
|
||||
)
|
||||
except FileExistsError:
|
||||
self._file_exist_handler()
|
||||
|
@ -1,4 +1,3 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Global utility methods and classes."""
|
||||
|
||||
import os
|
36
gitbatch/utils/copy.py
Normal file
36
gitbatch/utils/copy.py
Normal file
@ -0,0 +1,36 @@
|
||||
"""Copy file utils."""
|
||||
|
||||
import shutil
|
||||
from os import utime
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def _coerce_to_path(source, dest):
|
||||
return Path(source).resolve(), Path(dest).resolve()
|
||||
|
||||
|
||||
def copy_basic_file_stats(source, dest):
|
||||
"""
|
||||
Copy only the m_time and a_time attributes from source to destination.
|
||||
|
||||
Both are expected to exist. The extended attribute copy has sideeffects
|
||||
with SELinux and files copied from temporary directories and copystat
|
||||
doesn't allow disabling these copies.
|
||||
"""
|
||||
source, dest = _coerce_to_path(source, dest)
|
||||
src_stat = source.stat()
|
||||
utime(dest, ns=(src_stat.st_atime_ns, src_stat.st_mtime_ns))
|
||||
|
||||
|
||||
def copy_file_with_basic_stats(source, dest):
|
||||
"""
|
||||
Simplified copy2 to copy extended file attributes.
|
||||
|
||||
Only the access time and modified times are copied as
|
||||
extended attribute copy has sideeffects with SELinux and files
|
||||
copied from temporary directories.
|
||||
"""
|
||||
source, dest = _coerce_to_path(source, dest)
|
||||
|
||||
shutil.copy(source, dest)
|
||||
copy_basic_file_stats(source, dest)
|
Loading…
Reference in New Issue
Block a user