diff --git a/dvc/command/remote.py b/dvc/command/remote.py index 8c6dbc3ef3..683c040f42 100644 --- a/dvc/command/remote.py +++ b/dvc/command/remote.py @@ -19,6 +19,10 @@ def __init__(self, args): class CmdRemoteAdd(CmdRemoteConfig): def run(self): + if self.args.default: + logger.info( + "Setting '{}' as a default remote.".format(self.args.name) + ) self.remote_config.add( self.args.name, self.args.url, diff --git a/dvc/external_repo.py b/dvc/external_repo.py index 8f53da4ef8..758d8f4215 100644 --- a/dvc/external_repo.py +++ b/dvc/external_repo.py @@ -7,8 +7,9 @@ from funcy import retry -from dvc.config import NoRemoteError +from dvc.config import NoRemoteError, ConfigError from dvc.exceptions import NoRemoteInExternalRepoError +from dvc.remote import RemoteConfig from dvc.exceptions import NoOutputInExternalRepoError from dvc.exceptions import OutputNotFoundError from dvc.utils.fs import remove @@ -69,6 +70,22 @@ def _external_repo(url=None, rev=None, cache_dir=None): repo = Repo(new_path) try: + # check if the URL is local and no default remote is present + # add default remote pointing to the original repo's cache location + if os.path.isdir(url): + rconfig = RemoteConfig(repo.config) + if not _default_remote_set(rconfig): + original_repo = Repo(url) + try: + rconfig.add( + "auto-generated-upstream", + original_repo.cache.local.cache_dir, + default=True, + level=Config.LEVEL_LOCAL, + ) + finally: + original_repo.close() + if cache_dir is not None: cache_config = CacheConfig(repo.config) cache_config.set_dir(cache_dir, level=Config.LEVEL_LOCAL) @@ -113,3 +130,19 @@ def _clone_repo(url, path): git = Git.clone(url, path) git.close() + + +def _default_remote_set(rconfig): + """ + Checks if default remote config is present. + Args: + rconfig: a remote config + + Returns: + True if the default remote config is set, else False + """ + try: + rconfig.get_default() + return True + except ConfigError: + return False diff --git a/dvc/remote/config.py b/dvc/remote/config.py index dccad52ba3..bbda7fc445 100644 --- a/dvc/remote/config.py +++ b/dvc/remote/config.py @@ -105,7 +105,6 @@ def add(self, name, url, default=False, force=False, level=None): level=level, ) if default: - logger.info("Setting '{}' as a default remote.".format(name)) self.config.set( Config.SECTION_CORE, Config.SECTION_CORE_REMOTE, diff --git a/tests/conftest.py b/tests/conftest.py index 46b059d5ef..3eca524c07 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,7 +7,6 @@ from git import Repo from git.exc import GitCommandNotFound -from dvc.remote.config import RemoteConfig from dvc.remote.ssh.connection import SSHConnection from dvc.repo import Repo as DvcRepo from dvc.utils.compat import cast_bytes_py2 @@ -148,11 +147,6 @@ def erepo(repo_dir): repo.dvc.scm.add([stage_foo.path, stage_bar.path, stage_data_dir.path]) repo.dvc.scm.commit("init repo") - rconfig = RemoteConfig(repo.dvc.config) - rconfig.add("upstream", repo.dvc.cache.local.cache_dir, default=True) - repo.dvc.scm.add([repo.dvc.config.config_file]) - repo.dvc.scm.commit("add remote") - repo.create("version", "master") repo.dvc.add("version") repo.dvc.scm.add([".gitignore", "version.dvc"])