From 254655e2fd988d0a5ca5cb6215197be0e883dcae Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sun, 23 Mar 2014 12:35:29 -0700 Subject: [PATCH] Add OrderedDict dependency. Make sure hooks are run in a deterministic order --- pre_commit/ordereddict.py | 10 ++++++++++ pre_commit/repository.py | 3 ++- setup.py | 23 ++++++++++++++++------- 3 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 pre_commit/ordereddict.py diff --git a/pre_commit/ordereddict.py b/pre_commit/ordereddict.py new file mode 100644 index 00000000..783e51ac --- /dev/null +++ b/pre_commit/ordereddict.py @@ -0,0 +1,10 @@ +from __future__ import absolute_import + +# This module serves only as a shim for OrderedDict + +try: + from collections import OrderedDict +except ImportError: + from orderddict import OrderedDict + +__all__ = (OrderedDict.__name__,) diff --git a/pre_commit/repository.py b/pre_commit/repository.py index ca81fa0f..f9a4b7cb 100644 --- a/pre_commit/repository.py +++ b/pre_commit/repository.py @@ -6,6 +6,7 @@ import pre_commit.constants as C from pre_commit.clientlib.validate_manifest import validate_manifest from pre_commit.hooks_workspace import in_hooks_workspace from pre_commit.languages.all import languages +from pre_commit.ordereddict import OrderedDict from pre_commit.util import cached_property @@ -29,7 +30,7 @@ class Repository(object): @cached_property def hooks(self): - return dict( + return OrderedDict( (hook['id'], dict(hook, **self.manifest[hook['id']])) for hook in self.repo_config['hooks'] ) diff --git a/setup.py b/setup.py index 93bdae3d..54a12168 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,21 @@ +import sys from setuptools import find_packages from setuptools import setup + +install_requires = [ + 'argparse', + 'jsonschema', + 'plumbum', + 'pyyaml', + 'simplejson', +] + + +if sys.version_info < (2, 7): + install_requires.append('ordereddict') + + setup( name='pre_commit', version='0.0.0', @@ -10,13 +25,7 @@ setup( 'resources/pre-commit.sh' ] }, - install_requires=[ - 'argparse', - 'jsonschema', - 'plumbum', - 'pyyaml', - 'simplejson', - ], + install_requires=install_requires, entry_points={ 'console_scripts': [ 'pre-commit = pre_commit.run:run',