Skip to content

Commit

Permalink
#1131: Improve git_commit_add rule
Browse files Browse the repository at this point in the history
Add more capabilities to the rule, remove its priority and fix tests
  • Loading branch information
scorphus committed Jul 15, 2021
1 parent 5ffee36 commit ea97d27
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 30 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
48 changes: 25 additions & 23 deletions tests/rules/test_git_commit_add.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,36 @@
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
14 changes: 8 additions & 6 deletions thefuck/rules/git_commit_add.py
Original file line number Diff line number Diff line change
@@ -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))

0 comments on commit ea97d27

Please sign in to comment.