mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-11 07:18:28 +01:00
utils/fs: checking files ownership in 'move' (#4348)
This commit is contained in:
@@ -227,6 +227,11 @@ class FileMissingError(DvcException):
|
||||
)
|
||||
|
||||
|
||||
class FileOwnershipError(DvcException):
|
||||
def __init__(self, path):
|
||||
super().__init__(f"file '{path}' not owned by user! ")
|
||||
|
||||
|
||||
class DvcIgnoreInCollectedDirError(DvcException):
|
||||
def __init__(self, ignore_dirname):
|
||||
super().__init__(
|
||||
|
||||
+11
-5
@@ -8,7 +8,7 @@ import sys
|
||||
import nanotime
|
||||
from shortuuid import uuid
|
||||
|
||||
from dvc.exceptions import DvcException
|
||||
from dvc.exceptions import DvcException, FileOwnershipError
|
||||
from dvc.system import System
|
||||
from dvc.utils import dict_md5
|
||||
|
||||
@@ -95,15 +95,21 @@ def move(src, dst, mode=None):
|
||||
dst = os.path.abspath(dst)
|
||||
tmp = f"{dst}.{uuid()}"
|
||||
|
||||
try:
|
||||
if mode is not None:
|
||||
os.chmod(src, mode)
|
||||
except OSError as e:
|
||||
if e.errno not in [errno.EACCES, errno.EPERM]:
|
||||
raise
|
||||
else:
|
||||
raise FileOwnershipError(src)
|
||||
|
||||
if os.path.islink(src):
|
||||
shutil.copy(src, tmp)
|
||||
os.unlink(src)
|
||||
_unlink(src, _chmod)
|
||||
else:
|
||||
shutil.move(src, tmp)
|
||||
|
||||
if mode is not None:
|
||||
os.chmod(tmp, mode)
|
||||
|
||||
shutil.move(tmp, dst)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user