mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-18 00:24:47 +04:00
POC for --dry-run param in run command
This commit is contained in:
parent
2280645d0e
commit
455fc07ad9
10 changed files with 40 additions and 10 deletions
|
|
@ -147,6 +147,7 @@ def _run_single_hook(
|
|||
diff_before: bytes,
|
||||
verbose: bool,
|
||||
use_color: bool,
|
||||
dry_run: bool,
|
||||
) -> tuple[bool, bytes]:
|
||||
filenames = tuple(classifier.filenames_for_hook(hook))
|
||||
|
||||
|
|
@ -198,6 +199,7 @@ def _run_single_hook(
|
|||
is_local=hook.src == 'local',
|
||||
require_serial=hook.require_serial,
|
||||
color=use_color,
|
||||
dry_run=dry_run,
|
||||
)
|
||||
duration = round(time.monotonic() - time_before, 2) or 0
|
||||
diff_after = _get_diff()
|
||||
|
|
@ -296,6 +298,7 @@ def _run_hooks(
|
|||
current_retval, prior_diff = _run_single_hook(
|
||||
classifier, hook, skips, cols, prior_diff,
|
||||
verbose=args.verbose, use_color=args.color,
|
||||
dry_run=args.dry_run,
|
||||
)
|
||||
retval |= current_retval
|
||||
if retval and (config['fail_fast'] or hook.fail_fast):
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ class Language(Protocol):
|
|||
is_local: bool,
|
||||
require_serial: bool,
|
||||
color: bool,
|
||||
dry_run: bool,
|
||||
) -> tuple[int, bytes]:
|
||||
...
|
||||
|
||||
|
|
@ -158,6 +159,7 @@ def run_xargs(
|
|||
*,
|
||||
require_serial: bool,
|
||||
color: bool,
|
||||
dry_run: bool,
|
||||
) -> tuple[int, bytes]:
|
||||
if require_serial:
|
||||
jobs = 1
|
||||
|
|
@ -167,7 +169,7 @@ def run_xargs(
|
|||
# ordering.
|
||||
file_args = _shuffled(file_args)
|
||||
jobs = target_concurrency()
|
||||
return xargs.xargs(cmd, file_args, target_concurrency=jobs, color=color)
|
||||
return xargs.xargs(cmd, file_args, target_concurrency=jobs, color=color, dry_run=dry_run)
|
||||
|
||||
|
||||
def hook_cmd(entry: str, args: Sequence[str]) -> tuple[str, ...]:
|
||||
|
|
@ -183,10 +185,12 @@ def basic_run_hook(
|
|||
is_local: bool,
|
||||
require_serial: bool,
|
||||
color: bool,
|
||||
dry_run: bool,
|
||||
) -> tuple[int, bytes]:
|
||||
return run_xargs(
|
||||
hook_cmd(entry, args),
|
||||
file_args,
|
||||
require_serial=require_serial,
|
||||
color=color,
|
||||
dry_run=dry_run,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -130,6 +130,7 @@ def run_hook(
|
|||
is_local: bool,
|
||||
require_serial: bool,
|
||||
color: bool,
|
||||
dry_run: bool,
|
||||
) -> tuple[int, bytes]: # pragma: win32 no cover
|
||||
# Rebuild the docker image in case it has gone missing, as many people do
|
||||
# automated cleanup of docker images.
|
||||
|
|
@ -143,4 +144,5 @@ def run_hook(
|
|||
file_args,
|
||||
require_serial=require_serial,
|
||||
color=color,
|
||||
dry_run=dry_run,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ def run_hook(
|
|||
is_local: bool,
|
||||
require_serial: bool,
|
||||
color: bool,
|
||||
dry_run: bool,
|
||||
) -> tuple[int, bytes]: # pragma: win32 no cover
|
||||
cmd = docker_cmd() + lang_base.hook_cmd(entry, args)
|
||||
return lang_base.run_xargs(
|
||||
|
|
@ -29,4 +30,5 @@ def run_hook(
|
|||
file_args,
|
||||
require_serial=require_serial,
|
||||
color=color,
|
||||
dry_run=dry_run,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -96,9 +96,10 @@ def run_hook(
|
|||
is_local: bool,
|
||||
require_serial: bool,
|
||||
color: bool,
|
||||
dry_run: bool,
|
||||
) -> tuple[int, bytes]:
|
||||
cmd = (sys.executable, '-m', __name__, *args, entry)
|
||||
return xargs(cmd, file_args, color=color)
|
||||
return xargs(cmd, file_args, color=color, dry_run=dry_run)
|
||||
|
||||
|
||||
def main(argv: Sequence[str] | None = None) -> int:
|
||||
|
|
|
|||
|
|
@ -185,6 +185,7 @@ def run_hook(
|
|||
is_local: bool,
|
||||
require_serial: bool,
|
||||
color: bool,
|
||||
dry_run: bool,
|
||||
) -> tuple[int, bytes]:
|
||||
cmd = _cmd_from_hook(prefix, entry, args, is_local=is_local)
|
||||
return lang_base.run_xargs(
|
||||
|
|
@ -192,4 +193,5 @@ def run_hook(
|
|||
file_args,
|
||||
require_serial=require_serial,
|
||||
color=color,
|
||||
dry_run=dry_run,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ def run_hook(
|
|||
is_local: bool,
|
||||
require_serial: bool,
|
||||
color: bool,
|
||||
dry_run: bool,
|
||||
) -> tuple[int, bytes]:
|
||||
cmd = lang_base.hook_cmd(entry, args)
|
||||
cmd = (prefix.path(cmd[0]), *cmd[1:])
|
||||
|
|
@ -29,4 +30,5 @@ def run_hook(
|
|||
file_args,
|
||||
require_serial=require_serial,
|
||||
color=color,
|
||||
dry_run=dry_run,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -60,6 +60,12 @@ def _add_hook_type_option(parser: argparse.ArgumentParser) -> None:
|
|||
def _add_run_options(parser: argparse.ArgumentParser) -> None:
|
||||
parser.add_argument('hook', nargs='?', help='A single hook-id to run')
|
||||
parser.add_argument('--verbose', '-v', action='store_true', default=False)
|
||||
parser.add_argument(
|
||||
'--dry-run',
|
||||
action='store_true',
|
||||
help='Display the hook commands instead of run them (useful for debugging).',
|
||||
default=False,
|
||||
)
|
||||
mutex_group = parser.add_mutually_exclusive_group(required=False)
|
||||
mutex_group.add_argument(
|
||||
'--all-files', '-a', action='store_true', default=False,
|
||||
|
|
|
|||
|
|
@ -134,6 +134,7 @@ def xargs(
|
|||
varargs: Sequence[str],
|
||||
*,
|
||||
color: bool = False,
|
||||
dry_run: bool = False,
|
||||
target_concurrency: int = 1,
|
||||
_max_length: int = _get_platform_max_length(),
|
||||
**kwargs: Any,
|
||||
|
|
@ -172,14 +173,19 @@ def xargs(
|
|||
return cmd_fn(
|
||||
*run_cmd, check=False, stderr=subprocess.STDOUT, **kwargs,
|
||||
)
|
||||
if dry_run:
|
||||
for run_cmd in partitions:
|
||||
print("DRY RUN EXEC: ", " ".join(run_cmd))
|
||||
retcode = 0
|
||||
stdout = b""
|
||||
else:
|
||||
threads = min(len(partitions), target_concurrency)
|
||||
with _thread_mapper(threads) as thread_map:
|
||||
results = thread_map(run_cmd_partition, partitions)
|
||||
|
||||
threads = min(len(partitions), target_concurrency)
|
||||
with _thread_mapper(threads) as thread_map:
|
||||
results = thread_map(run_cmd_partition, partitions)
|
||||
|
||||
for proc_retcode, proc_out, _ in results:
|
||||
if abs(proc_retcode) > abs(retcode):
|
||||
retcode = proc_retcode
|
||||
stdout += proc_out
|
||||
for proc_retcode, proc_out, _ in results:
|
||||
if abs(proc_retcode) > abs(retcode):
|
||||
retcode = proc_retcode
|
||||
stdout += proc_out
|
||||
|
||||
return retcode, stdout
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue