Skip to content

Upgrading pre-commit 1 to 2

Breaking1.21.0 → 2.21.0Breaking4Platform4Deprecated2New43Changed27Fixed91Other6

BreakingUpgrade verdict

4 breaking changes and 4 platform requirement changes.

  • Four pre-commit sub-commands no longer accept a --config flag that did nothing.
  • Hooks configured with the pcre language no longer work and must switch to pygrep.
  • The autoupdate command no longer accepts the --tags-only flag, which had no effect anyway.
  • pre-commit now returns different exit codes depending on the kind of failure, so scripts checking for a nonzero exit may need updating.
Top 5 of 10 that need code or config changes

Python requirement changed in 2.18.0: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7 → >=3.7.

Drops aspy-yaml, six, toml.

Installs 10 packages in all (was 13).

Breaking4
Removes the unused --config option from the gc, sample-config, validate-config and validate-manifest sub-commands.
--configgcsample-configvalidate-configvalidate-manifest
Removes the pcre language; use pygrep instead.
pcrepygrep
Removes the --tags-only argument to pre-commit autoupdate, which has done nothing since 0.14.0.
--tags-onlypre-commit autoupdate
Exits with distinct codes: 1 for user error, 3 for unexpected error, 130 for ^C.
Platform4
Removes python3.6 support; pre-commit itself now requires python 3.7+.
Upgrades the supported Ruby versions.
Requires python>=3.6.1 (previously 3.6.0).
Removes python2 and python3.5 support; pre-commit itself now requires python 3.6+, though hooks written in python2 still run.
Deprecated2
Adds pre-commit validate-config and pre-commit validate-manifest subcommands and deprecates the standalone pre-commit-validate-config and pre-commit-validate-manifest commands.
pre-commit validate-configpre-commit validate-manifestpre-commit-validate-configpre-commit-validate-manifest
Makes language: python_venv an alias to language: python, to be removed in a future version.
language: python_venvlanguage: python

Generated by DepDelta from published Python source. Not mixed with prose notes.

  • changed: class MigrateShaToRev(object) → class MigrateShaToRev
  • changed: function check_min_version(version) → function check_min_version(version: str) -> None
  • changed: function check_type_tag(tag) → function check_type_tag(tag: str) -> None
  • changed: function ordered_load_normalize_legacy_config(contents) → function ordered_load_normalize_legacy_config(contents: str) -> dict[str, Any]
  • changed: function validate_config_main(argv=…) → function validate_config_main(argv: Sequence[str] | None=…) -> int
  • changed: function validate_manifest_main(argv=…) → function validate_manifest_main(argv: Sequence[str] | None=…) -> int
  • changed: function warn_unknown_keys_repo(extra, orig_keys, dct) → function warn_unknown_keys_repo(extra: Sequence[str], orig_keys: Sequence[str], dct: dict[str, str]) -> None
  • changed: function warn_unknown_keys_root(extra, orig_keys, dct) → function warn_unknown_keys_root(extra: Sequence[str], orig_keys: Sequence[str], dct: dict[str, str]) -> None
  • changed: method MigrateShaToRev.apply_default(dct) → method MigrateShaToRev.apply_default(dct: dict[str, Any]) -> None
  • changed: method MigrateShaToRev.check(dct) → method MigrateShaToRev.check(dct: dict[str, Any]) -> None
  • added: class NotAllowed(cfgv.OptionalNoDefault)
  • added: class OptionalSensibleRegexAtHook(cfgv.OptionalNoDefault)
  • added: class OptionalSensibleRegexAtTop(cfgv.OptionalNoDefault)
  • added: class WarnMutableRev(cfgv.ConditionalOptional)
  • added: method NotAllowed.check(dct: dict[str, Any]) -> None
  • added: method OptionalSensibleRegexAtHook.check(dct: dict[str, Any]) -> None
  • added: method OptionalSensibleRegexAtTop.check(dct: dict[str, Any]) -> None
  • added: method WarnMutableRev.check(dct: dict[str, Any]) -> None
  • added: variable LOCAL_HOOK_DICT
  • removed: class InvalidColorSetting(ValueError)
  • changed: function format_color(text, color, use_color_setting) → function format_color(text: str, color: str, use_color_setting: bool) -> str
  • changed: function use_color(setting) → function use_color(setting: str) -> bool
  • added: function add_color_option(parser: argparse.ArgumentParser) -> None
  • removed: function bool_errcheck(result, func, args)
  • removed: function enable_virtual_terminal_processing()
  • removed: variable ENABLE_VIRTUAL_TERMINAL_PROCESSING
  • removed: variable GetConsoleMode
  • removed: variable GetStdHandle
  • removed: variable STD_OUTPUT_HANDLE
  • removed: variable SetConsoleMode
  • removed: variable REV_LINE_FMT
  • changed: class RevInfo(collections.namedtuple('RevInfo', ('repo', 'rev', 'frozen'))) → class RevInfo(NamedTuple)
  • changed: function autoupdate(config_file, store, tags_only, freeze, repos=…) → function autoupdate(config_file: str, store: Store, tags_only: bool, freeze: bool, repos: Sequence[str]=…) -> int
  • changed: method RevInfo.update(tags_only, freeze) → method RevInfo.update(tags_only: bool, freeze: bool) -> RevInfo
  • changed: static method RevInfo.from_config(config) → static method RevInfo.from_config(config: dict[str, Any]) -> RevInfo
  • added: field RevInfo.frozen: str | None
  • added: field RevInfo.repo: str
  • added: field RevInfo.rev: str
  • changed: function clean(store) → function clean(store: Store) -> int
  • changed: function gc(store) → function gc(store: Store) -> int
  • added: function hook_impl(store: Store, *, config: str, color: bool, hook_type: str, hook_dir: str, skip_on_missing_config: bool, args: Sequence[str]) -> int
  • added: variable Z40
  • changed: function init_templatedir(config_file, store, directory, hook_types) → function init_templatedir(config_file: str, store: Store, directory: str, hook_types: list[str] | None, skip_on_missing_config: bool=…) -> int
  • removed: function shebang()
  • changed: function install(config_file, store, hook_types, overwrite=…, hooks=…, skip_on_missing_config=…, git_dir=…) → function install(config_file: str, store: Store, hook_types: list[str] | None, overwrite: bool=…, hooks: bool=…, skip_on_missing_config: bool=…, git_dir: str | None=…) -> int
  • changed: function install_hooks(config_file, store) → function install_hooks(config_file: str, store: Store) -> int
  • changed: function is_our_script(filename) → function is_our_script(filename: str) -> bool
  • changed: function uninstall(hook_types) → function uninstall(config_file: str, hook_types: list[str] | None) -> int
  • changed: function migrate_config(config_file, quiet=…) → function migrate_config(config_file: str, quiet: bool=…) -> int
  • changed: class Classifier(object) → class Classifier
  • changed: constructor Classifier(filenames) → constructor Classifier(filenames: Collection[str]) -> None
  • changed: function filter_by_include_exclude(names, include, exclude) → function filter_by_include_exclude(names: Collection[str], include: str, exclude: str) -> list[str]
  • changed: function run(config_file, store, args, environ=…) → function run(config_file: str, store: Store, args: argparse.Namespace, environ: MutableMapping[str, str]=…) -> int
  • changed: method Classifier.by_types(names, types, exclude_types) → method Classifier.by_types(names: Sequence[str], types: Collection[str], types_or: Collection[str], exclude_types: Collection[str]) -> list[str]
  • changed: method Classifier.filenames_for_hook(hook) → method Classifier.filenames_for_hook(hook: Hook) -> tuple[str, ...]
  • added: static method Classifier.from_config(filenames: Collection[str], include: str, exclude: str) -> Classifier
  • changed: function sample_config() → function sample_config() -> int
  • changed: function try_repo(args) → function try_repo(args: argparse.Namespace) -> int
  • added: function validate_config(filenames: list[str]) -> int
  • added: function validate_manifest(filenames: list[str]) -> int
  • removed: variable YAML_DUMP_KWARGS
  • added: variable HOOK_TYPES
  • removed: variable Var
  • changed: function envcontext(patch, _env=…) → function envcontext(patch: PatchesT, _env: MutableMapping[str, str] | None=…) -> Generator[None, None, None]
  • changed: function format_env(parts, env) → function format_env(parts: SubstitutionT, env: MutableMapping[str, str]) -> str
  • added: class Var(NamedTuple)
  • added: field Var.default: str
  • added: field Var.name: str
  • added: variable PatchesT
  • added: variable SubstitutionT
  • added: variable ValueT
  • removed: class FatalError(RuntimeError)
  • changed: function error_handler() → function error_handler() -> Generator[None, None, None]
  • added: class FatalError(RuntimeError)
  • changed: function lock(path, blocked_cb) → function lock(path: str, blocked_cb: Callable[[], None]) -> Generator[None, None, None]
  • removed: function to_bytes(s)
  • removed: function to_text(s)
  • removed: variable n
  • changed: function check_for_cygwin_mismatch() → function check_for_cygwin_mismatch() -> None
  • changed: function commit(repo=…) → function commit(repo: str=…) -> None
  • changed: function get_all_files() → function get_all_files() -> list[str]
  • changed: function get_changed_files(new, old) → function get_changed_files(old: str, new: str) -> list[str]
  • changed: function get_conflicted_files() → function get_conflicted_files() -> set[str]
  • changed: function get_git_dir(git_root=…) → function get_git_dir(git_root: str=…) -> str
  • changed: function get_remote_url(git_root) → function get_remote_url(git_root: str) -> str
  • changed: function get_root() → function get_root() -> str
  • changed: function get_staged_files(cwd=…) → function get_staged_files(cwd: str | None=…) -> list[str]
  • changed: function git_path(name, repo=…) → function git_path(name: str, repo: str=…) -> str
  • changed: function has_core_hookpaths_set() → function has_core_hookpaths_set() -> bool
  • changed: function has_diff(*args, **kwargs) → function has_diff(*args: str, repo: str=…) -> bool
  • changed: function head_rev(remote) → function head_rev(remote: str) -> str
  • changed: function init_repo(path, remote) → function init_repo(path: str, remote: str) -> None
  • changed: function intent_to_add_files() → function intent_to_add_files() -> list[str]
  • changed: function is_in_merge_conflict() → function is_in_merge_conflict() -> bool
  • changed: function no_git_env(_env=…) → function no_git_env(_env: Mapping[str, str] | None=…) -> dict[str, str]
  • changed: function parse_merge_msg_for_conflicts(merge_msg) → function parse_merge_msg_for_conflicts(merge_msg: bytes) -> list[str]
  • changed: function zsplit(s) → function zsplit(s: str) -> list[str]
  • added: function get_best_candidate_tag(rev: str, git_repo: str) -> str
  • added: function get_git_common_dir(git_root: str=…) -> str
  • added: variable NO_FS_MONITOR
  • added: class Hook(NamedTuple)
  • added: field Hook.additional_dependencies: Sequence[str]
  • added: field Hook.alias: str
  • added: field Hook.always_run: bool
  • added: field Hook.args: Sequence[str]
  • added: field Hook.description: str
  • added: field Hook.entry: str
  • added: field Hook.exclude: str
  • added: field Hook.exclude_types: Sequence[str]
  • added: field Hook.fail_fast: bool
  • added: field Hook.files: str
  • added: field Hook.id: str
  • added: field Hook.language: str
  • added: field Hook.language_version: str
  • added: field Hook.log_file: str
  • added: field Hook.minimum_pre_commit_version: str
  • added: field Hook.name: str
  • added: field Hook.pass_filenames: bool
  • added: field Hook.prefix: Prefix
  • added: field Hook.require_serial: bool
  • added: field Hook.src: str
  • added: field Hook.stages: Sequence[str]
  • added: field Hook.types: Sequence[str]
  • added: field Hook.types_or: Sequence[str]
  • added: field Hook.verbose: bool
  • added: property Hook.cmd -> tuple[str, ...]
  • added: property Hook.install_key -> tuple[Prefix, str, str, tuple[str, ...]]
  • added: static method Hook.create(src: str, prefix: Prefix, dct: dict[str, Any]) -> Hook
  • added: variable logger
  • added: class Language(NamedTuple)
  • added: field Language.ENVIRONMENT_DIR: str | None
  • added: field Language.get_default_version: Callable[[], str]
  • added: field Language.health_check: Callable[[Prefix, str], str | None]
  • added: field Language.install_environment: Callable[[Prefix, str, Sequence[str]], None]
  • added: field Language.name: str
  • added: field Language.run_hook: Callable[[Hook, Sequence[str], bool], tuple[int, bytes]]
  • removed: variable healthy
  • changed: function get_env_patch(env) → function get_env_patch(env: str) -> PatchesT
  • changed: function in_env(prefix, language_version) → function in_env(prefix: Prefix, language_version: str) -> Generator[None, None, None]
  • changed: function install_environment(prefix, version, additional_dependencies) → function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable health_check
  • added: function get_env_patch(target_dir: str) -> PatchesT
  • added: function in_env(prefix: Prefix) -> Generator[None, None, None]
  • added: function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • added: function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable ENVIRONMENT_DIR
  • added: variable get_default_version
  • added: variable health_check
  • added: function get_env_patch(venv: str) -> PatchesT
  • added: function in_env(prefix: Prefix) -> Generator[None, None, None]
  • added: function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • added: function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable ENVIRONMENT_DIR
  • added: variable get_default_version
  • added: variable health_check
  • removed: function assert_docker_available()
  • removed: function docker_is_running()
  • removed: variable healthy
  • changed: function build_docker_image(prefix, **kwargs) → function build_docker_image(prefix: Prefix, *, pull: bool) -> None
  • changed: function docker_cmd() → function docker_cmd() -> tuple[str, ...]
  • changed: function docker_tag(prefix) → function docker_tag(prefix: Prefix) -> str
  • changed: function get_docker_user() → function get_docker_user() -> tuple[str, ...]
  • changed: function install_environment(prefix, version, additional_dependencies) → function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • changed: function md5(s) → function md5(s: str) -> str
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable health_check
  • removed: variable healthy
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable health_check
  • added: function get_env_patch(venv: str) -> PatchesT
  • added: function in_env(prefix: Prefix) -> Generator[None, None, None]
  • added: function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • added: function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable BIN_DIR
  • added: variable ENVIRONMENT_DIR
  • added: variable get_default_version
  • added: variable health_check
  • removed: variable healthy
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable health_check
  • removed: variable healthy
  • changed: function get_env_patch(venv) → function get_env_patch(venv: str) -> PatchesT
  • changed: function guess_go_dir(remote_url) → function guess_go_dir(remote_url: str) -> str
  • changed: function in_env(prefix) → function in_env(prefix: Prefix) -> Generator[None, None, None]
  • changed: function install_environment(prefix, version, additional_dependencies) → function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable health_check
  • removed: function basic_healthy(prefix, language_version)
  • changed: function assert_no_additional_deps(lang, additional_deps) → function assert_no_additional_deps(lang: str, additional_deps: Sequence[str]) -> None
  • changed: function assert_version_default(binary, version) → function assert_version_default(binary: str, version: str) -> None
  • changed: function basic_get_default_version() → function basic_get_default_version() -> str
  • changed: function environment_dir(ENVIRONMENT_DIR, language_version) → function environment_dir(d: None, language_version: str) -> None | (d: str, language_version: str) -> str
  • changed: function no_install(prefix, version, additional_dependencies) → function no_install(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> NoReturn
  • changed: function run_setup_cmd(prefix, cmd) → function run_setup_cmd(prefix: Prefix, cmd: tuple[str, ...], **kwargs: Any) -> None
  • changed: function run_xargs(hook, cmd, file_args, **kwargs) → function run_xargs(hook: Hook, cmd: tuple[str, ...], file_args: Sequence[str], **kwargs: Any) -> tuple[int, bytes]
  • changed: function target_concurrency(hook) → function target_concurrency(hook: Hook) -> int
  • added: function basic_health_check(prefix: Prefix, language_version: str) -> str | None
  • added: function exe_exists(exe: str) -> bool
  • added: variable SHIMS_RE
  • added: function get_env_patch(d: str) -> PatchesT
  • added: function in_env(prefix: Prefix) -> Generator[None, None, None]
  • added: function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • added: function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable ENVIRONMENT_DIR
  • added: variable get_default_version
  • added: variable health_check
  • removed: variable get_default_version
  • removed: variable healthy
  • changed: function get_env_patch(venv) → function get_env_patch(venv: str) -> PatchesT
  • changed: function in_env(prefix, language_version) → function in_env(prefix: Prefix, language_version: str) -> Generator[None, None, None]
  • changed: function install_environment(prefix, version, additional_dependencies) → function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: function get_default_version() -> str
  • added: function health_check(prefix: Prefix, language_version: str) -> str | None
  • removed: function run_hook(hook, file_args, color)
  • removed: variable ENVIRONMENT_DIR
  • removed: variable GREP
  • removed: variable get_default_version
  • removed: variable healthy
  • removed: variable install_environment
  • added: function get_env_patch(venv: str) -> PatchesT
  • added: function in_env(prefix: Prefix, language_version: str) -> Generator[None, None, None]
  • added: function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • added: function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable ENVIRONMENT_DIR
  • added: variable get_default_version
  • added: variable health_check
  • removed: variable healthy
  • changed: function main(argv=…) → function main(argv: Sequence[str] | None=…) -> int
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: class Choice(NamedTuple)
  • added: field Choice.multiline: bool
  • added: field Choice.negate: bool
  • added: variable FNS
  • added: variable health_check
  • removed: function make_venv(envdir, python)
  • removed: function py_interface(_dir, _make_venv)
  • removed: variable healthy
  • removed: variable in_env
  • removed: variable install_environment
  • removed: variable run_hook
  • changed: function bin_dir(venv) → function bin_dir(venv: str) -> str
  • changed: function get_default_version() → function get_default_version() -> str
  • changed: function get_env_patch(venv) → function get_env_patch(venv: str) -> PatchesT
  • changed: function norm_version(version) → function norm_version(version: str) -> str | None
  • added: function health_check(prefix: Prefix, language_version: str) -> str | None
  • added: function in_env(prefix: Prefix, language_version: str) -> Generator[None, None, None]
  • added: function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • added: function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • removed: function get_default_version()
  • removed: function make_venv(envdir, python)
  • removed: function orig_py_exe(exe)
  • removed: variable ENVIRONMENT_DIR
  • removed: variable healthy
  • removed: variable in_env
  • removed: variable install_environment
  • removed: variable run_hook
  • added: function get_env_patch(venv: str) -> PatchesT
  • added: function in_env(prefix: Prefix, language_version: str) -> Generator[None, None, None]
  • added: function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • added: function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable ENVIRONMENT_DIR
  • added: variable RSCRIPT_OPTS
  • added: variable get_default_version
  • added: variable health_check
  • removed: variable get_default_version
  • removed: variable healthy
  • changed: function get_env_patch(venv, language_version) → function get_env_patch(venv: str, language_version: str) -> PatchesT
  • changed: function in_env(prefix, language_version) → function in_env(prefix: Prefix, language_version: str) -> Generator[None, None, None]
  • changed: function install_environment(prefix, version, additional_dependencies) → function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: function get_default_version() -> str
  • added: variable health_check
  • removed: variable get_default_version
  • removed: variable healthy
  • changed: function get_env_patch(target_dir) → function get_env_patch(target_dir: str, version: str) -> PatchesT
  • changed: function in_env(prefix) → function in_env(prefix: Prefix, language_version: str) -> Generator[None, None, None]
  • changed: function install_environment(prefix, version, additional_dependencies) → function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: function get_default_version() -> str
  • added: function install_rust_with_toolchain(toolchain: str) -> None
  • added: variable health_check
  • removed: variable healthy
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable health_check
  • removed: variable healthy
  • changed: function get_env_patch(venv) → function get_env_patch(venv: str) -> PatchesT
  • changed: function in_env(prefix) → function in_env(prefix: Prefix) -> Generator[None, None, None]
  • changed: function install_environment(prefix, version, additional_dependencies) → function install_environment(prefix: Prefix, version: str, additional_dependencies: Sequence[str]) -> None
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable health_check
  • removed: variable healthy
  • changed: function run_hook(hook, file_args, color) → function run_hook(hook: Hook, file_args: Sequence[str], color: bool) -> tuple[int, bytes]
  • added: variable health_check
  • changed: constructor LoggingHandler(use_color) → constructor LoggingHandler(use_color: bool) -> None
  • changed: function logging_handler(*args, **kwargs) → function logging_handler(use_color: bool) -> Generator[None, None, None]
  • changed: method LoggingHandler.emit(record) → method LoggingHandler.emit(record: logging.LogRecord) -> None
  • removed: class AppendReplaceDefault(argparse.Action)
  • removed: constructor AppendReplaceDefault(*args, **kwargs)
  • changed: function main(argv=…) → function main(argv: Sequence[str] | None=…) -> int
  • removed: function main(argv=…)
  • removed: function make_archive(name, repo, ref, destdir)
  • removed: variable REPOS
  • changed: function check_all_hooks_match_files(config_file) → function check_all_hooks_match_files(config_file: str) -> int
  • changed: function main(argv=…) → function main(argv: Sequence[str] | None=…) -> int
  • changed: function check_useless_excludes(config_file) → function check_useless_excludes(config_file: str) -> int
  • changed: function exclude_matches_any(filenames, include, exclude) → function exclude_matches_any(filenames: Sequence[str], include: str, exclude: str) -> bool
  • changed: function main(argv=…) → function main(argv: Sequence[str] | None=…) -> int
  • changed: function main(argv=…) → function main(argv: Sequence[str] | None=…) -> int
  • removed: function get_hook_message(start, postfix=…, end_msg=…, end_len=…, end_color=…, use_color=…, cols=…)
  • removed: variable stdout_byte_stream
  • changed: function write(s, stream=…) → function write(s: str, stream: IO[bytes]=…) -> None
  • changed: function write_line(s=…, stream=…, logfile_name=…) → function write_line(s: str | None=…, **kwargs: Any) -> None
  • added: function write_line_b(s: bytes | None=…, stream: IO[bytes]=…, logfile_name: str | None=…) -> None
  • changed: function find_executable(exe, _environ=…) → function find_executable(exe: str, _environ: Mapping[str, str] | None=…) -> str | None
  • changed: function normalize_cmd(cmd) → function normalize_cmd(cmd: tuple[str, ...]) -> tuple[str, ...]
  • changed: function normexe(orig) → function normexe(orig: str) -> str
  • changed: function parse_filename(filename) → function parse_filename(filename: str) -> tuple[str, ...]
  • changed: method ExecutableNotFoundError.to_output() → method ExecutableNotFoundError.to_output() -> tuple[int, bytes, None]
  • changed: class Prefix(collections.namedtuple('Prefix', ('prefix_dir',))) → class Prefix(NamedTuple)
  • changed: method Prefix.exists(*parts) → method Prefix.exists(*parts: str) -> bool
  • changed: method Prefix.path(*parts) → method Prefix.path(*parts: str) -> str
  • changed: method Prefix.star(end) → method Prefix.star(end: str) -> tuple[str, ...]
  • added: field Prefix.prefix_dir: str
  • removed: class Hook(collections.namedtuple('Hook', ('src', 'prefix') + _KEYS))
  • removed: method Hook.install()
  • removed: method Hook.installed()
  • removed: method Hook.run(file_args, color)
  • removed: property Hook.cmd
  • removed: property Hook.install_key
  • removed: static method Hook.create(src, prefix, dct)
  • changed: function all_hooks(root_config, store) → function all_hooks(root_config: dict[str, Any], store: Store) -> tuple[Hook, ...]
  • changed: function install_hook_envs(hooks, store) → function install_hook_envs(hooks: Sequence[Hook], store: Store) -> None
  • changed: function staged_files_only(patch_dir) → function staged_files_only(patch_dir: str) -> Generator[None, None, None]
  • changed: class Store(object) → class Store
  • changed: constructor Store(directory=…) → constructor Store(directory: str | None=…) -> None
  • changed: method Store.clone(repo, ref, deps=…) → method Store.clone(repo: str, ref: str, deps: Sequence[str]=…) -> str
  • changed: method Store.connect(db_path=…) → method Store.connect(db_path: str | None=…) -> Generator[sqlite3.Connection, None, None]
  • changed: method Store.delete_configs(configs) → method Store.delete_configs(configs: list[str]) -> None
  • changed: method Store.delete_repo(db_repo_name, ref, path) → method Store.delete_repo(db_repo_name: str, ref: str, path: str) -> None
  • changed: method Store.exclusive_lock() → method Store.exclusive_lock() -> Generator[None, None, None]
  • changed: method Store.make_local(deps) → method Store.make_local(deps: Sequence[str]) -> str
  • changed: method Store.mark_config_used(path) → method Store.mark_config_used(path: str) -> None
  • changed: method Store.select_all_configs() → method Store.select_all_configs() -> list[str]
  • changed: method Store.select_all_repos() → method Store.select_all_repos() -> list[tuple[str, str, str]]
  • changed: static method Store.db_repo_name(repo, deps) → static method Store.db_repo_name(repo: str, deps: Sequence[str]) -> str
  • removed: function mkdirp(path)
  • removed: function noop_context()
  • removed: method CalledProcessError.to_bytes()
  • removed: method CalledProcessError.to_text()
  • changed: class Pty(object) → class Pty
  • changed: constructor CalledProcessError(returncode, cmd, expected_returncode, stdout, stderr) → constructor CalledProcessError(returncode: int, cmd: tuple[str, ...], stdout: bytes, stderr: bytes | None) -> None
  • changed: constructor Pty() → constructor Pty() -> None
  • changed: function clean_path_on_failure(path) → function clean_path_on_failure(path: str) -> Generator[None, None, None]
  • changed: function cmd_output(*cmd, **kwargs) → function cmd_output(*cmd: str, **kwargs: Any) -> tuple[int, str, str | None]
  • changed: function cmd_output_b(*cmd, **kwargs) → function cmd_output_b(*cmd: str, check: bool=…, **kwargs: Any) -> tuple[int, bytes, bytes | None]
  • changed: function cmd_output_p(*cmd, **kwargs) → function cmd_output_p(*cmd: str, check: bool=…, **kwargs: Any) -> tuple[int, bytes, bytes | None]
  • changed: function make_executable(filename) → function make_executable(filename: str) -> None
  • changed: function parse_version(s) → function parse_version(s: str) -> tuple[int, ...]
  • changed: function resource_bytesio(filename) → function resource_bytesio(filename: str) -> IO[bytes]
  • changed: function resource_text(filename) → function resource_text(filename: str) -> str
  • changed: function rmtree(path) → function rmtree(path: str) -> None
  • changed: function tmpdir() → function tmpdir() -> Generator[str, None, None]
  • changed: method Pty.close_r() → method Pty.close_r() -> None
  • changed: method Pty.close_w() → method Pty.close_w() -> None
  • added: function force_bytes(exc: Any) -> bytes
  • added: function win_exe(s: str) -> str
  • added: function yaml_dump(o: Any, **kwargs: Any) -> str
  • added: variable Dumper
  • added: variable Loader
  • added: variable yaml_load
  • changed: function partition(cmd, varargs, target_concurrency, _max_length=…) → function partition(cmd: Sequence[str], varargs: Sequence[str], target_concurrency: int, _max_length: int | None=…) -> tuple[tuple[str, ...], ...]
  • changed: function xargs(cmd, varargs, **kwargs) → function xargs(cmd: tuple[str, ...], varargs: Sequence[str], *, color: bool=…, target_concurrency: int=…, _max_length: int=…, **kwargs: Any) -> tuple[int, bytes]
  • added: variable TArg
  • added: variable TRet