diff --git a/dvc/check_updates.py b/dvc/check_updates.py deleted file mode 100644 index 5a0e4b826..000000000 --- a/dvc/check_updates.py +++ /dev/null @@ -1,47 +0,0 @@ -import os -import time -import json -import requests - -from dvc import VERSION_BASE -from dvc.logger import Logger - -DVCAPI_URL = 'https://4ki8820rsf.execute-api.us-east-2.amazonaws.com/prod/latest-version' -CHECK_UPDATES_FILE = '.check_updates' -TIMEOUT = 7 * 24 * 60 * 60 #every week - -def check_updates(dvc_dir): - current = VERSION_BASE - - if os.getenv('CI'): - return - - fname = os.path.join(dvc_dir, CHECK_UPDATES_FILE) - if os.path.isfile(fname): - ctime = os.path.getctime(fname) - if time.time() - ctime < TIMEOUT: - msg = '{} is not old enough to check for updates' - Logger.debug(msg.format(CHECK_UPDATES_FILE)) - return - - os.unlink(fname) - - try: - r = requests.get(DVCAPI_URL) - j = json.loads(r.content) - latest = j['version'] - open(fname, 'w+').close() - except Exception as exc: - Logger.debug('Failed to obtain latest version: {}'.format(str(exc))) - return - - l_major, l_minor, l_patch = latest.split('.') - c_major, c_minor, c_patch = current.split('.') - - if l_major <= c_major and \ - l_minor <= c_minor and \ - l_patch <= c_patch: - return - - msg = 'You are using dvc version {}, however version {} is available. Consider upgrading.' - Logger.warn(msg.format(current, latest)) diff --git a/dvc/project.py b/dvc/project.py index 72d64cada..c5504b145 100644 --- a/dvc/project.py +++ b/dvc/project.py @@ -17,7 +17,7 @@ from dvc.scm import SCM, Base from dvc.cache import Cache from dvc.cloud.data_cloud import DataCloud from dvc.system import System -from dvc.check_updates import check_updates +from dvc.updater import Updater class InitError(DvcException): @@ -52,8 +52,9 @@ class Project(object): self.state = State(self.dvc_dir) self.logger = Logger(self.config._config[Config.SECTION_CORE].get(Config.SECTION_CORE_LOGLEVEL, None)) self.cloud = DataCloud(cache=self.cache, config=self.config._config) + self.updater = Updater(self.dvc_dir) - check_updates(self.dvc_dir) + self.updater.check() @staticmethod def init(root_dir=os.curdir, no_scm=False): @@ -83,11 +84,14 @@ class Project(object): cache = Cache.init(dvc_dir) state = State.init(dvc_dir) lock = Lock(dvc_dir) + updater = Updater(dvc_dir) scm.ignore_list([cache.cache_dir, state.state_file, + state._lock_file.lock_file, lock.lock_file, - config.config_local_file]) + config.config_local_file, + updater.updater_file]) scm.add([config.config_file]) if scm.ignore_file(): diff --git a/dvc/updater.py b/dvc/updater.py new file mode 100644 index 000000000..72f02790b --- /dev/null +++ b/dvc/updater.py @@ -0,0 +1,55 @@ +import os +import time +import json +import requests + +from dvc import VERSION_BASE +from dvc.logger import Logger + +class Updater(object): + URL = 'https://4ki8820rsf.execute-api.us-east-2.amazonaws.com/prod/latest-version' + UPDATER_FILE = 'updater' + TIMEOUT = 7 * 24 * 60 * 60 #every week + + def __init__(self, dvc_dir): + self.dvc_dir = dvc_dir + self.updater_file = os.path.join(dvc_dir, self.UPDATER_FILE) + + @staticmethod + def init(dvc_dir): + return Updater(dvc_dir) + + def check(self): + current = VERSION_BASE + + if os.getenv('CI'): + return + + if os.path.isfile(self.updater_file): + ctime = os.path.getctime(self.updater_file) + if time.time() - ctime < self.TIMEOUT: + msg = '{} is not old enough to check for updates' + Logger.debug(msg.format(self.UPDATER_FILE)) + return + + os.unlink(self.updater_file) + + try: + r = requests.get(self.URL) + j = json.loads(r.content) + latest = j['version'] + open(self.updater_file, 'w+').close() + except Exception as exc: + Logger.debug('Failed to obtain latest version: {}'.format(str(exc))) + return + + l_major, l_minor, l_patch = latest.split('.') + c_major, c_minor, c_patch = current.split('.') + + if l_major <= c_major and \ + l_minor <= c_minor and \ + l_patch <= c_patch: + return + + msg = 'You are using dvc version {}, however version {} is available. Consider upgrading.' + Logger.warn(msg.format(current, latest))