From 06d6c2c25c1ddca0e7224a7e2e30597731f547da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Redzy=C5=84ski?= Date: Tue, 26 Nov 2019 12:25:10 +0100 Subject: [PATCH 1/8] test env: extract empty dir fixture to class --- tests/basic_env.py | 95 ++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 45 deletions(-) diff --git a/tests/basic_env.py b/tests/basic_env.py index 1fba67a550..786386318b 100644 --- a/tests/basic_env.py +++ b/tests/basic_env.py @@ -21,7 +21,55 @@ logger = logging.getLogger("dvc") -class TestDirFixture(object): +class TestDirFixtureBase(object): + def __init__(self): + root_dir = self.mkdtemp() + self._root_dir = os.path.realpath(root_dir) + + @property + def root_dir(self): + return self._root_dir + + def _pushd(self, d): + if not hasattr(self, "_saved_dir"): + self._saved_dir = os.path.realpath(os.curdir) + os.chdir(d) + + def _popd(self): + os.chdir(self._saved_dir) + self._saved_dir = None + + @staticmethod + def mkdtemp(base_directory=None): + prefix = "dvc-test.{}.".format(os.getpid()) + suffix = ".{}".format(shortuuid.uuid()) + return tempfile.mkdtemp( + prefix=prefix, suffix=suffix, dir=base_directory + ) + + def setUp(self): + self._pushd(self._root_dir) + + def tearDown(self): + self._popd() + try: + remove(self._root_dir) + except OSError as exc: + # We ignore this under Windows with a warning because it happened + # to be really hard to trace all not properly closed files. + # + # Best guess so far is that gitpython is the culprit: + # it opens files and uses __del__ to close them, which can happen + # late in current pythons. TestGitFixture and TestDvcFixture try + # to close that and it works on most of the tests, but not all. + # Repos and thus git repos are created all over the dvc ;) + if os.name == "nt" and exc.winerror == 32: + warnings.warn("Failed to remove test dir: " + str(exc)) + else: + raise + + +class TestDirFixture(TestDirFixtureBase): DATA_DIR = "data_dir" DATA_SUB_DIR = os.path.join(DATA_DIR, "data_sub_dir") DATA = os.path.join(DATA_DIR, "data") @@ -49,23 +97,6 @@ class TestDirFixture(object): UNICODE = "тест" UNICODE_CONTENTS = "проверка" - def __init__(self): - root_dir = self.mkdtemp() - self._root_dir = os.path.realpath(root_dir) - - @property - def root_dir(self): - return self._root_dir - - def _pushd(self, d): - if not hasattr(self, "_saved_dir"): - self._saved_dir = os.path.realpath(os.curdir) - os.chdir(d) - - def _popd(self): - os.chdir(self._saved_dir) - self._saved_dir = None - def create(self, name, contents): dname = os.path.dirname(name) if len(dname) > 0 and not os.path.isdir(dname): @@ -78,16 +109,8 @@ def create(self, name, contents): else contents.decode("utf-8") ) - @staticmethod - def mkdtemp(base_directory=None): - prefix = "dvc-test.{}.".format(os.getpid()) - suffix = ".{}".format(shortuuid.uuid()) - return tempfile.mkdtemp( - prefix=prefix, suffix=suffix, dir=base_directory - ) - def setUp(self): - self._pushd(self._root_dir) + super(TestDirFixture, self).setUp() self.create(self.FOO, self.FOO_CONTENTS) self.create(self.BAR, self.BAR_CONTENTS) self.create(self.CODE, self.CODE_CONTENTS) @@ -97,24 +120,6 @@ def setUp(self): self.create(self.DATA_SUB, self.DATA_SUB_CONTENTS) self.create(self.UNICODE, self.UNICODE_CONTENTS) - def tearDown(self): - self._popd() - try: - remove(self._root_dir) - except OSError as exc: - # We ignore this under Windows with a warning because it happened - # to be really hard to trace all not properly closed files. - # - # Best guess so far is that gitpython is the culprit: - # it opens files and uses __del__ to close them, which can happen - # late in current pythons. TestGitFixture and TestDvcFixture try - # to close that and it works on most of the tests, but not all. - # Repos and thus git repos are created all over the dvc ;) - if os.name == "nt" and exc.winerror == 32: - warnings.warn("Failed to remove test dir: " + str(exc)) - else: - raise - class TestGitFixture(TestDirFixture): N_RETRIES = 5 From b788a991f90816e0d1b0dd1b495fc0d46aa4daa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Redzy=C5=84ski?= Date: Tue, 26 Nov 2019 12:27:14 +0100 Subject: [PATCH 2/8] conftest: create empty dir fixture --- tests/conftest.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 0cdb204b88..3f62a14941 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,7 +7,7 @@ from git import Repo from git.exc import GitCommandNotFound -from .basic_env import TestDirFixture +from .basic_env import TestDirFixture, TestDirFixtureBase from .basic_env import TestDvcGitFixture from .basic_env import TestGitFixture from dvc.remote.config import RemoteConfig @@ -190,3 +190,11 @@ def git_erepo(): repo.setUp() yield repo repo.tearDown() + + +@pytest.fixture +def empty_dir(): + directory = TestDirFixtureBase() + directory.setUp() + yield directory + directory.tearDown() From b9d5933f5d965684762c41e15e52a0e53b400797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Redzy=C5=84ski?= Date: Tue, 26 Nov 2019 12:28:18 +0100 Subject: [PATCH 3/8] external repo: checkout rev before initializing repo --- dvc/external_repo.py | 15 ++++++++++++--- tests/func/test_get.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/dvc/external_repo.py b/dvc/external_repo.py index 9d90963009..d43770834c 100644 --- a/dvc/external_repo.py +++ b/dvc/external_repo.py @@ -61,11 +61,12 @@ def _external_repo(url=None, rev=None, cache_dir=None): REPO_CACHE[url, None, None] = clean_clone_path # Adjust new clone/copy to fit rev and cache_dir + + # Checkout first in case of non dvc master + checkout_revision(new_path, rev) + repo = Repo(new_path) try: - if rev is not None: - repo.scm.checkout(rev) - if cache_dir is not None: cache_config = CacheConfig(repo.config) cache_config.set_dir(cache_dir, level=Config.LEVEL_LOCAL) @@ -77,6 +78,14 @@ def _external_repo(url=None, rev=None, cache_dir=None): return new_path +def checkout_revision(repo_path, revision): + if revision is not None: + from dvc.scm import Git + + git = Git(repo_path) + git.checkout(revision) + + def clean_repos(): # Outside code should not see cache while we are removing repo_paths = list(REPO_CACHE.values()) diff --git a/tests/func/test_get.py b/tests/func/test_get.py index 2b65d51365..94ce1717c9 100644 --- a/tests/func/test_get.py +++ b/tests/func/test_get.py @@ -8,6 +8,7 @@ from dvc.config import Config from dvc.exceptions import GetDVCFileError from dvc.exceptions import UrlNotDvcRepoError +from dvc.remote import RemoteConfig from dvc.repo import Repo from dvc.system import System from dvc.utils import makedirs @@ -87,3 +88,33 @@ def test_get_to_dir(dname, erepo): assert os.path.isdir(dname) assert filecmp.cmp(erepo.FOO, dst, shallow=False) + + +@pytest.fixture +def erepo_no_dvc_master(git_erepo): + dvc_branch = "dvc_test" + git_erepo.git.git.checkout("master", b=dvc_branch) + git_erepo.dvc_branch = dvc_branch + + dvc_repo = Repo.init(git_erepo._root_dir) + stage, = dvc_repo.add([git_erepo.FOO]) + dvc_repo.scm.add([".dvc", stage.relpath]) + + rconfig = RemoteConfig(dvc_repo.config) + rconfig.add("upstream", dvc_repo.cache.local.cache_dir, default=True) + dvc_repo.scm.add([dvc_repo.config.config_file]) + + dvc_repo.scm.commit("dvc branch initial") + + git_erepo.git.git.checkout("master") + os.chdir(git_erepo._saved_dir) + yield git_erepo + + +def test_get_from_non_dvc_master(empty_dir, erepo_no_dvc_master): + Repo.get( + erepo_no_dvc_master._root_dir, + "foo", + out="foo", + rev=erepo_no_dvc_master.dvc_branch, + ) From 5c0c4239ecb1d23316555b45190ffcf8d3774fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Redzy=C5=84ski?= Date: Tue, 26 Nov 2019 12:52:38 +0100 Subject: [PATCH 4/8] rename TestDirFixtureBase --- tests/basic_env.py | 4 ++-- tests/conftest.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/basic_env.py b/tests/basic_env.py index 786386318b..af14066f1e 100644 --- a/tests/basic_env.py +++ b/tests/basic_env.py @@ -21,7 +21,7 @@ logger = logging.getLogger("dvc") -class TestDirFixtureBase(object): +class EmptyDirFixture(object): def __init__(self): root_dir = self.mkdtemp() self._root_dir = os.path.realpath(root_dir) @@ -69,7 +69,7 @@ def tearDown(self): raise -class TestDirFixture(TestDirFixtureBase): +class TestDirFixture(EmptyDirFixture): DATA_DIR = "data_dir" DATA_SUB_DIR = os.path.join(DATA_DIR, "data_sub_dir") DATA = os.path.join(DATA_DIR, "data") diff --git a/tests/conftest.py b/tests/conftest.py index 3f62a14941..082b0948cb 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,7 +7,7 @@ from git import Repo from git.exc import GitCommandNotFound -from .basic_env import TestDirFixture, TestDirFixtureBase +from .basic_env import TestDirFixture, EmptyDirFixture from .basic_env import TestDvcGitFixture from .basic_env import TestGitFixture from dvc.remote.config import RemoteConfig @@ -194,7 +194,7 @@ def git_erepo(): @pytest.fixture def empty_dir(): - directory = TestDirFixtureBase() + directory = EmptyDirFixture() directory.setUp() yield directory directory.tearDown() From 5e5c82652be91ffe70b5d11238c6939a96e13ad0 Mon Sep 17 00:00:00 2001 From: pawel Date: Wed, 27 Nov 2019 09:56:31 +0100 Subject: [PATCH 5/8] test: get: inline erepo with non-dvc master --- tests/func/test_get.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/tests/func/test_get.py b/tests/func/test_get.py index 94ce1717c9..cb364f09ab 100644 --- a/tests/func/test_get.py +++ b/tests/func/test_get.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals import filecmp +import logging import os import pytest @@ -90,31 +91,36 @@ def test_get_to_dir(dname, erepo): assert filecmp.cmp(erepo.FOO, dst, shallow=False) -@pytest.fixture -def erepo_no_dvc_master(git_erepo): +def test_get_from_non_dvc_master(empty_dir, git_erepo, caplog): + storage = empty_dir.mkdtemp() + dvc_branch = "dvc_test" git_erepo.git.git.checkout("master", b=dvc_branch) - git_erepo.dvc_branch = dvc_branch dvc_repo = Repo.init(git_erepo._root_dir) stage, = dvc_repo.add([git_erepo.FOO]) - dvc_repo.scm.add([".dvc", stage.relpath]) rconfig = RemoteConfig(dvc_repo.config) - rconfig.add("upstream", dvc_repo.cache.local.cache_dir, default=True) + rconfig.add("upstream", storage, default=True) + + dvc_repo.push() dvc_repo.scm.add([dvc_repo.config.config_file]) + dvc_repo.scm.add([".dvc", stage.relpath]) dvc_repo.scm.commit("dvc branch initial") git_erepo.git.git.checkout("master") - os.chdir(git_erepo._saved_dir) - yield git_erepo + os.chdir(empty_dir._root_dir) + + caplog.clear() + imported_file = "foo_imported" + with caplog.at_level(logging.INFO, logger="dvc"): + Repo.get(git_erepo._root_dir, "foo", out=imported_file, rev=dvc_branch) -def test_get_from_non_dvc_master(empty_dir, erepo_no_dvc_master): - Repo.get( - erepo_no_dvc_master._root_dir, - "foo", - out="foo", - rev=erepo_no_dvc_master.dvc_branch, + assert caplog.text == "" + assert filecmp.cmp( + os.path.join(git_erepo._root_dir, git_erepo.FOO), + imported_file, + shallow=False, ) From 97e4b024c1318f61cdb1f9829f319cf2d3b9f991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Redzy=C5=84ski?= Date: Mon, 2 Dec 2019 11:38:32 +0100 Subject: [PATCH 6/8] external repo: move revision check out of checkout function --- dvc/external_repo.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/dvc/external_repo.py b/dvc/external_repo.py index d43770834c..2ca5ad4dd3 100644 --- a/dvc/external_repo.py +++ b/dvc/external_repo.py @@ -62,8 +62,10 @@ def _external_repo(url=None, rev=None, cache_dir=None): # Adjust new clone/copy to fit rev and cache_dir - # Checkout first in case of non dvc master - checkout_revision(new_path, rev) + # Checkout needs to be done first because current branch might not be dvc + # DVC repository + if rev is not None: + _git_checkout(new_path, rev) repo = Repo(new_path) try: @@ -78,12 +80,11 @@ def _external_repo(url=None, rev=None, cache_dir=None): return new_path -def checkout_revision(repo_path, revision): - if revision is not None: - from dvc.scm import Git +def _git_checkout(repo_path, revision): + from dvc.scm import Git - git = Git(repo_path) - git.checkout(revision) + git = Git(repo_path) + git.checkout(revision) def clean_repos(): From f1d59dd64d350e2721fa841b26fd2608f91be20d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Redzy=C5=84ski?= Date: Mon, 2 Dec 2019 11:39:41 +0100 Subject: [PATCH 7/8] conftest: empty dir is tmp_path now --- dvc/external_repo.py | 2 +- tests/basic_env.py | 95 ++++++++++++++++++++---------------------- tests/conftest.py | 12 +++--- tests/func/test_get.py | 11 +++-- 4 files changed, 59 insertions(+), 61 deletions(-) diff --git a/dvc/external_repo.py b/dvc/external_repo.py index 2ca5ad4dd3..9b5ef49d73 100644 --- a/dvc/external_repo.py +++ b/dvc/external_repo.py @@ -62,7 +62,7 @@ def _external_repo(url=None, rev=None, cache_dir=None): # Adjust new clone/copy to fit rev and cache_dir - # Checkout needs to be done first because current branch might not be dvc + # Checkout needs to be done first because current branch might not be # DVC repository if rev is not None: _git_checkout(new_path, rev) diff --git a/tests/basic_env.py b/tests/basic_env.py index af14066f1e..1fba67a550 100644 --- a/tests/basic_env.py +++ b/tests/basic_env.py @@ -21,55 +21,7 @@ logger = logging.getLogger("dvc") -class EmptyDirFixture(object): - def __init__(self): - root_dir = self.mkdtemp() - self._root_dir = os.path.realpath(root_dir) - - @property - def root_dir(self): - return self._root_dir - - def _pushd(self, d): - if not hasattr(self, "_saved_dir"): - self._saved_dir = os.path.realpath(os.curdir) - os.chdir(d) - - def _popd(self): - os.chdir(self._saved_dir) - self._saved_dir = None - - @staticmethod - def mkdtemp(base_directory=None): - prefix = "dvc-test.{}.".format(os.getpid()) - suffix = ".{}".format(shortuuid.uuid()) - return tempfile.mkdtemp( - prefix=prefix, suffix=suffix, dir=base_directory - ) - - def setUp(self): - self._pushd(self._root_dir) - - def tearDown(self): - self._popd() - try: - remove(self._root_dir) - except OSError as exc: - # We ignore this under Windows with a warning because it happened - # to be really hard to trace all not properly closed files. - # - # Best guess so far is that gitpython is the culprit: - # it opens files and uses __del__ to close them, which can happen - # late in current pythons. TestGitFixture and TestDvcFixture try - # to close that and it works on most of the tests, but not all. - # Repos and thus git repos are created all over the dvc ;) - if os.name == "nt" and exc.winerror == 32: - warnings.warn("Failed to remove test dir: " + str(exc)) - else: - raise - - -class TestDirFixture(EmptyDirFixture): +class TestDirFixture(object): DATA_DIR = "data_dir" DATA_SUB_DIR = os.path.join(DATA_DIR, "data_sub_dir") DATA = os.path.join(DATA_DIR, "data") @@ -97,6 +49,23 @@ class TestDirFixture(EmptyDirFixture): UNICODE = "тест" UNICODE_CONTENTS = "проверка" + def __init__(self): + root_dir = self.mkdtemp() + self._root_dir = os.path.realpath(root_dir) + + @property + def root_dir(self): + return self._root_dir + + def _pushd(self, d): + if not hasattr(self, "_saved_dir"): + self._saved_dir = os.path.realpath(os.curdir) + os.chdir(d) + + def _popd(self): + os.chdir(self._saved_dir) + self._saved_dir = None + def create(self, name, contents): dname = os.path.dirname(name) if len(dname) > 0 and not os.path.isdir(dname): @@ -109,8 +78,16 @@ def create(self, name, contents): else contents.decode("utf-8") ) + @staticmethod + def mkdtemp(base_directory=None): + prefix = "dvc-test.{}.".format(os.getpid()) + suffix = ".{}".format(shortuuid.uuid()) + return tempfile.mkdtemp( + prefix=prefix, suffix=suffix, dir=base_directory + ) + def setUp(self): - super(TestDirFixture, self).setUp() + self._pushd(self._root_dir) self.create(self.FOO, self.FOO_CONTENTS) self.create(self.BAR, self.BAR_CONTENTS) self.create(self.CODE, self.CODE_CONTENTS) @@ -120,6 +97,24 @@ def setUp(self): self.create(self.DATA_SUB, self.DATA_SUB_CONTENTS) self.create(self.UNICODE, self.UNICODE_CONTENTS) + def tearDown(self): + self._popd() + try: + remove(self._root_dir) + except OSError as exc: + # We ignore this under Windows with a warning because it happened + # to be really hard to trace all not properly closed files. + # + # Best guess so far is that gitpython is the culprit: + # it opens files and uses __del__ to close them, which can happen + # late in current pythons. TestGitFixture and TestDvcFixture try + # to close that and it works on most of the tests, but not all. + # Repos and thus git repos are created all over the dvc ;) + if os.name == "nt" and exc.winerror == 32: + warnings.warn("Failed to remove test dir: " + str(exc)) + else: + raise + class TestGitFixture(TestDirFixture): N_RETRIES = 5 diff --git a/tests/conftest.py b/tests/conftest.py index 082b0948cb..ec724fceeb 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,13 +7,13 @@ from git import Repo from git.exc import GitCommandNotFound -from .basic_env import TestDirFixture, EmptyDirFixture +from .basic_env import TestDirFixture from .basic_env import TestDvcGitFixture from .basic_env import TestGitFixture 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 +from dvc.utils.compat import cast_bytes_py2, fspath # Prevent updater and analytics from running their processes os.environ[cast_bytes_py2("DVC_TEST")] = cast_bytes_py2("true") @@ -193,8 +193,6 @@ def git_erepo(): @pytest.fixture -def empty_dir(): - directory = EmptyDirFixture() - directory.setUp() - yield directory - directory.tearDown() +def empty_dir(tmp_path, monkeypatch): + monkeypatch.chdir(tmp_path) + return fspath(tmp_path) diff --git a/tests/func/test_get.py b/tests/func/test_get.py index cb364f09ab..c166b3781f 100644 --- a/tests/func/test_get.py +++ b/tests/func/test_get.py @@ -92,7 +92,7 @@ def test_get_to_dir(dname, erepo): def test_get_from_non_dvc_master(empty_dir, git_erepo, caplog): - storage = empty_dir.mkdtemp() + storage = git_erepo.mkdtemp() dvc_branch = "dvc_test" git_erepo.git.git.checkout("master", b=dvc_branch) @@ -111,12 +111,17 @@ def test_get_from_non_dvc_master(empty_dir, git_erepo, caplog): git_erepo.git.git.checkout("master") - os.chdir(empty_dir._root_dir) + os.chdir(empty_dir) caplog.clear() imported_file = "foo_imported" with caplog.at_level(logging.INFO, logger="dvc"): - Repo.get(git_erepo._root_dir, "foo", out=imported_file, rev=dvc_branch) + Repo.get( + git_erepo._root_dir, + git_erepo.FOO, + out=imported_file, + rev=dvc_branch, + ) assert caplog.text == "" assert filecmp.cmp( From ca852170c1ed590f42b2eb5ecaf5ea2f32e934d3 Mon Sep 17 00:00:00 2001 From: pawel Date: Tue, 3 Dec 2019 10:49:38 +0100 Subject: [PATCH 8/8] get: test: from non-dvc master: refactor --- dvc/external_repo.py | 5 ++++- tests/conftest.py | 8 +------- tests/func/test_get.py | 38 +++++++------------------------------- 3 files changed, 12 insertions(+), 39 deletions(-) diff --git a/dvc/external_repo.py b/dvc/external_repo.py index 9b5ef49d73..8f53da4ef8 100644 --- a/dvc/external_repo.py +++ b/dvc/external_repo.py @@ -84,7 +84,10 @@ def _git_checkout(repo_path, revision): from dvc.scm import Git git = Git(repo_path) - git.checkout(revision) + try: + git.checkout(revision) + finally: + git.close() def clean_repos(): diff --git a/tests/conftest.py b/tests/conftest.py index ec724fceeb..0cdb204b88 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -13,7 +13,7 @@ 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, fspath +from dvc.utils.compat import cast_bytes_py2 # Prevent updater and analytics from running their processes os.environ[cast_bytes_py2("DVC_TEST")] = cast_bytes_py2("true") @@ -190,9 +190,3 @@ def git_erepo(): repo.setUp() yield repo repo.tearDown() - - -@pytest.fixture -def empty_dir(tmp_path, monkeypatch): - monkeypatch.chdir(tmp_path) - return fspath(tmp_path) diff --git a/tests/func/test_get.py b/tests/func/test_get.py index c166b3781f..07551c5f36 100644 --- a/tests/func/test_get.py +++ b/tests/func/test_get.py @@ -9,10 +9,10 @@ from dvc.config import Config from dvc.exceptions import GetDVCFileError from dvc.exceptions import UrlNotDvcRepoError -from dvc.remote import RemoteConfig from dvc.repo import Repo from dvc.system import System from dvc.utils import makedirs +from dvc.utils.compat import fspath from tests.utils import trees_equal @@ -91,41 +91,17 @@ def test_get_to_dir(dname, erepo): assert filecmp.cmp(erepo.FOO, dst, shallow=False) -def test_get_from_non_dvc_master(empty_dir, git_erepo, caplog): - storage = git_erepo.mkdtemp() - - dvc_branch = "dvc_test" - git_erepo.git.git.checkout("master", b=dvc_branch) - - dvc_repo = Repo.init(git_erepo._root_dir) - stage, = dvc_repo.add([git_erepo.FOO]) - - rconfig = RemoteConfig(dvc_repo.config) - rconfig.add("upstream", storage, default=True) - - dvc_repo.push() - dvc_repo.scm.add([dvc_repo.config.config_file]) - - dvc_repo.scm.add([".dvc", stage.relpath]) - dvc_repo.scm.commit("dvc branch initial") - - git_erepo.git.git.checkout("master") - - os.chdir(empty_dir) +def test_get_from_non_dvc_master(erepo, tmp_path, monkeypatch, caplog): + monkeypatch.chdir(fspath(tmp_path)) + erepo.dvc.scm.repo.index.remove([".dvc"], r=True) + erepo.dvc.scm.commit("remove .dvc") caplog.clear() imported_file = "foo_imported" with caplog.at_level(logging.INFO, logger="dvc"): - Repo.get( - git_erepo._root_dir, - git_erepo.FOO, - out=imported_file, - rev=dvc_branch, - ) + Repo.get(erepo._root_dir, erepo.FOO, out=imported_file, rev="branch") assert caplog.text == "" assert filecmp.cmp( - os.path.join(git_erepo._root_dir, git_erepo.FOO), - imported_file, - shallow=False, + os.path.join(erepo._root_dir, erepo.FOO), imported_file, shallow=False )