1
0
mirror of https://github.com/deadc0de6/dotdrop.git synced 2026-02-06 17:12:59 +00:00

adding minimum version for config file (#174)

This commit is contained in:
deadc0de6
2019-07-07 18:44:23 +02:00
parent 51a0c19d5b
commit 6f165d0d3e
3 changed files with 164 additions and 1 deletions

View File

@@ -11,6 +11,7 @@ import glob
from copy import deepcopy
# local imports
from dotdrop.version import __version__ as VERSION
from dotdrop.settings import Settings
from dotdrop.logger import Logger
from dotdrop.templategen import Templategen
@@ -62,6 +63,7 @@ class CfgYaml:
key_settings_workdir = 'workdir'
key_settings_link_dotfile_default = 'link_dotfile_default'
key_settings_noempty = 'ignoreempty'
key_settings_minversion = 'minversion'
key_imp_link = 'link_on_import'
# link values
@@ -138,6 +140,11 @@ class CfgYaml:
self.settings = Settings(None).serialize().get(self.key_settings)
self.settings.update(self.ori_settings)
# resolve minimum version
if self.key_settings_minversion in self.settings:
minversion = self.settings[self.key_settings_minversion]
self._check_minversion(minversion)
# resolve settings paths
p = self._norm_path(self.settings[self.key_settings_dotpath])
self.settings[self.key_settings_dotpath] = p
@@ -790,6 +797,11 @@ class CfgYaml:
if self.key_profiles not in content:
content[self.key_profiles] = None
if self.dirty_deprecated:
# add minversion
settings = content[self.key_settings]
settings[self.key_settings_minversion] = VERSION
# save to file
if self.debug:
self.log.dbg('saving to {}'.format(self.path))
@@ -943,3 +955,17 @@ class CfgYaml:
self.log.dbg('resolved: {} -> {}'.format(e, et))
new.append(et)
return new
def _check_minversion(self, minversion):
if not minversion:
return
try:
cur = tuple([int(x) for x in VERSION.split('.')])
cfg = tuple([int(x) for x in minversion.split('.')])
except Exception:
err = 'bad version: \"{}\" VS \"{}\"'.format(VERSION, minversion)
raise YamlException(err)
if cur < cfg:
err = 'current dotdrop version is too old for that config file.'
err += ' Please update.'
raise YamlException(err)

View File

@@ -29,6 +29,7 @@ class Settings(DictParser):
key_showdiff = 'showdiff'
key_upignore = 'upignore'
key_workdir = 'workdir'
key_minversion = 'minversion'
# import keys
key_import_actions = 'import_actions'
@@ -41,7 +42,8 @@ class Settings(DictParser):
import_variables=[], keepdot=False,
link_dotfile_default=LinkTypes.NOLINK,
link_on_import=LinkTypes.NOLINK, longkey=False,
showdiff=False, upignore=[], workdir='~/.config/dotdrop'):
showdiff=False, upignore=[], workdir='~/.config/dotdrop',
minversion=None):
self.backup = backup
self.banner = banner
self.create = create
@@ -59,6 +61,7 @@ class Settings(DictParser):
self.workdir = workdir
self.link_dotfile_default = LinkTypes.get(link_dotfile_default)
self.link_on_import = LinkTypes.get(link_on_import)
self.minversion = minversion
def _serialize_seq(self, name, dic):
"""serialize attribute 'name' into 'dic'"""
@@ -80,6 +83,7 @@ class Settings(DictParser):
self.key_longkey: self.longkey,
self.key_showdiff: self.showdiff,
self.key_workdir: self.workdir,
self.key_minversion: self.minversion,
}
self._serialize_seq(self.key_cmpignore, dic)
self._serialize_seq(self.key_default_actions, dic)