mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
get-url/import-url: save dependency before downloading (#4049)
This allows us to properly process the errors like missing target. Fixes #3897
This commit is contained in:
+2
-2
@@ -35,14 +35,14 @@ class LocalOutput(BaseOutput):
|
||||
# FIXME: if we have Windows path containing / or posix one with \
|
||||
# then we have #2059 bug and can't really handle that.
|
||||
p = self.TREE_CLS.PATH_CLS(path)
|
||||
if not p.is_absolute():
|
||||
if self.stage and not p.is_absolute():
|
||||
p = self.stage.wdir / p
|
||||
|
||||
abs_p = os.path.abspath(os.path.normpath(p))
|
||||
return self.TREE_CLS.PATH_CLS(abs_p)
|
||||
|
||||
def __str__(self):
|
||||
if not self.is_in_repo:
|
||||
if not self.repo or not self.is_in_repo:
|
||||
return str(self.def_path)
|
||||
|
||||
cur_dir = os.getcwd()
|
||||
|
||||
+3
-1
@@ -56,7 +56,9 @@ class LocalRemoteTree(BaseRemoteTree):
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
return self.repo.state
|
||||
from dvc.state import StateNoop
|
||||
|
||||
return self.repo.state if self.repo else StateNoop()
|
||||
|
||||
@cached_property
|
||||
def work_tree(self):
|
||||
|
||||
@@ -16,4 +16,6 @@ def get_url(url, out=None):
|
||||
|
||||
(dep,) = dependency.loads_from(None, [url])
|
||||
(out,) = output.loads_from(None, [out], use_cache=False)
|
||||
dep.save()
|
||||
dep.download(out)
|
||||
out.save()
|
||||
|
||||
@@ -26,4 +26,5 @@ def sync_import(stage, dry=False, force=False):
|
||||
if not force and stage.already_cached():
|
||||
stage.outs[0].checkout()
|
||||
else:
|
||||
stage.save_deps()
|
||||
stage.deps[0].download(stage.outs[0])
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import pytest
|
||||
|
||||
from dvc.dependency.base import DependencyDoesNotExistError
|
||||
from dvc.repo import Repo
|
||||
|
||||
|
||||
@@ -20,3 +21,8 @@ def test_get_url_to_dir(tmp_dir, dname):
|
||||
|
||||
assert (tmp_dir / dname).is_dir()
|
||||
assert (tmp_dir / dname / "foo").read_text() == "foo contents"
|
||||
|
||||
|
||||
def test_get_url_nonexistent(tmp_dir):
|
||||
with pytest.raises(DependencyDoesNotExistError):
|
||||
Repo.get_url("nonexistent")
|
||||
|
||||
@@ -3,6 +3,7 @@ from uuid import uuid4
|
||||
|
||||
import pytest
|
||||
|
||||
from dvc.dependency.base import DependencyDoesNotExistError
|
||||
from dvc.main import main
|
||||
from dvc.stage import Stage
|
||||
from dvc.utils.fs import makedirs
|
||||
@@ -97,3 +98,8 @@ def test_import_stage_accompanies_target(tmp_dir, dvc, erepo_dir):
|
||||
|
||||
assert (tmp_dir / "dir" / "imported_file").exists()
|
||||
assert (tmp_dir / "dir" / "imported_file.dvc").exists()
|
||||
|
||||
|
||||
def test_import_url_nonexistent(dvc, erepo_dir):
|
||||
with pytest.raises(DependencyDoesNotExistError):
|
||||
dvc.imp_url(os.fspath(erepo_dir / "non-existent"))
|
||||
|
||||
Reference in New Issue
Block a user