1
0
mirror of https://github.com/nvbn/thefuck.git synced 2025-01-31 02:01:13 +00:00

#1096: Rule: Bypass failed git hook (#1097)

* naive implementation

* better implementation

* remove redundant enabled_by_default

Co-authored-by: Pablo Aguiar <scorphus@gmail.com>

* add README entry

* add tests

Co-authored-by: Pablo Aguiar <scorphus@gmail.com>
This commit is contained in:
Divya Jain 2020-07-17 03:02:29 +05:30 committed by GitHub
parent 365db1ee41
commit 39753a004e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 71 additions and 0 deletions

View File

@ -214,6 +214,7 @@ following rules are enabled by default:
* `git_fix_stash` &ndash; fixes `git stash` commands (misspelled subcommand and missing `save`); * `git_fix_stash` &ndash; fixes `git stash` commands (misspelled subcommand and missing `save`);
* `git_flag_after_filename` &ndash; fixes `fatal: bad flag '...' after filename` * `git_flag_after_filename` &ndash; fixes `fatal: bad flag '...' after filename`
* `git_help_aliased` &ndash; fixes `git help <alias>` commands replacing <alias> with the aliased command; * `git_help_aliased` &ndash; fixes `git help <alias>` commands replacing <alias> with the aliased command;
* `git_hook_bypass` &ndash; adds `--no-verify` flag previous to `git am`, `git commit`, or `git push` command;
* `git_lfs_mistype` &ndash; fixes mistyped `git lfs <command>` commands; * `git_lfs_mistype` &ndash; fixes mistyped `git lfs <command>` commands;
* `git_merge` &ndash; adds remote to branch names; * `git_merge` &ndash; adds remote to branch names;
* `git_merge_unrelated` &ndash; adds `--allow-unrelated-histories` when required * `git_merge_unrelated` &ndash; adds `--allow-unrelated-histories` when required

View File

@ -0,0 +1,43 @@
import pytest
from thefuck.rules.git_hook_bypass import match, get_new_command
from thefuck.types import Command
@pytest.mark.parametrize(
"command",
[
Command("git am", ""),
Command("git commit", ""),
Command("git commit -m 'foo bar'", ""),
Command("git push", ""),
Command("git push -u foo bar", ""),
],
)
def test_match(command):
assert match(command)
@pytest.mark.parametrize(
"command",
[
Command("git add foo", ""),
Command("git status", ""),
Command("git diff foo bar", ""),
],
)
def test_not_match(command):
assert not match(command)
@pytest.mark.parametrize(
"command, new_command",
[
(Command("git am", ""), "git am --no-verify"),
(Command("git commit", ""), "git commit --no-verify"),
(Command("git commit -m 'foo bar'", ""), "git commit --no-verify -m 'foo bar'"),
(Command("git push", ""), "git push --no-verify"),
(Command("git push -p", ""), "git push --no-verify -p"),
],
)
def test_get_new_command(command, new_command):
assert get_new_command(command) == new_command

View File

@ -0,0 +1,27 @@
from thefuck.utils import replace_argument
from thefuck.specific.git import git_support
hooked_commands = ("am", "commit", "push")
@git_support
def match(command):
return any(
hooked_command in command.script_parts for hooked_command in hooked_commands
)
@git_support
def get_new_command(command):
hooked_command = next(
hooked_command
for hooked_command in hooked_commands
if hooked_command in command.script_parts
)
return replace_argument(
command.script, hooked_command, hooked_command + " --no-verify"
)
priority = 900
requires_output = False