1
0
mirror of https://github.com/nvbn/thefuck.git synced 2024-10-05 18:31:10 +01:00

#1131: Improve git_commit_add rule

Add more capabilities to the rule, remove its priority and fix tests
This commit is contained in:
Pablo Santiago Blum de Aguiar 2021-07-08 21:43:35 +02:00
parent 55922e4dbe
commit 11b70526f7
3 changed files with 34 additions and 30 deletions

View File

@ -234,7 +234,7 @@ following rules are enabled by default:
* `git_branch_0flag` – fixes commands such as `git branch 0v` and `git branch 0r` removing the created branch;
* `git_checkout` – fixes branch name or creates new branch;
* `git_clone_git_clone` – replaces `git clone git clone ...` with `git clone ...`
* `git_commit_add` – offers `git commit -a ...` after previous commit if it failed because nothing was staged;
* `git_commit_add` – offers `git commit -a ...` or `git commit -p ...` after previous commit if it failed because nothing was staged;
* `git_commit_amend` – offers `git commit --amend` after previous commit;
* `git_commit_reset` – offers `git reset HEAD~` after previous commit;
* `git_diff_no_index` – adds `--no-index` to previous `git diff` on untracked files;

View File

@ -3,34 +3,36 @@ from thefuck.rules.git_commit_add import match, get_new_command
from thefuck.types import Command
@pytest.mark.parametrize('script, output', [
('git commit -m "test"', 'no changes added to commit'),
('git commit', 'no changes added to commit')])
@pytest.mark.parametrize(
"script, output",
[
('git commit -m "test"', "no changes added to commit"),
("git commit", "no changes added to commit"),
],
)
def test_match(output, script):
assert match(Command(script, output))
@pytest.mark.parametrize('script, output', [
('git commit -m "test"', ' 1 file changed, 15 insertions(+), 14 deletions(-)')])
@pytest.mark.parametrize(
"script, output",
[
('git commit -m "test"', " 1 file changed, 15 insertions(+), 14 deletions(-)"),
("git branch foo", ""),
("git checkout feature/test_commit", ""),
("git push", ""),
],
)
def test_not_match(output, script):
assert not match(Command(script, output))
@pytest.mark.parametrize('script', [
'git branch foo',
'git checkout feature/test_commit',
'git push'])
def test_not_match_either(script):
assert not match(Command(script, ''))
@pytest.mark.parametrize('script', [
('git commit')])
def test_get_new_command_one(script):
assert get_new_command(Command(script, '')) == 'git commit -a'
@pytest.mark.parametrize('script', [
('git commit -m "test commit"')])
def test_get_new_command_two(script):
assert get_new_command(Command(script, '')) == 'git commit -a -m "test commit"'
@pytest.mark.parametrize(
"script, new_command",
[
("git commit", ["git commit -a", "git commit -p"]),
('git commit -m "foo"', ['git commit -a -m "foo"', 'git commit -p -m "foo"']),
],
)
def test_get_new_command(script, new_command):
assert get_new_command(Command(script, "")) == new_command

View File

@ -1,15 +1,17 @@
from thefuck.utils import replace_argument
from thefuck.utils import eager, replace_argument
from thefuck.specific.git import git_support
priority = 900 # Lower first, default is 1000
@git_support
def match(command):
return ('commit' in command.script_parts
and 'no changes added to commit' in command.output)
return (
"commit" in command.script_parts
and "no changes added to commit" in command.output
)
@eager
@git_support
def get_new_command(command):
return replace_argument(command.script, 'commit', 'commit -a')
for opt in ("-a", "-p"):
yield replace_argument(command.script, "commit", "commit {}".format(opt))