utils/fs: checking files ownership in 'move' (#4348) (#4832)

utils/fs: checking files ownership in 'move' (#4348)
This commit is contained in:
danielfleischer
2020-11-12 14:00:48 +01:00
committed by GitHub
parent 3daeeaffdb
commit 8e738262ad
2 changed files with 16 additions and 5 deletions
+5
View File
@@ -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
View File
@@ -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)