coveralls: 
[![Coverage Status](https://coveralls.io/builds/2711896/badge)](https://coveralls.io/builds/2711896)

Coverage decreased (-0.03%) to 99.97% when pulling **971060d4b9756a9d102e5bb3ee4d04027d35011c on Lucas-C:master** into **1c46446427ab0dfa6293221426b855420533ef8d on pre-commit:master**.

asottile: ++ thanks for the quick code! I was going to get to this later but you beat me to it! test-n-ship
diff --git a/pre_commit/commands/autoupdate.py b/pre_commit/commands/autoupdate.py
index 1a24b09..9e1e79f 100644
--- a/pre_commit/commands/autoupdate.py
+++ b/pre_commit/commands/autoupdate.py
@@ -8,6 +8,7 @@ from aspy.yaml import ordered_load
 
 import pre_commit.constants as C
 from pre_commit.clientlib.validate_config import CONFIG_JSON_SCHEMA
+from pre_commit.clientlib.validate_config import is_local_hooks
 from pre_commit.clientlib.validate_config import load_config
 from pre_commit.jsonschema_extensions import remove_defaults
 from pre_commit.ordereddict import OrderedDict
@@ -67,6 +68,8 @@ def autoupdate(runner):
     )
 
     for repo_config in input_configs:
+        if is_local_hooks(repo_config):
+            continue
         sys.stdout.write('Updating {0}...'.format(repo_config['repo']))
         sys.stdout.flush()
         try:
diff --git a/pre_commit/repository.py b/pre_commit/repository.py
index 71cc356..83a3c01 100644
--- a/pre_commit/repository.py
+++ b/pre_commit/repository.py
@@ -125,9 +125,8 @@ class Repository(object):
 
 
 class LocalRepository(Repository):
-    def __init__(self, repo_config, repo_path_getter=None):
-        repo_path_getter = None
-        super(LocalRepository, self).__init__(repo_config, repo_path_getter)
+    def __init__(self, repo_config):
+        super(LocalRepository, self).__init__(repo_config, None)
 
     @cached_property
     def hooks(self):

pre-commit autoupdate fails on `local` hooks repos
```
$ pre-commit autoupdate
Updating git@github.com:pre-commit/pre-commit-hooks...updating 9ce45609a92f648c87b42207410386fd69a5d1e5 -> cf550fcab3f12015f8676b8278b30e1a5bc10e70.
Updating git@github.com:pre-commit/pre-commit...updating 4352d45451296934bc17494073b82bcacca3205c -> 1c46446427ab0dfa6293221426b855420533ef8d.
Updating git@github.com:asottile/reorder_python_imports...updating aeda21eb7df6af8c9f6cd990abb086375c71c953 -> 3d86483455ab5bd06cc1069fdd5ac57be5463f10.
Updating local...An unexpected error has occurred: AttributeError: 'NoneType' object has no attribute 'repo_path'
Check the log at ~/.pre-commit/pre-commit.log
(venv-pre_commit)asottile@work:~/workspace/pre-commit$ cat ~/.pre-commit/pre-commit.log 
An unexpected error has occurred: AttributeError: 'NoneType' object has no attribute 'repo_path'
Traceback (most recent call last):
  File "/home/asottile/workspace/pre-commit/pre_commit/error_handler.py", line 34, in error_handler
    yield
  File "/home/asottile/workspace/pre-commit/pre_commit/main.py", line 142, in main
    return autoupdate(runner)
  File "/home/asottile/workspace/pre-commit/pre_commit/commands/autoupdate.py", line 73, in autoupdate
    new_repo_config = _update_repository(repo_config, runner)
  File "/home/asottile/workspace/pre-commit/pre_commit/commands/autoupdate.py", line 33, in _update_repository
    with cwd(repo.repo_path_getter.repo_path):
AttributeError: 'NoneType' object has no attribute 'repo_path'

(venv-pre_commit)asottile@work:~/workspace/pre-commit$ git diff
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 397ee72..20393a7 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -20,3 +20,10 @@
     sha: aeda21eb7df6af8c9f6cd990abb086375c71c953
     hooks:
     -   id: reorder-python-imports
+-   repo: local
+    hooks:
+    -   id: herp
+        name: Herp
+        entry: echo derp
+        language: system
+        files: ^$
```
diff --git a/testing/fixtures.py b/testing/fixtures.py
index 1c0184a..820a72b 100644
--- a/testing/fixtures.py
+++ b/testing/fixtures.py
@@ -35,6 +35,19 @@ def make_repo(tmpdir_factory, repo_source):
     return path
 
 
+def config_with_local_hooks():
+    return OrderedDict((
+        ('repo', 'local'),
+        ('hooks', [OrderedDict((
+            ('id', 'do_not_commit'),
+            ('name', 'Block if "DO NOT COMMIT" is found'),
+            ('entry', 'DO NOT COMMIT'),
+            ('language', 'pcre'),
+            ('files', '^(.*)$'),
+        ))])
+    ))
+
+
 def make_config_from_repo(repo_path, sha=None, hooks=None, check=True):
     manifest = load_manifest(os.path.join(repo_path, C.MANIFEST_FILE))
     config = OrderedDict((
diff --git a/tests/commands/autoupdate_test.py b/tests/commands/autoupdate_test.py
index 5dbc439..771e67b 100644
--- a/tests/commands/autoupdate_test.py
+++ b/tests/commands/autoupdate_test.py
@@ -13,6 +13,9 @@ from pre_commit.runner import Runner
 from pre_commit.util import cmd_output
 from pre_commit.util import cwd
 from testing.auto_namedtuple import auto_namedtuple
+from testing.fixtures import add_config_to_repo
+from testing.fixtures import config_with_local_hooks
+from testing.fixtures import git_dir
 from testing.fixtures import make_config_from_repo
 from testing.fixtures import make_repo
 from testing.fixtures import write_config
@@ -137,3 +140,10 @@ def test_autoupdate_hook_disappearing_repo(
     after = open(C.CONFIG_FILE).read()
     assert ret == 1
     assert before == after
+
+
+def test_autoupdate_local_hooks(tmpdir_factory):
+    git_path = git_dir(tmpdir_factory)
+    config = config_with_local_hooks()
+    path = add_config_to_repo(git_path, config)
+    assert autoupdate(Runner(path)) == 0
diff --git a/tests/repository_test.py b/tests/repository_test.py
index f2e8850..e7ad227 100644
--- a/tests/repository_test.py
+++ b/tests/repository_test.py
@@ -12,10 +12,10 @@ from pre_commit.clientlib.validate_config import CONFIG_JSON_SCHEMA
 from pre_commit.clientlib.validate_config import validate_config_extra
 from pre_commit.jsonschema_extensions import apply_defaults
 from pre_commit.languages.python import PythonEnv
-from pre_commit.ordereddict import OrderedDict
 from pre_commit.repository import Repository
 from pre_commit.util import cmd_output
 from pre_commit.util import cwd
+from testing.fixtures import config_with_local_hooks
 from testing.fixtures import git_dir
 from testing.fixtures import make_config_from_repo
 from testing.fixtures import make_repo
@@ -404,16 +404,7 @@ def test_tags_on_repositories(in_tmpdir, tmpdir_factory, store):
 
 
 def test_local_repository():
-    config = OrderedDict((
-        ('repo', 'local'),
-        ('hooks', [OrderedDict((
-            ('id', 'do_not_commit'),
-            ('name', 'Block if "DO NOT COMMIT" is found'),
-            ('entry', 'DO NOT COMMIT'),
-            ('language', 'pcre'),
-            ('files', '^(.*)$'),
-        ))])
-    ))
+    config = config_with_local_hooks()
     local_repo = Repository.create(config, 'dummy')
     with pytest.raises(NotImplementedError):
         local_repo.sha

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.5
requirements-dev.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
aspy.yaml==1.3.0
astroid==1.3.2
attrs==22.2.0
cached-property==1.5.2
certifi==2021.5.30
coverage==6.2
distlib==0.3.9
filelock==3.4.1
flake8==5.0.4
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig==1.1.1
jsonschema==3.2.0
logilab-common==1.9.7
mccabe==0.7.0
mock==5.2.0
mypy-extensions==1.0.0
nodeenv==1.6.0
ordereddict==1.1
packaging==21.3
platformdirs==2.4.0
pluggy==1.0.0
-e git+https://github.com/pre-commit/pre-commit.git@1c46446427ab0dfa6293221426b855420533ef8d#egg=pre_commit
py==1.11.0
pycodestyle==2.9.1
pyflakes==2.5.0
pylint==1.3.1
pyparsing==3.1.4
pyrsistent==0.18.0
pytest==7.0.1
PyYAML==6.0.1
simplejson==3.20.1
six==1.17.0
tomli==1.2.3
typing_extensions==4.1.1
virtualenv==20.17.1
zipp==3.6.0

name: pre-commit
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - argparse==1.4.0
      - aspy-yaml==1.3.0
      - astroid==1.3.2
      - attrs==22.2.0
      - cached-property==1.5.2
      - coverage==6.2
      - distlib==0.3.9
      - filelock==3.4.1
      - flake8==5.0.4
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - iniconfig==1.1.1
      - jsonschema==3.2.0
      - logilab-common==1.9.7
      - mccabe==0.7.0
      - mock==5.2.0
      - mypy-extensions==1.0.0
      - nodeenv==1.6.0
      - ordereddict==1.1
      - packaging==21.3
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pycodestyle==2.9.1
      - pyflakes==2.5.0
      - pylint==1.3.1
      - pyparsing==3.1.4
      - pyrsistent==0.18.0
      - pytest==7.0.1
      - pyyaml==6.0.1
      - simplejson==3.20.1
      - six==1.17.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - virtualenv==20.17.1
      - zipp==3.6.0
prefix: /opt/conda/envs/pre-commit

tests/commands/autoupdate_test.py::test_autoupdate_local_hooks
tests/commands/autoupdate_test.py::test_up_to_date_repo tests/commands/autoupdate_test.py::test_autoupdate_up_to_date_repo tests/commands/autoupdate_test.py::test_out_of_date_repo tests/commands/autoupdate_test.py::test_autoupdate_out_of_date_repo tests/commands/autoupdate_test.py::test_hook_disppearing_repo_raises tests/commands/autoupdate_test.py::test_autoupdate_hook_disappearing_repo tests/repository_test.py::test_python_hook tests/repository_test.py::test_python_hook_args_with_spaces tests/repository_test.py::test_switch_language_versions_doesnt_clobber tests/repository_test.py::test_versioned_python_hook tests/repository_test.py::test_run_a_node_hook tests/repository_test.py::test_run_versioned_node_hook tests/repository_test.py::test_run_a_ruby_hook tests/repository_test.py::test_run_versioned_ruby_hook tests/repository_test.py::test_system_hook_with_spaces tests/repository_test.py::test_run_a_script_hook tests/repository_test.py::test_run_hook_with_spaced_args tests/repository_test.py::test_pcre_hook_no_match tests/repository_test.py::test_pcre_hook_matching tests/repository_test.py::test_pcre_many_files tests/repository_test.py::test_cwd_of_hook tests/repository_test.py::test_lots_of_files tests/repository_test.py::test_languages tests/repository_test.py::test_reinstall tests/repository_test.py::test_control_c_control_c_on_install tests/repository_test.py::test_really_long_file_paths tests/repository_test.py::test_config_overrides_repo_specifics tests/repository_test.py::test_tags_on_repositories
tests/repository_test.py::test_repo_url tests/repository_test.py::test_sha tests/repository_test.py::test_local_repository
pre_commit/commands/autoupdate.py pre_commit/repository.py
pre_commit/commands/autoupdate.py pre_commit/repository.py