Merge pull request #698 from efiop/master

Misc fixes
This commit is contained in:
Ruslan Kuprieiev
2018-05-10 17:21:43 +03:00
committed by GitHub
3 changed files with 62 additions and 50 deletions
-47
View File
@@ -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))
+7 -3
View File
@@ -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():
+55
View File
@@ -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))