diff --git a/dvc/command/base.py b/dvc/command/base.py index 0a1f88e66..4725cbbe3 100644 --- a/dvc/command/base.py +++ b/dvc/command/base.py @@ -38,10 +38,13 @@ def append_doc_link(help_message, path): class CmdBase(object): def __init__(self, args): from dvc.repo import Repo + from dvc.updater import Updater self.repo = Repo() self.config = self.repo.config self.args = args + updater = Updater(self.repo.dvc_dir) + updater.check() @property def default_targets(self): diff --git a/dvc/repo/__init__.py b/dvc/repo/__init__.py index 0182b8ac8..5b86d1ce7 100644 --- a/dvc/repo/__init__.py +++ b/dvc/repo/__init__.py @@ -47,7 +47,6 @@ class Repo(object): from dvc.scm import SCM from dvc.cache import Cache from dvc.data_cloud import DataCloud - from dvc.updater import Updater from dvc.repo.metrics import Metrics from dvc.scm.tree import WorkingTree from dvc.repo.tag import Tag @@ -76,7 +75,6 @@ class Repo(object): self.cache = Cache(self) self.cloud = DataCloud(self) - self.updater = Updater(self.dvc_dir) self.metrics = Metrics(self) self.tag = Tag(self) @@ -84,8 +82,6 @@ class Repo(object): self._ignore() - self.updater.check() - def __repr__(self): return "Repo: '{root_dir}'".format(root_dir=self.root_dir) @@ -121,12 +117,16 @@ class Repo(object): return self.cache.local.unprotect(PathInfo(target)) def _ignore(self): + from dvc.updater import Updater + + updater = Updater(self.dvc_dir) + flist = [ self.state.state_file, self.lock.lock_file, self.config.config_local_file, - self.updater.updater_file, - self.updater.lock.lock_file, + updater.updater_file, + updater.lock.lock_file, ] + self.state.temp_files if self.cache.local.cache_dir.startswith(self.root_dir): diff --git a/tests/func/test_updater.py b/tests/func/test_updater.py index b2d2adfab..3cd275804 100644 --- a/tests/func/test_updater.py +++ b/tests/func/test_updater.py @@ -1,43 +1,51 @@ import os +import mock +import pytest -from tests.basic_env import TestDvc +from dvc.updater import Updater -class TestUpdater(TestDvc): - def test(self): - # NOTE: only test on travis CRON to avoid generating too much logs - travis = os.getenv("TRAVIS") == "true" - if not travis: - return +@pytest.fixture +def updater(dvc_repo): + return Updater(dvc_repo.dvc_dir) - cron = os.getenv("TRAVIS_EVENT_TYPE") == "cron" - if not cron: - return - env = os.environ.copy() - if os.getenv("CI"): - del os.environ["CI"] +def test_updater(updater): + # NOTE: only test on travis CRON to avoid generating too much logs + travis = os.getenv("TRAVIS") == "true" + if not travis: + return - self.dvc.updater.check() - self.dvc.updater.check() - self.dvc.updater.check() + cron = os.getenv("TRAVIS_EVENT_TYPE") == "cron" + if not cron: + return - os.environ = env.copy() + env = os.environ.copy() + if env.get("CI"): + del env["CI"] - def test_check_version_newer(self): - self.dvc.updater.latest = "0.20.8" - self.dvc.updater.current = "0.21.0" + with mock.patch.dict(os.environ, env): + updater.check() + updater.check() + updater.check() - self.assertFalse(self.dvc.updater._is_outdated()) - def test_check_version_equal(self): - self.dvc.updater.latest = "0.20.8" - self.dvc.updater.current = "0.20.8" +def test_check_version_newer(updater): + updater.latest = "0.20.8" + updater.current = "0.21.0" - self.assertFalse(self.dvc.updater._is_outdated()) + assert not updater._is_outdated() - def test_check_version_outdated(self): - self.dvc.updater.latest = "0.21.0" - self.dvc.updater.current = "0.20.8" - self.assertTrue(self.dvc.updater._is_outdated()) +def test_check_version_equal(updater): + updater.latest = "0.20.8" + updater.current = "0.20.8" + + assert not updater._is_outdated() + + +def test_check_version_outdated(updater): + updater.latest = "0.21.0" + updater.current = "0.20.8" + + assert updater._is_outdated() diff --git a/tests/unit/test_updater.py b/tests/unit/test_updater.py index 119b53380..d387e1476 100644 --- a/tests/unit/test_updater.py +++ b/tests/unit/test_updater.py @@ -1,9 +1,8 @@ import os import json -import mock from dvc import __version__ -from tests.basic_env import TestDvc +from dvc.updater import Updater class MockResponse(object): @@ -27,13 +26,15 @@ def mocked_requests_get(*args, **kwargs): return MockResponse({"version": __version__}, 200) -class TestUpdater(TestDvc): - @mock.patch("requests.get", side_effect=mocked_requests_get) - def test_fetch(self, mock_get): - self.assertFalse(os.path.exists(self.dvc.updater.updater_file)) - self.dvc.updater.fetch(detach=False) - mock_get.assert_called_once() - self.assertTrue(os.path.isfile(self.dvc.updater.updater_file)) - with open(self.dvc.updater.updater_file, "r") as fobj: - info = json.load(fobj) - self.assertEqual(info["version"], __version__) +def test_fetch(dvc_repo, mocker): + updater = Updater(dvc_repo.dvc_dir) + assert not os.path.exists(updater.updater_file) + + mock_get = mocker.patch("requests.get", side_effect=mocked_requests_get) + updater.fetch(detach=False) + mock_get.assert_called_once_with(Updater.URL, timeout=Updater.TIMEOUT_GET) + + assert os.path.isfile(updater.updater_file) + with open(updater.updater_file, "r") as fobj: + info = json.load(fobj) + assert info["version"] == __version__