Skip to content

Commit

Permalink
Replace pkg_resources.get_distribution with importlib-metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
asottile committed Oct 14, 2018
1 parent 9c37473 commit ebe5132
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 7 deletions.
5 changes: 2 additions & 3 deletions pre_commit/constants.py
@@ -1,7 +1,7 @@
from __future__ import absolute_import
from __future__ import unicode_literals

import pkg_resources
import importlib_metadata # TODO: importlib.metadata py38?

CONFIG_FILE = '.pre-commit-config.yaml'
MANIFEST_FILE = '.pre-commit-hooks.yaml'
Expand All @@ -18,8 +18,7 @@
# Bump when modifying `empty_template`
LOCAL_REPO_VERSION = '1'

VERSION = pkg_resources.get_distribution('pre-commit').version
VERSION_PARSED = pkg_resources.parse_version(VERSION)
VERSION = importlib_metadata.version('pre_commit')

# `manual` is not invoked by any installed git hook. See #719
STAGES = ('commit', 'commit-msg', 'manual', 'push')
8 changes: 4 additions & 4 deletions pre_commit/repository.py
Expand Up @@ -8,7 +8,6 @@
import shutil
import sys

import pkg_resources
from cached_property import cached_property
from cfgv import apply_defaults
from cfgv import validate
Expand All @@ -23,6 +22,7 @@
from pre_commit.languages.all import languages
from pre_commit.languages.helpers import environment_dir
from pre_commit.prefix import Prefix
from pre_commit.util import parse_version


logger = logging.getLogger('pre_commit')
Expand Down Expand Up @@ -110,13 +110,13 @@ def _hook(*hook_dicts):
for dct in rest:
ret.update(dct)

version = pkg_resources.parse_version(ret['minimum_pre_commit_version'])
if version > C.VERSION_PARSED:
version = ret['minimum_pre_commit_version']
if parse_version(version) > parse_version(C.VERSION):
logger.error(
'The hook `{}` requires pre-commit version {} but version {} '
'is installed. '
'Perhaps run `pip install --upgrade pre-commit`.'.format(
ret['id'], version, C.VERSION_PARSED,
ret['id'], version, C.VERSION,
),
)
exit(1)
Expand Down
5 changes: 5 additions & 0 deletions pre_commit/util.py
Expand Up @@ -211,3 +211,8 @@ def copy_tree_to_path(src_dir, dest_dir):
shutil.copytree(srcname, destname)
else:
shutil.copy(srcname, destname)


def parse_version(s):
"""poor man's version comparison"""
return tuple(int(p) for p in s.split('.'))
2 changes: 2 additions & 0 deletions setup.py
Expand Up @@ -40,6 +40,8 @@
'cached-property',
'cfgv>=1.0.0',
'identify>=1.0.0',
# if this makes it into python3.8 move to extras_require
'importlib-metadata',
'nodeenv>=0.11.1',
'pyyaml',
'six',
Expand Down
7 changes: 7 additions & 0 deletions tests/util_test.py
Expand Up @@ -9,6 +9,7 @@
from pre_commit.util import clean_path_on_failure
from pre_commit.util import cmd_output
from pre_commit.util import memoize_by_cwd
from pre_commit.util import parse_version
from pre_commit.util import tmpdir
from testing.util import cwd

Expand Down Expand Up @@ -117,3 +118,9 @@ def test_cmd_output_exe_not_found():
ret, out, _ = cmd_output('i-dont-exist', retcode=None)
assert ret == 1
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')

0 comments on commit ebe5132

Please sign in to comment.