Use 0.15.0 types
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index be99f71..2367f89 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -13,7 +13,7 @@
     -   id: requirements-txt-fixer
     -   id: flake8
 -   repo: https://github.com/pre-commit/pre-commit
-    sha: v0.12.2
+    sha: v0.15.0
     hooks:
     -   id: validate_config
     -   id: validate_manifest
diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml
index 6cda2dd..dac48f0 100644
--- a/.pre-commit-hooks.yaml
+++ b/.pre-commit-hooks.yaml
@@ -3,109 +3,153 @@
     description: "Runs autopep8 over python source.  If you configure additional arguments you'll want to at least include -i."
     entry: autopep8-wrapper
     language: python
-    files: \.py$
+    types: [python]
     args: [-i]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-added-large-files
     name: Check for added large files
     description: Prevent giant files from being committed
     entry: check-added-large-files
     language: python
-    # Match all files
+    # for backward compatibility
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-ast
     name: Check python ast
     description: Simply check whether the files parse as valid python.
     entry: check-ast
     language: python
-    files: '\.py$'
+    types: [python]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-byte-order-marker
     name: Check for byte-order marker
     description: Forbid files which have a UTF-8 byte-order marker
     entry: check-byte-order-marker
     language: python
-    files: '\.py$'
+    types: [python]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-case-conflict
     name: Check for case conflicts
     description: Check for files that would conflict in case-insensitive filesystems
     entry: check-case-conflict
     language: python
-    # Match all files
+    # for backward compatibility
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-docstring-first
     name: Check docstring is first
     description: Checks a common error of defining a docstring after code.
     entry: check-docstring-first
     language: python
-    files: \.py$
+    types: [python]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-json
     name: Check JSON
     description: This hook checks json files for parseable syntax.
     entry: check-json
     language: python
-    files: \.json$
+    types: [json]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: pretty-format-json
     name: Pretty format JSON
     description: This hook sets a standard for formatting JSON files.
     entry: pretty-format-json
     language: python
-    files: \.json$
+    types: [json]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-merge-conflict
     name: Check for merge conflicts
     description: Check for files that contain merge conflict strings.
     entry: check-merge-conflict
     language: python
-    # Match all files
+    types: [text]
+    # for backward compatibility
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-symlinks
     name: Check for broken symlinks
     description: Checks for symlinks which do not point to anything.
     entry: check-symlinks
     language: python
-    # Match all files
-    files: ''
     types: [symlink]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-xml
     name: Check Xml
     description: This hook checks xml files for parseable syntax.
     entry: check-xml
     language: python
-    files: \.xml$
+    types: [xml]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-yaml
     name: Check Yaml
     description: This hook checks yaml files for parseable syntax.
     entry: check-yaml
     language: python
-    files: \.(yaml|yml|eyaml)$
+    types: [yaml]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: debug-statements
     name: Debug Statements (Python)
     description: This hook checks that debug statements (pdb, ipdb, pudb) are not imported on commit.
     entry: debug-statement-hook
     language: python
-    files: \.py$
+    types: [python]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: detect-aws-credentials
     name: Detect AWS Credentials
     description: Detects *your* aws credentials from the aws cli credentials file
     entry: detect-aws-credentials
     language: python
+    types: [text]
+    # for backward compatibility
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: detect-private-key
     name: Detect Private Key
     description: Detects the presence of private keys
     entry: detect-private-key
     language: python
+    types: [text]
+    # for backward compatibility
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: double-quote-string-fixer
     name: Fix double quoted strings
     description: This hook replaces double quoted strings with single quoted strings
     entry: double-quote-string-fixer
     language: python
-    files: \.py$
+    types: [python]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: end-of-file-fixer
     name: Fix End of Files
     description: Ensures that a file is either empty, or ends with one newline.
     entry: end-of-file-fixer
     language: python
-    files: \.(asciidoc|adoc|coffee|cpp|css|c|ejs|erb|groovy|h|haml|hh|hpp|hxx|html|in|j2|jade|json|js|less|markdown|md|ml|mli|pp|py|rb|rs|R|scala|scss|sh|slim|tex|tmpl|ts|txt|yaml|yml)$
+    types: [text]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: file-contents-sorter
     name: File Contents Sorter
     description: Sort the lines in specified files (defaults to alphabetical). You must provide list of target files as input in your .pre-commit-config.yaml file.
@@ -117,19 +161,27 @@
     language: python
     entry: fix-encoding-pragma
     description: 'Add # -*- coding: utf-8 -*- to the top of python files'
-    files: \.py$
+    types: [python]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: flake8
     name: Flake8
     description: This hook runs flake8.
     entry: flake8
     language: python
-    files: \.py$
+    types: [python]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: forbid-new-submodules
     name: Forbid new submodules
     language: python
     entry: forbid-new-submodules
     description: Prevent addition of new git submodules
+    # for backward compatibility
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: name-tests-test
     name: Tests should end in _test.py
     description: This verifies that test files are named correctly
@@ -140,14 +192,19 @@
     name: "Don't commit to branch"
     entry: no-commit-to-branch
     language: python
-    files: .*
     always_run: true
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: pyflakes
     name: Pyflakes (DEPRECATED, use flake8)
     description: This hook runs pyflakes. (This is deprecated, use flake8).
     entry: pyflakes
     language: python
-    files: \.py$
+    types: [python]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: requirements-txt-fixer
     name: Fix requirements.txt
     description: Sorts entries in requirements.txt
@@ -165,4 +222,7 @@
     description: This hook trims trailing whitespace.
     entry: trailing-whitespace-fixer
     language: python
-    files: \.(asciidoc|adoc|coffee|cpp|css|c|ejs|erb|groovy|h|haml|hh|hpp|hxx|html|in|j2|jade|json|js|less|markdown|md|ml|mli|pp|py|rb|rs|R|scala|scss|sh|slim|tex|tmpl|ts|txt|yaml|yml)$
+    types: [text]
+    # for backward compatibility
+    files: ''
+    minimum_pre_commit_version: 0.15.0
diff --git a/hooks.yaml b/hooks.yaml
index 6cda2dd..7a4f933 100644
--- a/hooks.yaml
+++ b/hooks.yaml
@@ -1,168 +1,162 @@
 -   id: autopep8-wrapper
-    name: autopep8 wrapper
-    description: "Runs autopep8 over python source.  If you configure additional arguments you'll want to at least include -i."
-    entry: autopep8-wrapper
-    language: python
-    files: \.py$
-    args: [-i]
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-added-large-files
-    name: Check for added large files
-    description: Prevent giant files from being committed
-    entry: check-added-large-files
-    language: python
-    # Match all files
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-ast
-    name: Check python ast
-    description: Simply check whether the files parse as valid python.
-    entry: check-ast
-    language: python
-    files: '\.py$'
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-byte-order-marker
-    name: Check for byte-order marker
-    description: Forbid files which have a UTF-8 byte-order marker
-    entry: check-byte-order-marker
-    language: python
-    files: '\.py$'
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-case-conflict
-    name: Check for case conflicts
-    description: Check for files that would conflict in case-insensitive filesystems
-    entry: check-case-conflict
-    language: python
-    # Match all files
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-docstring-first
-    name: Check docstring is first
-    description: Checks a common error of defining a docstring after code.
-    entry: check-docstring-first
-    language: python
-    files: \.py$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-json
-    name: Check JSON
-    description: This hook checks json files for parseable syntax.
-    entry: check-json
-    language: python
-    files: \.json$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: pretty-format-json
-    name: Pretty format JSON
-    description: This hook sets a standard for formatting JSON files.
-    entry: pretty-format-json
-    language: python
-    files: \.json$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-merge-conflict
-    name: Check for merge conflicts
-    description: Check for files that contain merge conflict strings.
-    entry: check-merge-conflict
-    language: python
-    # Match all files
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-symlinks
-    name: Check for broken symlinks
-    description: Checks for symlinks which do not point to anything.
-    entry: check-symlinks
-    language: python
-    # Match all files
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
     files: ''
-    types: [symlink]
+    minimum_pre_commit_version: 0.15.0
 -   id: check-xml
-    name: Check Xml
-    description: This hook checks xml files for parseable syntax.
-    entry: check-xml
-    language: python
-    files: \.xml$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: check-yaml
-    name: Check Yaml
-    description: This hook checks yaml files for parseable syntax.
-    entry: check-yaml
-    language: python
-    files: \.(yaml|yml|eyaml)$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: debug-statements
-    name: Debug Statements (Python)
-    description: This hook checks that debug statements (pdb, ipdb, pudb) are not imported on commit.
-    entry: debug-statement-hook
-    language: python
-    files: \.py$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: detect-aws-credentials
-    name: Detect AWS Credentials
-    description: Detects *your* aws credentials from the aws cli credentials file
-    entry: detect-aws-credentials
-    language: python
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: detect-private-key
-    name: Detect Private Key
-    description: Detects the presence of private keys
-    entry: detect-private-key
-    language: python
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
     files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: double-quote-string-fixer
-    name: Fix double quoted strings
-    description: This hook replaces double quoted strings with single quoted strings
-    entry: double-quote-string-fixer
-    language: python
-    files: \.py$
--   id: end-of-file-fixer
-    name: Fix End of Files
-    description: Ensures that a file is either empty, or ends with one newline.
-    entry: end-of-file-fixer
-    language: python
-    files: \.(asciidoc|adoc|coffee|cpp|css|c|ejs|erb|groovy|h|haml|hh|hpp|hxx|html|in|j2|jade|json|js|less|markdown|md|ml|mli|pp|py|rb|rs|R|scala|scss|sh|slim|tex|tmpl|ts|txt|yaml|yml)$
--   id: file-contents-sorter
-    name: File Contents Sorter
-    description: Sort the lines in specified files (defaults to alphabetical). You must provide list of target files as input in your .pre-commit-config.yaml file.
-    entry: file-contents-sorter
-    language: python
-    files: '^$'
--   id: fix-encoding-pragma
-    name: Fix python encoding pragma
-    language: python
-    entry: fix-encoding-pragma
-    description: 'Add # -*- coding: utf-8 -*- to the top of python files'
-    files: \.py$
--   id: flake8
-    name: Flake8
-    description: This hook runs flake8.
-    entry: flake8
-    language: python
-    files: \.py$
--   id: forbid-new-submodules
-    name: Forbid new submodules
-    language: python
-    entry: forbid-new-submodules
-    description: Prevent addition of new git submodules
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
     files: ''
+    minimum_pre_commit_version: 0.15.0
+-   id: end-of-file-fixer
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
+-   id: file-contents-sorter
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
+-   id: fix-encoding-pragma
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
+-   id: flake8
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
+-   id: forbid-new-submodules
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: name-tests-test
-    name: Tests should end in _test.py
-    description: This verifies that test files are named correctly
-    entry: name-tests-test
-    language: python
-    files: tests/.+\.py$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: no-commit-to-branch
-    name: "Don't commit to branch"
-    entry: no-commit-to-branch
-    language: python
-    files: .*
-    always_run: true
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: pyflakes
-    name: Pyflakes (DEPRECATED, use flake8)
-    description: This hook runs pyflakes. (This is deprecated, use flake8).
-    entry: pyflakes
-    language: python
-    files: \.py$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: requirements-txt-fixer
-    name: Fix requirements.txt
-    description: Sorts entries in requirements.txt
-    entry: requirements-txt-fixer
-    language: python
-    files: requirements.*\.txt$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: sort-simple-yaml
-    name: Sort simple YAML files
-    language: python
-    entry: sort-simple-yaml
-    description: Sorts simple YAML files which consist only of top-level keys, preserving comments and blocks.
-    files: '^$'
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
 -   id: trailing-whitespace
-    name: Trim Trailing Whitespace
-    description: This hook trims trailing whitespace.
-    entry: trailing-whitespace-fixer
-    language: python
-    files: \.(asciidoc|adoc|coffee|cpp|css|c|ejs|erb|groovy|h|haml|hh|hpp|hxx|html|in|j2|jade|json|js|less|markdown|md|ml|mli|pp|py|rb|rs|R|scala|scss|sh|slim|tex|tmpl|ts|txt|yaml|yml)$
+    language: system
+    name: upgrade-your-pre-commit-version
+    entry: upgrade-your-pre-commit-version
+    files: ''
+    minimum_pre_commit_version: 0.15.0
diff --git a/tests/meta_test.py b/tests/meta_test.py
index 202b3d7..29e06a8 100644
--- a/tests/meta_test.py
+++ b/tests/meta_test.py
@@ -1,7 +1,43 @@
+from __future__ import absolute_import
+from __future__ import unicode_literals
+
 import io
 
+import yaml
 
-def test_hooks_yaml_same_contents():
-    legacy_contents = io.open('hooks.yaml').read()
-    contents = io.open('.pre-commit-hooks.yaml').read()
-    assert legacy_contents == contents
+
+def _assert_parseable_in_old_pre_commit(hooks):
+    for hook in hooks:
+        assert {'id', 'name', 'entry', 'files', 'language'} <= set(hook)
+
+
+def test_legacy_hooks():
+    with io.open('hooks.yaml') as legacy_file:
+        legacy = yaml.load(legacy_file.read())
+    with io.open('.pre-commit-hooks.yaml') as hooks_file:
+        hooks = yaml.load(hooks_file.read())
+
+    # The same set of hooks should be defined in both files
+    new_hook_ids = {hook['id'] for hook in hooks}
+    legacy_hook_ids = {hook['id'] for hook in legacy}
+    assert new_hook_ids == legacy_hook_ids
+
+    # Both files should be parseable by pre-commit<0.15.0
+    _assert_parseable_in_old_pre_commit(legacy)
+    _assert_parseable_in_old_pre_commit(hooks)
+
+    # The legacy file should force upgrading
+    for hook in legacy:
+        del hook['id']
+        assert hook == {
+            'language': 'system',
+            'name': 'upgrade-your-pre-commit-version',
+            'entry': 'upgrade-your-pre-commit-version',
+            'files': '',
+            'minimum_pre_commit_version': '0.15.0',
+        }
+
+    # Each hook should require a new version if it uses types
+    for hook in hooks:
+        if 'types' in hook:
+            assert hook['minimum_pre_commit_version'] == '0.15.0'