summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-05-10 06:30:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-05-10 06:30:43 +0000
commitc3ded2824ef2c8a2ed59b2a6e339aba8810c1e06 (patch)
tree3261d832802f924e45a17fe459b89b2a1829b75d
parentReleasing debian version 3.2.2-1. (diff)
downloadpre-commit-c3ded2824ef2c8a2ed59b2a6e339aba8810c1e06.tar.xz
pre-commit-c3ded2824ef2c8a2ed59b2a6e339aba8810c1e06.zip
Merging upstream version 3.3.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--.pre-commit-config.yaml4
-rw-r--r--CHANGELOG.md20
-rw-r--r--pre_commit/commands/autoupdate.py154
-rw-r--r--pre_commit/lang_base.py10
-rw-r--r--pre_commit/main.py9
-rw-r--r--pre_commit/resources/ruby-build.tar.gzbin76466 -> 75808 bytes
-rw-r--r--pre_commit/xargs.py8
-rw-r--r--setup.cfg2
-rwxr-xr-xtesting/make-archives2
-rw-r--r--tests/commands/autoupdate_test.py96
-rw-r--r--tests/commands/gc_test.py5
11 files changed, 180 insertions, 130 deletions
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index cc96a70..ffd3058 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -25,7 +25,7 @@ repos:
- id: add-trailing-comma
args: [--py36-plus]
- repo: https://github.com/asottile/pyupgrade
- rev: v3.3.1
+ rev: v3.3.2
hooks:
- id: pyupgrade
args: [--py38-plus]
@@ -38,7 +38,7 @@ repos:
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v1.1.1
+ rev: v1.2.0
hooks:
- id: mypy
additional_dependencies: [types-all]
diff --git a/CHANGELOG.md b/CHANGELOG.md
index efd96c7..970b8be 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,23 @@
+3.3.1 - 2023-05-02
+==================
+
+### Fixes
+- Work around `git` partial clone bug for `autoupdate` on windows.
+ - #2866 PR by @asottile.
+ - #2865 issue by @adehad.
+
+3.3.0 - 2023-05-01
+==================
+
+### Features
+- Upgrade ruby-build.
+ - #2846 PR by @jalessio.
+- Use blobless clone for faster autoupdate.
+ - #2859 PR by @asottile.
+- Add `-j` / `--jobs` argument to `autoupdate` for parallel execution.
+ - #2863 PR by @asottile.
+ - issue by @gaborbernat.
+
3.2.2 - 2023-04-03
==================
diff --git a/pre_commit/commands/autoupdate.py b/pre_commit/commands/autoupdate.py
index 7ed6e77..e7725fd 100644
--- a/pre_commit/commands/autoupdate.py
+++ b/pre_commit/commands/autoupdate.py
@@ -1,5 +1,6 @@
from __future__ import annotations
+import concurrent.futures
import os.path
import re
import tempfile
@@ -10,13 +11,13 @@ from typing import Sequence
import pre_commit.constants as C
from pre_commit import git
from pre_commit import output
+from pre_commit import xargs
from pre_commit.clientlib import InvalidManifestError
from pre_commit.clientlib import load_config
from pre_commit.clientlib import load_manifest
from pre_commit.clientlib import LOCAL
from pre_commit.clientlib import META
from pre_commit.commands.migrate_config import migrate_config
-from pre_commit.store import Store
from pre_commit.util import CalledProcessError
from pre_commit.util import cmd_output
from pre_commit.util import cmd_output_b
@@ -27,49 +28,58 @@ from pre_commit.yaml import yaml_load
class RevInfo(NamedTuple):
repo: str
rev: str
- frozen: str | None
+ frozen: str | None = None
+ hook_ids: frozenset[str] = frozenset()
@classmethod
def from_config(cls, config: dict[str, Any]) -> RevInfo:
- return cls(config['repo'], config['rev'], None)
+ return cls(config['repo'], config['rev'])
def update(self, tags_only: bool, freeze: bool) -> RevInfo:
- git_cmd = ('git', *git.NO_FS_MONITOR)
+ with tempfile.TemporaryDirectory() as tmp:
+ _git = ('git', *git.NO_FS_MONITOR, '-C', tmp)
- if tags_only:
- tag_cmd = (
- *git_cmd, 'describe',
- 'FETCH_HEAD', '--tags', '--abbrev=0',
- )
- else:
- tag_cmd = (
- *git_cmd, 'describe',
- 'FETCH_HEAD', '--tags', '--exact',
- )
+ if tags_only:
+ tag_opt = '--abbrev=0'
+ else:
+ tag_opt = '--exact'
+ tag_cmd = (*_git, 'describe', 'FETCH_HEAD', '--tags', tag_opt)
- with tempfile.TemporaryDirectory() as tmp:
git.init_repo(tmp, self.repo)
+ cmd_output_b(*_git, 'config', 'extensions.partialClone', 'true')
cmd_output_b(
- *git_cmd, 'fetch', 'origin', 'HEAD', '--tags',
- cwd=tmp,
+ *_git, 'fetch', 'origin', 'HEAD',
+ '--quiet', '--filter=blob:none', '--tags',
)
try:
- rev = cmd_output(*tag_cmd, cwd=tmp)[1].strip()
+ rev = cmd_output(*tag_cmd)[1].strip()
except CalledProcessError:
- cmd = (*git_cmd, 'rev-parse', 'FETCH_HEAD')
- rev = cmd_output(*cmd, cwd=tmp)[1].strip()
+ rev = cmd_output(*_git, 'rev-parse', 'FETCH_HEAD')[1].strip()
else:
if tags_only:
rev = git.get_best_candidate_tag(rev, tmp)
frozen = None
if freeze:
- exact_rev_cmd = (*git_cmd, 'rev-parse', rev)
- exact = cmd_output(*exact_rev_cmd, cwd=tmp)[1].strip()
+ exact = cmd_output(*_git, 'rev-parse', rev)[1].strip()
if exact != rev:
rev, frozen = exact, rev
- return self._replace(rev=rev, frozen=frozen)
+
+ try:
+ # workaround for windows -- see #2865
+ cmd_output_b(*_git, 'show', f'{rev}:{C.MANIFEST_FILE}')
+ cmd_output(*_git, 'checkout', rev, '--', C.MANIFEST_FILE)
+ except CalledProcessError:
+ pass # this will be caught by manifest validating code
+ try:
+ manifest = load_manifest(os.path.join(tmp, C.MANIFEST_FILE))
+ except InvalidManifestError as e:
+ raise RepositoryCannotBeUpdatedError(f'[{self.repo}] {e}')
+ else:
+ hook_ids = frozenset(hook['id'] for hook in manifest)
+
+ return self._replace(rev=rev, frozen=frozen, hook_ids=hook_ids)
class RepositoryCannotBeUpdatedError(RuntimeError):
@@ -79,24 +89,30 @@ class RepositoryCannotBeUpdatedError(RuntimeError):
def _check_hooks_still_exist_at_rev(
repo_config: dict[str, Any],
info: RevInfo,
- store: Store,
) -> None:
- try:
- path = store.clone(repo_config['repo'], info.rev)
- manifest = load_manifest(os.path.join(path, C.MANIFEST_FILE))
- except InvalidManifestError as e:
- raise RepositoryCannotBeUpdatedError(str(e))
-
# See if any of our hooks were deleted with the new commits
hooks = {hook['id'] for hook in repo_config['hooks']}
- hooks_missing = hooks - {hook['id'] for hook in manifest}
+ hooks_missing = hooks - info.hook_ids
if hooks_missing:
raise RepositoryCannotBeUpdatedError(
- f'Cannot update because the update target is missing these '
- f'hooks:\n{", ".join(sorted(hooks_missing))}',
+ f'[{info.repo}] Cannot update because the update target is '
+ f'missing these hooks: {", ".join(sorted(hooks_missing))}',
)
+def _update_one(
+ i: int,
+ repo: dict[str, Any],
+ *,
+ tags_only: bool,
+ freeze: bool,
+) -> tuple[int, RevInfo, RevInfo]:
+ old = RevInfo.from_config(repo)
+ new = old.update(tags_only=tags_only, freeze=freeze)
+ _check_hooks_still_exist_at_rev(repo, new)
+ return i, old, new
+
+
REV_LINE_RE = re.compile(r'^(\s+)rev:(\s*)([\'"]?)([^\s#]+)(.*)(\r?\n)$')
@@ -145,49 +161,53 @@ def _write_new_config(path: str, rev_infos: list[RevInfo | None]) -> None:
def autoupdate(
config_file: str,
- store: Store,
tags_only: bool,
freeze: bool,
repos: Sequence[str] = (),
+ jobs: int = 1,
) -> int:
"""Auto-update the pre-commit config to the latest versions of repos."""
migrate_config(config_file, quiet=True)
- retv = 0
- rev_infos: list[RevInfo | None] = []
changed = False
+ retv = 0
- config = load_config(config_file)
- for repo_config in config['repos']:
- if repo_config['repo'] in {LOCAL, META}:
- continue
-
- info = RevInfo.from_config(repo_config)
- if repos and info.repo not in repos:
- rev_infos.append(None)
- continue
-
- output.write(f'Updating {info.repo} ... ')
- new_info = info.update(tags_only=tags_only, freeze=freeze)
- try:
- _check_hooks_still_exist_at_rev(repo_config, new_info, store)
- except RepositoryCannotBeUpdatedError as error:
- output.write_line(error.args[0])
- rev_infos.append(None)
- retv = 1
- continue
-
- if new_info.rev != info.rev:
- changed = True
- if new_info.frozen:
- updated_to = f'{new_info.frozen} (frozen)'
+ config_repos = [
+ repo for repo in load_config(config_file)['repos']
+ if repo['repo'] not in {LOCAL, META}
+ ]
+
+ rev_infos: list[RevInfo | None] = [None] * len(config_repos)
+ jobs = jobs or xargs.cpu_count() # 0 => number of cpus
+ jobs = min(jobs, len(repos) or len(config_repos)) # max 1-per-thread
+ jobs = max(jobs, 1) # at least one thread
+ with concurrent.futures.ThreadPoolExecutor(jobs) as exe:
+ futures = [
+ exe.submit(
+ _update_one,
+ i, repo, tags_only=tags_only, freeze=freeze,
+ )
+ for i, repo in enumerate(config_repos)
+ if not repos or repo['repo'] in repos
+ ]
+ for future in concurrent.futures.as_completed(futures):
+ try:
+ i, old, new = future.result()
+ except RepositoryCannotBeUpdatedError as e:
+ output.write_line(str(e))
+ retv = 1
else:
- updated_to = new_info.rev
- msg = f'updating {info.rev} -> {updated_to}.'
- output.write_line(msg)
- rev_infos.append(new_info)
- else:
- output.write_line('already up to date.')
- rev_infos.append(None)
+ if new.rev != old.rev:
+ changed = True
+ if new.frozen:
+ new_s = f'{new.frozen} (frozen)'
+ else:
+ new_s = new.rev
+ msg = f'updating {old.rev} -> {new_s}'
+ rev_infos[i] = new
+ else:
+ msg = 'already up to date!'
+
+ output.write_line(f'[{old.repo}] {msg}')
if changed:
_write_new_config(config_file, rev_infos)
diff --git a/pre_commit/lang_base.py b/pre_commit/lang_base.py
index 9480c55..4a993ea 100644
--- a/pre_commit/lang_base.py
+++ b/pre_commit/lang_base.py
@@ -1,7 +1,6 @@
from __future__ import annotations
import contextlib
-import multiprocessing
import os
import random
import re
@@ -15,9 +14,9 @@ from typing import Sequence
import pre_commit.constants as C
from pre_commit import parse_shebang
+from pre_commit import xargs
from pre_commit.prefix import Prefix
from pre_commit.util import cmd_output_b
-from pre_commit.xargs import xargs
FIXED_RANDOM_SEED = 1542676187
@@ -140,10 +139,7 @@ def target_concurrency() -> int:
if 'TRAVIS' in os.environ:
return 2
else:
- try:
- return multiprocessing.cpu_count()
- except NotImplementedError:
- return 1
+ return xargs.cpu_count()
def _shuffled(seq: Sequence[str]) -> list[str]:
@@ -171,7 +167,7 @@ def run_xargs(
# ordering.
file_args = _shuffled(file_args)
jobs = target_concurrency()
- return xargs(cmd, file_args, target_concurrency=jobs, color=color)
+ return xargs.xargs(cmd, file_args, target_concurrency=jobs, color=color)
def hook_cmd(entry: str, args: Sequence[str]) -> tuple[str, ...]:
diff --git a/pre_commit/main.py b/pre_commit/main.py
index 9615c5e..9dfce2c 100644
--- a/pre_commit/main.py
+++ b/pre_commit/main.py
@@ -226,9 +226,13 @@ def main(argv: Sequence[str] | None = None) -> int:
help='Store "frozen" hashes in `rev` instead of tag names',
)
autoupdate_parser.add_argument(
- '--repo', dest='repos', action='append', metavar='REPO',
+ '--repo', dest='repos', action='append', metavar='REPO', default=[],
help='Only update this repository -- may be specified multiple times.',
)
+ autoupdate_parser.add_argument(
+ '-j', '--jobs', type=int, default=1,
+ help='Number of threads to use. (default %(default)s).',
+ )
_add_cmd('clean', help='Clean out pre-commit files.')
@@ -368,10 +372,11 @@ def main(argv: Sequence[str] | None = None) -> int:
if args.command == 'autoupdate':
return autoupdate(
- args.config, store,
+ args.config,
tags_only=not args.bleeding_edge,
freeze=args.freeze,
repos=args.repos,
+ jobs=args.jobs,
)
elif args.command == 'clean':
return clean(store)
diff --git a/pre_commit/resources/ruby-build.tar.gz b/pre_commit/resources/ruby-build.tar.gz
index b6eacf5..19d467f 100644
--- a/pre_commit/resources/ruby-build.tar.gz
+++ b/pre_commit/resources/ruby-build.tar.gz
Binary files differ
diff --git a/pre_commit/xargs.py b/pre_commit/xargs.py
index e3af90e..31be6f3 100644
--- a/pre_commit/xargs.py
+++ b/pre_commit/xargs.py
@@ -3,6 +3,7 @@ from __future__ import annotations
import concurrent.futures
import contextlib
import math
+import multiprocessing
import os
import subprocess
import sys
@@ -22,6 +23,13 @@ TArg = TypeVar('TArg')
TRet = TypeVar('TRet')
+def cpu_count() -> int:
+ try:
+ return multiprocessing.cpu_count()
+ except NotImplementedError:
+ return 1
+
+
def _environ_size(_env: MutableMapping[str, str] | None = None) -> int:
environ = _env if _env is not None else getattr(os, 'environb', os.environ)
size = 8 * len(environ) # number of pointers in `envp`
diff --git a/setup.cfg b/setup.cfg
index 89e8e4a..cdd6ec3 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = pre_commit
-version = 3.2.2
+version = 3.3.1
description = A framework for managing and maintaining multi-language pre-commit hooks.
long_description = file: README.md
long_description_content_type = text/markdown
diff --git a/testing/make-archives b/testing/make-archives
index cec9a9f..8ec05e2 100755
--- a/testing/make-archives
+++ b/testing/make-archives
@@ -17,7 +17,7 @@ from typing import Sequence
REPOS = (
('rbenv', 'https://github.com/rbenv/rbenv', '38e1fbb'),
- ('ruby-build', 'https://github.com/rbenv/ruby-build', '9d92a69'),
+ ('ruby-build', 'https://github.com/rbenv/ruby-build', '855b963'),
(
'ruby-download',
'https://github.com/garnieretienne/rvm-download',
diff --git a/tests/commands/autoupdate_test.py b/tests/commands/autoupdate_test.py
index 4bcb5d8..71bd044 100644
--- a/tests/commands/autoupdate_test.py
+++ b/tests/commands/autoupdate_test.py
@@ -67,7 +67,7 @@ def test_rev_info_from_config():
def test_rev_info_update_up_to_date_repo(up_to_date):
config = make_config_from_repo(up_to_date)
- info = RevInfo.from_config(config)
+ info = RevInfo.from_config(config)._replace(hook_ids=frozenset(('foo',)))
new_info = info.update(tags_only=False, freeze=False)
assert info == new_info
@@ -139,7 +139,7 @@ def test_rev_info_update_does_not_freeze_if_already_sha(out_of_date):
assert new_info.frozen is None
-def test_autoupdate_up_to_date_repo(up_to_date, tmpdir, store):
+def test_autoupdate_up_to_date_repo(up_to_date, tmpdir):
contents = (
f'repos:\n'
f'- repo: {up_to_date}\n'
@@ -150,11 +150,11 @@ def test_autoupdate_up_to_date_repo(up_to_date, tmpdir, store):
cfg = tmpdir.join(C.CONFIG_FILE)
cfg.write(contents)
- assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=False) == 0
assert cfg.read() == contents
-def test_autoupdate_old_revision_broken(tempdir_factory, in_tmpdir, store):
+def test_autoupdate_old_revision_broken(tempdir_factory, in_tmpdir):
"""In $FUTURE_VERSION, hooks.yaml will no longer be supported. This
asserts that when that day comes, pre-commit will be able to autoupdate
despite not being able to read hooks.yaml in that repository.
@@ -174,14 +174,14 @@ def test_autoupdate_old_revision_broken(tempdir_factory, in_tmpdir, store):
write_config('.', config)
with open(C.CONFIG_FILE) as f:
before = f.read()
- assert autoupdate(C.CONFIG_FILE, store, freeze=False, tags_only=False) == 0
+ assert autoupdate(C.CONFIG_FILE, freeze=False, tags_only=False) == 0
with open(C.CONFIG_FILE) as f:
after = f.read()
assert before != after
assert update_rev in after
-def test_autoupdate_out_of_date_repo(out_of_date, tmpdir, store):
+def test_autoupdate_out_of_date_repo(out_of_date, tmpdir):
fmt = (
'repos:\n'
'- repo: {}\n'
@@ -192,24 +192,24 @@ def test_autoupdate_out_of_date_repo(out_of_date, tmpdir, store):
cfg = tmpdir.join(C.CONFIG_FILE)
cfg.write(fmt.format(out_of_date.path, out_of_date.original_rev))
- assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=False) == 0
assert cfg.read() == fmt.format(out_of_date.path, out_of_date.head_rev)
-def test_autoupdate_with_core_useBuiltinFSMonitor(out_of_date, tmpdir, store):
+def test_autoupdate_with_core_useBuiltinFSMonitor(out_of_date, tmpdir):
# force the setting on "globally" for git
home = tmpdir.join('fakehome').ensure_dir()
home.join('.gitconfig').write('[core]\nuseBuiltinFSMonitor = true\n')
with envcontext.envcontext((('HOME', str(home)),)):
- test_autoupdate_out_of_date_repo(out_of_date, tmpdir, store)
+ test_autoupdate_out_of_date_repo(out_of_date, tmpdir)
-def test_autoupdate_pure_yaml(out_of_date, tmpdir, store):
+def test_autoupdate_pure_yaml(out_of_date, tmpdir):
with mock.patch.object(yaml, 'Dumper', yaml.yaml.SafeDumper):
- test_autoupdate_out_of_date_repo(out_of_date, tmpdir, store)
+ test_autoupdate_out_of_date_repo(out_of_date, tmpdir)
-def test_autoupdate_only_one_to_update(up_to_date, out_of_date, tmpdir, store):
+def test_autoupdate_only_one_to_update(up_to_date, out_of_date, tmpdir):
fmt = (
'repos:\n'
'- repo: {}\n'
@@ -228,7 +228,7 @@ def test_autoupdate_only_one_to_update(up_to_date, out_of_date, tmpdir, store):
)
cfg.write(before)
- assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=False) == 0
assert cfg.read() == fmt.format(
up_to_date, git.head_rev(up_to_date),
out_of_date.path, out_of_date.head_rev,
@@ -236,7 +236,7 @@ def test_autoupdate_only_one_to_update(up_to_date, out_of_date, tmpdir, store):
def test_autoupdate_out_of_date_repo_with_correct_repo_name(
- out_of_date, in_tmpdir, store,
+ out_of_date, in_tmpdir,
):
stale_config = make_config_from_repo(
out_of_date.path, rev=out_of_date.original_rev, check=False,
@@ -249,7 +249,7 @@ def test_autoupdate_out_of_date_repo_with_correct_repo_name(
before = f.read()
repo_name = f'file://{out_of_date.path}'
ret = autoupdate(
- C.CONFIG_FILE, store, freeze=False, tags_only=False,
+ C.CONFIG_FILE, freeze=False, tags_only=False,
repos=(repo_name,),
)
with open(C.CONFIG_FILE) as f:
@@ -261,7 +261,7 @@ def test_autoupdate_out_of_date_repo_with_correct_repo_name(
def test_autoupdate_out_of_date_repo_with_wrong_repo_name(
- out_of_date, in_tmpdir, store,
+ out_of_date, in_tmpdir,
):
config = make_config_from_repo(
out_of_date.path, rev=out_of_date.original_rev, check=False,
@@ -272,7 +272,7 @@ def test_autoupdate_out_of_date_repo_with_wrong_repo_name(
before = f.read()
# It will not update it, because the name doesn't match
ret = autoupdate(
- C.CONFIG_FILE, store, freeze=False, tags_only=False,
+ C.CONFIG_FILE, freeze=False, tags_only=False,
repos=('dne',),
)
with open(C.CONFIG_FILE) as f:
@@ -281,7 +281,7 @@ def test_autoupdate_out_of_date_repo_with_wrong_repo_name(
assert before == after
-def test_does_not_reformat(tmpdir, out_of_date, store):
+def test_does_not_reformat(tmpdir, out_of_date):
fmt = (
'repos:\n'
'- repo: {}\n'
@@ -294,12 +294,12 @@ def test_does_not_reformat(tmpdir, out_of_date, store):
cfg = tmpdir.join(C.CONFIG_FILE)
cfg.write(fmt.format(out_of_date.path, out_of_date.original_rev))
- assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=False) == 0
expected = fmt.format(out_of_date.path, out_of_date.head_rev)
assert cfg.read() == expected
-def test_does_not_change_mixed_endlines_read(up_to_date, tmpdir, store):
+def test_does_not_change_mixed_endlines_read(up_to_date, tmpdir):
fmt = (
'repos:\n'
'- repo: {}\n'
@@ -314,11 +314,11 @@ def test_does_not_change_mixed_endlines_read(up_to_date, tmpdir, store):
expected = fmt.format(up_to_date, git.head_rev(up_to_date)).encode()
cfg.write_binary(expected)
- assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=False) == 0
assert cfg.read_binary() == expected
-def test_does_not_change_mixed_endlines_write(tmpdir, out_of_date, store):
+def test_does_not_change_mixed_endlines_write(tmpdir, out_of_date):
fmt = (
'repos:\n'
'- repo: {}\n'
@@ -333,12 +333,12 @@ def test_does_not_change_mixed_endlines_write(tmpdir, out_of_date, store):
fmt.format(out_of_date.path, out_of_date.original_rev).encode(),
)
- assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=False) == 0
expected = fmt.format(out_of_date.path, out_of_date.head_rev).encode()
assert cfg.read_binary() == expected
-def test_loses_formatting_when_not_detectable(out_of_date, store, tmpdir):
+def test_loses_formatting_when_not_detectable(out_of_date, tmpdir):
"""A best-effort attempt is made at updating rev without rewriting
formatting. When the original formatting cannot be detected, this
is abandoned.
@@ -359,7 +359,7 @@ def test_loses_formatting_when_not_detectable(out_of_date, store, tmpdir):
cfg = tmpdir.join(C.CONFIG_FILE)
cfg.write(config)
- assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=False) == 0
expected = (
f'repos:\n'
f'- repo: {out_of_date.path}\n'
@@ -370,43 +370,43 @@ def test_loses_formatting_when_not_detectable(out_of_date, store, tmpdir):
assert cfg.read() == expected
-def test_autoupdate_tagged_repo(tagged, in_tmpdir, store):
+def test_autoupdate_tagged_repo(tagged, in_tmpdir):
config = make_config_from_repo(tagged.path, rev=tagged.original_rev)
write_config('.', config)
- assert autoupdate(C.CONFIG_FILE, store, freeze=False, tags_only=False) == 0
+ assert autoupdate(C.CONFIG_FILE, freeze=False, tags_only=False) == 0
with open(C.CONFIG_FILE) as f:
assert 'v1.2.3' in f.read()
-def test_autoupdate_freeze(tagged, in_tmpdir, store):
+def test_autoupdate_freeze(tagged, in_tmpdir):
config = make_config_from_repo(tagged.path, rev=tagged.original_rev)
write_config('.', config)
- assert autoupdate(C.CONFIG_FILE, store, freeze=True, tags_only=False) == 0
+ assert autoupdate(C.CONFIG_FILE, freeze=True, tags_only=False) == 0
with open(C.CONFIG_FILE) as f:
expected = f'rev: {tagged.head_rev} # frozen: v1.2.3'
assert expected in f.read()
# if we un-freeze it should remove the frozen comment
- assert autoupdate(C.CONFIG_FILE, store, freeze=False, tags_only=False) == 0
+ assert autoupdate(C.CONFIG_FILE, freeze=False, tags_only=False) == 0
with open(C.CONFIG_FILE) as f:
assert 'rev: v1.2.3\n' in f.read()
-def test_autoupdate_tags_only(tagged, in_tmpdir, store):
+def test_autoupdate_tags_only(tagged, in_tmpdir):
# add some commits after the tag
git_commit(cwd=tagged.path)
config = make_config_from_repo(tagged.path, rev=tagged.original_rev)
write_config('.', config)
- assert autoupdate(C.CONFIG_FILE, store, freeze=False, tags_only=True) == 0
+ assert autoupdate(C.CONFIG_FILE, freeze=False, tags_only=True) == 0
with open(C.CONFIG_FILE) as f:
assert 'v1.2.3' in f.read()
-def test_autoupdate_latest_no_config(out_of_date, in_tmpdir, store):
+def test_autoupdate_latest_no_config(out_of_date, in_tmpdir):
config = make_config_from_repo(
out_of_date.path, rev=out_of_date.original_rev,
)
@@ -415,12 +415,12 @@ def test_autoupdate_latest_no_config(out_of_date, in_tmpdir, store):
cmd_output('git', 'rm', '-r', ':/', cwd=out_of_date.path)
git_commit(cwd=out_of_date.path)
- assert autoupdate(C.CONFIG_FILE, store, freeze=False, tags_only=False) == 1
+ assert autoupdate(C.CONFIG_FILE, freeze=False, tags_only=False) == 1
with open(C.CONFIG_FILE) as f:
assert out_of_date.original_rev in f.read()
-def test_hook_disppearing_repo_raises(hook_disappearing, store):
+def test_hook_disppearing_repo_raises(hook_disappearing):
config = make_config_from_repo(
hook_disappearing.path,
rev=hook_disappearing.original_rev,
@@ -428,10 +428,10 @@ def test_hook_disppearing_repo_raises(hook_disappearing, store):
)
info = RevInfo.from_config(config).update(tags_only=False, freeze=False)
with pytest.raises(RepositoryCannotBeUpdatedError):
- _check_hooks_still_exist_at_rev(config, info, store)
+ _check_hooks_still_exist_at_rev(config, info)
-def test_autoupdate_hook_disappearing_repo(hook_disappearing, tmpdir, store):
+def test_autoupdate_hook_disappearing_repo(hook_disappearing, tmpdir):
contents = (
f'repos:\n'
f'- repo: {hook_disappearing.path}\n'
@@ -442,21 +442,21 @@ def test_autoupdate_hook_disappearing_repo(hook_disappearing, tmpdir, store):
cfg = tmpdir.join(C.CONFIG_FILE)
cfg.write(contents)
- assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 1
+ assert autoupdate(str(cfg), freeze=False, tags_only=False) == 1
assert cfg.read() == contents
-def test_autoupdate_local_hooks(in_git_dir, store):
+def test_autoupdate_local_hooks(in_git_dir):
config = sample_local_config()
add_config_to_repo('.', config)
- assert autoupdate(C.CONFIG_FILE, store, freeze=False, tags_only=False) == 0
+ assert autoupdate(C.CONFIG_FILE, freeze=False, tags_only=False) == 0
new_config_written = read_config('.')
assert len(new_config_written['repos']) == 1
assert new_config_written['repos'][0] == config
def test_autoupdate_local_hooks_with_out_of_date_repo(
- out_of_date, in_tmpdir, store,
+ out_of_date, in_tmpdir,
):
stale_config = make_config_from_repo(
out_of_date.path, rev=out_of_date.original_rev, check=False,
@@ -464,13 +464,13 @@ def test_autoupdate_local_hooks_with_out_of_date_repo(
local_config = sample_local_config()
config = {'repos': [local_config, stale_config]}
write_config('.', config)
- assert autoupdate(C.CONFIG_FILE, store, freeze=False, tags_only=False) == 0
+ assert autoupdate(C.CONFIG_FILE, freeze=False, tags_only=False) == 0
new_config_written = read_config('.')
assert len(new_config_written['repos']) == 2
assert new_config_written['repos'][0] == local_config
-def test_autoupdate_meta_hooks(tmpdir, store):
+def test_autoupdate_meta_hooks(tmpdir):
cfg = tmpdir.join(C.CONFIG_FILE)
cfg.write(
'repos:\n'
@@ -478,7 +478,7 @@ def test_autoupdate_meta_hooks(tmpdir, store):
' hooks:\n'
' - id: check-useless-excludes\n',
)
- assert autoupdate(str(cfg), store, freeze=False, tags_only=True) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=True) == 0
assert cfg.read() == (
'repos:\n'
'- repo: meta\n'
@@ -487,7 +487,7 @@ def test_autoupdate_meta_hooks(tmpdir, store):
)
-def test_updates_old_format_to_new_format(tmpdir, capsys, store):
+def test_updates_old_format_to_new_format(tmpdir, capsys):
cfg = tmpdir.join(C.CONFIG_FILE)
cfg.write(
'- repo: local\n'
@@ -497,7 +497,7 @@ def test_updates_old_format_to_new_format(tmpdir, capsys, store):
' entry: ./bin/foo.sh\n'
' language: script\n',
)
- assert autoupdate(str(cfg), store, freeze=False, tags_only=True) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=True) == 0
contents = cfg.read()
assert contents == (
'repos:\n'
@@ -512,7 +512,7 @@ def test_updates_old_format_to_new_format(tmpdir, capsys, store):
assert out == 'Configuration has been migrated.\n'
-def test_maintains_rev_quoting_style(tmpdir, out_of_date, store):
+def test_maintains_rev_quoting_style(tmpdir, out_of_date):
fmt = (
'repos:\n'
'- repo: {path}\n'
@@ -527,6 +527,6 @@ def test_maintains_rev_quoting_style(tmpdir, out_of_date, store):
cfg = tmpdir.join(C.CONFIG_FILE)
cfg.write(fmt.format(path=out_of_date.path, rev=out_of_date.original_rev))
- assert autoupdate(str(cfg), store, freeze=False, tags_only=False) == 0
+ assert autoupdate(str(cfg), freeze=False, tags_only=False) == 0
expected = fmt.format(path=out_of_date.path, rev=out_of_date.head_rev)
assert cfg.read() == expected
diff --git a/tests/commands/gc_test.py b/tests/commands/gc_test.py
index c128e93..95113ed 100644
--- a/tests/commands/gc_test.py
+++ b/tests/commands/gc_test.py
@@ -43,8 +43,9 @@ def test_gc(tempdir_factory, store, in_git_dir, cap_out):
store.mark_config_used(C.CONFIG_FILE)
# update will clone both the old and new repo, making the old one gc-able
- install_hooks(C.CONFIG_FILE, store)
- assert not autoupdate(C.CONFIG_FILE, store, freeze=False, tags_only=False)
+ assert not install_hooks(C.CONFIG_FILE, store)
+ assert not autoupdate(C.CONFIG_FILE, freeze=False, tags_only=False)
+ assert not install_hooks(C.CONFIG_FILE, store)
assert _config_count(store) == 1
assert _repo_count(store) == 2