Replace pkg_resources.get_distribution with importlib-metadata

This commit is contained in:
Anthony Sottile 2018-10-14 12:24:59 -07:00
parent 9c37473256
commit ebe5132576
5 changed files with 20 additions and 7 deletions

View file

@ -1,7 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
from __future__ import unicode_literals from __future__ import unicode_literals
import pkg_resources import importlib_metadata # TODO: importlib.metadata py38?
CONFIG_FILE = '.pre-commit-config.yaml' CONFIG_FILE = '.pre-commit-config.yaml'
MANIFEST_FILE = '.pre-commit-hooks.yaml' MANIFEST_FILE = '.pre-commit-hooks.yaml'
@ -18,8 +18,7 @@ INSTALLED_STATE_VERSION = '1'
# Bump when modifying `empty_template` # Bump when modifying `empty_template`
LOCAL_REPO_VERSION = '1' LOCAL_REPO_VERSION = '1'
VERSION = pkg_resources.get_distribution('pre-commit').version VERSION = importlib_metadata.version('pre_commit')
VERSION_PARSED = pkg_resources.parse_version(VERSION)
# `manual` is not invoked by any installed git hook. See #719 # `manual` is not invoked by any installed git hook. See #719
STAGES = ('commit', 'commit-msg', 'manual', 'push') STAGES = ('commit', 'commit-msg', 'manual', 'push')

View file

@ -8,7 +8,6 @@ import pipes
import shutil import shutil
import sys import sys
import pkg_resources
from cached_property import cached_property from cached_property import cached_property
from cfgv import apply_defaults from cfgv import apply_defaults
from cfgv import validate from cfgv import validate
@ -23,6 +22,7 @@ from pre_commit.clientlib import MANIFEST_HOOK_DICT
from pre_commit.languages.all import languages from pre_commit.languages.all import languages
from pre_commit.languages.helpers import environment_dir from pre_commit.languages.helpers import environment_dir
from pre_commit.prefix import Prefix from pre_commit.prefix import Prefix
from pre_commit.util import parse_version
logger = logging.getLogger('pre_commit') logger = logging.getLogger('pre_commit')
@ -110,13 +110,13 @@ def _hook(*hook_dicts):
for dct in rest: for dct in rest:
ret.update(dct) ret.update(dct)
version = pkg_resources.parse_version(ret['minimum_pre_commit_version']) version = ret['minimum_pre_commit_version']
if version > C.VERSION_PARSED: if parse_version(version) > parse_version(C.VERSION):
logger.error( logger.error(
'The hook `{}` requires pre-commit version {} but version {} ' 'The hook `{}` requires pre-commit version {} but version {} '
'is installed. ' 'is installed. '
'Perhaps run `pip install --upgrade pre-commit`.'.format( 'Perhaps run `pip install --upgrade pre-commit`.'.format(
ret['id'], version, C.VERSION_PARSED, ret['id'], version, C.VERSION,
), ),
) )
exit(1) exit(1)

View file

@ -211,3 +211,8 @@ def copy_tree_to_path(src_dir, dest_dir):
shutil.copytree(srcname, destname) shutil.copytree(srcname, destname)
else: else:
shutil.copy(srcname, destname) shutil.copy(srcname, destname)
def parse_version(s):
"""poor man's version comparison"""
return tuple(int(p) for p in s.split('.'))

View file

@ -40,6 +40,8 @@ setup(
'cached-property', 'cached-property',
'cfgv>=1.0.0', 'cfgv>=1.0.0',
'identify>=1.0.0', 'identify>=1.0.0',
# if this makes it into python3.8 move to extras_require
'importlib-metadata',
'nodeenv>=0.11.1', 'nodeenv>=0.11.1',
'pyyaml', 'pyyaml',
'six', 'six',

View file

@ -9,6 +9,7 @@ from pre_commit.util import CalledProcessError
from pre_commit.util import clean_path_on_failure from pre_commit.util import clean_path_on_failure
from pre_commit.util import cmd_output from pre_commit.util import cmd_output
from pre_commit.util import memoize_by_cwd from pre_commit.util import memoize_by_cwd
from pre_commit.util import parse_version
from pre_commit.util import tmpdir from pre_commit.util import tmpdir
from testing.util import cwd from testing.util import cwd
@ -117,3 +118,9 @@ def test_cmd_output_exe_not_found():
ret, out, _ = cmd_output('i-dont-exist', retcode=None) ret, out, _ = cmd_output('i-dont-exist', retcode=None)
assert ret == 1 assert ret == 1
assert out == 'Executable `i-dont-exist` not found' assert out == 'Executable `i-dont-exist` not found'
def test_parse_version():
assert parse_version('0.0') == parse_version('0.0')
assert parse_version('0.1') > parse_version('0.0')
assert parse_version('2.1') >= parse_version('2')