1
0
mirror of https://github.com/deadc0de6/dotdrop.git synced 2026-02-04 16:14:45 +00:00

add check_version config option

This commit is contained in:
deadc0de6
2021-10-10 16:47:04 +02:00
parent 27cf25a920
commit 15c1a09a48
6 changed files with 36 additions and 2 deletions

View File

@@ -13,6 +13,7 @@ Entry | Description | Default
-------- | ------------- | ------------
`backup` | Create a backup of the dotfile in case it differs from the one that will be installed by dotdrop | true
`banner` | Display the banner | true
`check_version` | Check if a new version of dotdrop is available on github | false
`chmod_on_import` | Always add a chmod entry on newly imported dotfiles (see `--preserve-mode`) | false
`cmpignore` | List of patterns to ignore when comparing, applied to all dotfiles (enclose in quotes when using wildcards; see [ignore patterns](config.md#ignore-patterns)) | -
`create` | Create a directory hierarchy when installing dotfiles if it doesn't exist | true

View File

@@ -20,7 +20,7 @@ from dotdrop.comparator import Comparator
from dotdrop.importer import Importer
from dotdrop.utils import get_tmpdir, removepath, \
uniq_list, patch_ignores, dependencies_met, \
adapt_workers
adapt_workers, check_version
from dotdrop.linktypes import LinkTypes
from dotdrop.exceptions import YamlException, \
UndefinedException, UnmetDependency
@@ -829,6 +829,9 @@ def main():
LOG.dbg('\n\n')
options_time = time.time() - time0
if opts.check_version:
check_version()
time0 = time.time()
ret, command = _exec_command(opts)
cmd_time = time.time() - time0

View File

@@ -131,6 +131,7 @@ class Options(AttrMonitor):
self.upignore = None
self.link_on_import = None
self.chmod_on_import = None
self.check_version = None
# args parsing
self.args = {}

View File

@@ -45,6 +45,7 @@ class Settings(DictParser):
key_template_dotfile_default = 'template_dotfile_default'
key_ignore_missing_in_dotdrop = 'ignore_missing_in_dotdrop'
key_chmod_on_import = 'chmod_on_import'
key_check_version = 'check_version'
# import keys
key_import_actions = 'import_actions'
@@ -65,7 +66,8 @@ class Settings(DictParser):
template_dotfile_default=True,
ignore_missing_in_dotdrop=False,
force_chmod=False,
chmod_on_import=False):
chmod_on_import=False,
check_version=False):
self.backup = backup
self.banner = banner
self.create = create
@@ -95,6 +97,7 @@ class Settings(DictParser):
self.ignore_missing_in_dotdrop = ignore_missing_in_dotdrop
self.force_chmod = force_chmod
self.chmod_on_import = chmod_on_import
self.check_version = check_version
def _serialize_seq(self, name, dic):
"""serialize attribute 'name' into 'dic'"""
@@ -121,6 +124,7 @@ class Settings(DictParser):
self.key_ignore_missing_in_dotdrop: self.ignore_missing_in_dotdrop,
self.key_force_chmod: self.force_chmod,
self.key_chmod_on_import: self.chmod_on_import,
self.key_check_version: self.check_version,
}
self._serialize_seq(self.key_default_actions, dic)
self._serialize_seq(self.key_import_actions, dic)

View File

@@ -15,10 +15,14 @@ import importlib
import filecmp
import itertools
from shutil import rmtree, which
import json
import requests
from packaging import version
# local import
from dotdrop.logger import Logger
from dotdrop.exceptions import UnmetDependency
from dotdrop.version import __version__ as VERSION
LOG = Logger()
STAR = '*'
@@ -447,3 +451,22 @@ def debug_dict(title, elems, debug):
LOG.dbg('\t\t- {}'.format(i))
else:
LOG.dbg('\t- \"{}\": {}'.format(k, val))
def check_version():
"""check dotdrop version on github and compare with current"""
url = 'https://api.github.com/repos/deadc0de6/dotdrop/releases/latest'
req = requests.get(url, timeout=1)
if not req:
return
try:
latest = req.json()['name']
except json.decoder.JSONDecodeError:
return
except ValueError:
return
if latest.startswith('v'):
latest = latest[1:]
if version.parse(VERSION) < version.parse(latest):
msg = 'A new version of dotdrop is available ({})'
LOG.warn(msg.format(latest))

View File

@@ -2,3 +2,5 @@ Jinja2; python_version > '3.4'
docopt; python_version > '3.4'
ruamel.yaml; python_version > '3.4'
python-magic; python_version > '3.4'
packaging; python_version > '3.4'
requests; python_version > '3.4'