aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClosedPort22 <44864697+ClosedPort22@users.noreply.github.com>2022-11-07 23:24:30 +0800
committerGitHub <noreply@github.com>2022-11-07 20:54:30 +0530
commitfbb0ee7747b8e3657c9c50d26b728eb4c75d1899 (patch)
treef0b9f89b8535d966f5be31154f665eac1b95f86f
parentc7e4ab278a19e0d4e0eb9626660a4634df964364 (diff)
downloadhypervideo-pre-fbb0ee7747b8e3657c9c50d26b728eb4c75d1899.tar.lz
hypervideo-pre-fbb0ee7747b8e3657c9c50d26b728eb4c75d1899.tar.xz
hypervideo-pre-fbb0ee7747b8e3657c9c50d26b728eb4c75d1899.zip
[compat] Fix `shutils.move` in restricted ACL mode on BSD (#5309)
Authored by: ClosedPort22, pukkandan
-rw-r--r--yt_dlp/compat/shutil.py30
-rw-r--r--yt_dlp/postprocessor/movefilesafterdownload.py2
2 files changed, 31 insertions, 1 deletions
diff --git a/yt_dlp/compat/shutil.py b/yt_dlp/compat/shutil.py
new file mode 100644
index 000000000..23239d5ce
--- /dev/null
+++ b/yt_dlp/compat/shutil.py
@@ -0,0 +1,30 @@
+# flake8: noqa: F405
+from shutil import * # noqa: F403
+
+from .compat_utils import passthrough_module
+
+passthrough_module(__name__, 'shutil')
+del passthrough_module
+
+
+import sys
+
+if sys.platform.startswith('freebsd'):
+ import errno
+ import os
+ import shutil
+
+ # Workaround for PermissionError when using restricted ACL mode on FreeBSD
+ def copy2(src, dst, *args, **kwargs):
+ if os.path.isdir(dst):
+ dst = os.path.join(dst, os.path.basename(src))
+ shutil.copyfile(src, dst, *args, **kwargs)
+ try:
+ shutil.copystat(src, dst, *args, **kwargs)
+ except PermissionError as e:
+ if e.errno != getattr(errno, 'EPERM', None):
+ raise
+ return dst
+
+ def move(*args, copy_function=copy2, **kwargs):
+ return shutil.move(*args, copy_function=copy_function, **kwargs)
diff --git a/yt_dlp/postprocessor/movefilesafterdownload.py b/yt_dlp/postprocessor/movefilesafterdownload.py
index 436d13227..23b09248c 100644
--- a/yt_dlp/postprocessor/movefilesafterdownload.py
+++ b/yt_dlp/postprocessor/movefilesafterdownload.py
@@ -1,7 +1,7 @@
import os
-import shutil
from .common import PostProcessor
+from ..compat import shutil
from ..utils import (
PostProcessingError,
decodeFilename,