Skip to content

Commit

Permalink
Fix import issue without remote config in the target
Browse files Browse the repository at this point in the history
Fix the import issue when target does not have
remote config.

Signed-off-by: Sujith H <[email protected]>
  • Loading branch information
sharidasan authored and sharidas committed Jan 19, 2020
1 parent 7f5e4a9 commit 1b7eda2
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
10 changes: 9 additions & 1 deletion dvc/dependency/repo.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from dvc.exceptions import OutputNotFoundError
from dvc.exceptions import NoOutputInExternalRepoError
from dvc.exceptions import PathMissingError
from dvc.config import NoRemoteError
from dvc.utils.fs import fs_copy
from dvc.path_info import PathInfo
from dvc.scm import SCM
Expand Down Expand Up @@ -91,7 +92,14 @@ def fetch(self):

out = repo.find_out_by_relpath(self.def_path)
with repo.state:
repo.cloud.pull(out.get_used_cache())
try:
repo.cloud.pull(out.get_used_cache())
except NoRemoteError:
# It would not be good idea to raise exception if the
# file is already present in the cache
if not self.repo.cache.local.changed_cache(out.checksum):
return out
raise

return out

Expand Down
22 changes: 22 additions & 0 deletions tests/func/test_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
from dvc.exceptions import DownloadError
from dvc.exceptions import PathMissingError
from dvc.exceptions import NoOutputInExternalRepoError
from dvc.config import NoRemoteError
from dvc.stage import Stage
from dvc.system import System
from dvc.utils.fs import makedirs
from dvc.compat import fspath
import dvc.data_cloud as cloud
from tests.utils import trees_equal


Expand Down Expand Up @@ -56,6 +58,26 @@ def test_import_git_file(erepo_dir, tmp_dir, dvc, scm, src_is_dvc):
}


def test_import_cached_file(erepo_dir, tmp_dir, dvc, scm, monkeypatch):
src = "some_file"
dst = "some_file_imported"

with erepo_dir.chdir():
erepo_dir.dvc_gen({src: "hello"}, commit="add a regular file")

tmp_dir.dvc_gen({dst: "hello"})
(tmp_dir / dst).unlink()

remote_exception = NoRemoteError("dvc import")
with patch.object(cloud.DataCloud, "pull", side_effect=remote_exception):
tmp_dir.dvc.imp(fspath(erepo_dir), src, dst)

assert (tmp_dir / dst).is_file()
assert filecmp.cmp(
fspath(erepo_dir / src), fspath(tmp_dir / dst), shallow=False
)


@pytest.mark.parametrize("src_is_dvc", [True, False])
def test_import_git_dir(erepo_dir, tmp_dir, dvc, scm, src_is_dvc):
if not src_is_dvc:
Expand Down

0 comments on commit 1b7eda2

Please sign in to comment.