Repository: pre-commit/pre-commit

Issue:
Autoupdate, select, multiple repositories
Brought up from #657

As noted by @asottile, we can do

`pre-commit autoupdate --repo repo1 --repo repo2 --repo repo3`

to update multiple repositories.

That can be implemented pretty easily with `action='append'` -- and changing the same parts as #657

Discussion:

Patch:
diff --git a/pre_commit/commands/autoupdate.py b/pre_commit/commands/autoupdate.py
index ca83a58..f375913 100644
--- a/pre_commit/commands/autoupdate.py
+++ b/pre_commit/commands/autoupdate.py
@@ -106,7 +106,7 @@ def _write_new_config_file(path, output):
         f.write(to_write)
 
 
-def autoupdate(runner, tags_only, repo=None):
+def autoupdate(runner, tags_only, repos=()):
     """Auto-update the pre-commit config to the latest versions of repos."""
     migrate_config(runner, quiet=True)
     retv = 0
@@ -120,7 +120,7 @@ def autoupdate(runner, tags_only, repo=None):
             is_local_repo(repo_config) or
             is_meta_repo(repo_config) or
             # Skip updating any repo_configs that aren't for the specified repo
-            repo and repo != repo_config['repo']
+            repos and repo_config['repo'] not in repos
         ):
             output_repos.append(repo_config)
             continue
diff --git a/pre_commit/main.py b/pre_commit/main.py
index 16b6c3b..e2f48ed 100644
--- a/pre_commit/main.py
+++ b/pre_commit/main.py
@@ -168,7 +168,8 @@ def main(argv=None):
         ),
     )
     autoupdate_parser.add_argument(
-        '--repo', help='Only update this repository.',
+        '--repo', dest='repos', action='append', metavar='REPO',
+        help='Only update this repository -- may be specified multiple times.',
     )
 
     migrate_config_parser = subparsers.add_parser(
@@ -251,7 +252,7 @@ def main(argv=None):
             return autoupdate(
                 runner,
                 tags_only=not args.bleeding_edge,
-                repo=args.repo,
+                repos=args.repos,
             )
         elif args.command == 'migrate-config':
             return migrate_config(runner)


Test patch:
diff --git a/tests/commands/autoupdate_test.py b/tests/commands/autoupdate_test.py
index 91e7733..8fe4583 100644
--- a/tests/commands/autoupdate_test.py
+++ b/tests/commands/autoupdate_test.py
@@ -138,7 +138,7 @@ def test_autoupdate_out_of_date_repo_with_correct_repo_name(
     runner = Runner('.', C.CONFIG_FILE)
     before = open(C.CONFIG_FILE).read()
     repo_name = 'file://{}'.format(out_of_date_repo.path)
-    ret = autoupdate(runner, tags_only=False, repo=repo_name)
+    ret = autoupdate(runner, tags_only=False, repos=(repo_name,))
     after = open(C.CONFIG_FILE).read()
     assert ret == 0
     assert before != after
@@ -158,7 +158,7 @@ def test_autoupdate_out_of_date_repo_with_wrong_repo_name(
     runner = Runner('.', C.CONFIG_FILE)
     before = open(C.CONFIG_FILE).read()
     # It will not update it, because the name doesn't match
-    ret = autoupdate(runner, tags_only=False, repo='wrong_repo_name')
+    ret = autoupdate(runner, tags_only=False, repos=('wrong_repo_name',))
     after = open(C.CONFIG_FILE).read()
     assert ret == 0
     assert before == after
diff --git a/tests/commands/install_uninstall_test.py b/tests/commands/install_uninstall_test.py
index 00d5eff..ea6727e 100644
--- a/tests/commands/install_uninstall_test.py
+++ b/tests/commands/install_uninstall_test.py
@@ -187,14 +187,11 @@ def test_unicode_merge_commit_message(tempdir_factory):
     with cwd(path):
         assert install(Runner(path, C.CONFIG_FILE)) == 0
         cmd_output('git', 'checkout', 'master', '-b', 'foo')
-        cmd_output('git', 'commit', '--allow-empty', '-n', '-m', 'branch2')
+        cmd_output('git', 'commit', '--allow-empty', '-m', 'branch2')
         cmd_output('git', 'checkout', 'master')
         cmd_output('git', 'merge', 'foo', '--no-ff', '--no-commit', '-m', '☃')
         # Used to crash
-        cmd_output_mocked_pre_commit_home(
-            'git', 'commit', '--no-edit',
-            tempdir_factory=tempdir_factory,
-        )
+        cmd_output('git', 'commit', '--no-edit')
 
 
 def test_install_idempotent(tempdir_factory):