diff --git a/README.md b/README.md index 838300762..070ee9759 100644 --- a/README.md +++ b/README.md @@ -203,6 +203,7 @@ following rules are enabled by default: * `git_branch_delete` – changes `git branch -d` to `git branch -D`; * `git_branch_exists` – offers `git branch -d foo`, `git branch -D foo` or `git checkout foo` when creating a branch that already exists; * `git_branch_list` – catches `git branch list` in place of `git branch` and removes created branch; +* `git_branch_flag_0_to_flag_dash_v` – undoes `git branch 0v` and runs `git branch -v` in its place; * `git_checkout` – fixes branch name or creates new branch; * `git_commit_amend` – offers `git commit --amend` after previous commit; * `git_commit_reset` – offers `git reset HEAD~` after previous commit; diff --git a/tests/rules/test_git_branch_flag_0_to_flag_dash_v.py b/tests/rules/test_git_branch_flag_0_to_flag_dash_v.py new file mode 100644 index 000000000..21c1e021d --- /dev/null +++ b/tests/rules/test_git_branch_flag_0_to_flag_dash_v.py @@ -0,0 +1,22 @@ +import pytest +from thefuck.rules.git_branch_flag_0_to_flag_dash_v import match, get_new_command +from thefuck.types import Command + + +@pytest.fixture +def output(): + return "" + + +def test_match_git_branch_0v(output): + assert match(Command('git branch 0v', output)) + + +def test_matches_no__git_branch_0_anything(output): + assert not match(Command('git branch -v', '')) + assert not match(Command('ls', output)) + + +def test_get_new_command(output): + assert get_new_command(Command('git branch 0v', output))\ + == 'git branch -D 0v && git branch -v' diff --git a/thefuck/rules/git_branch_flag_0_to_flag_dash_v.py b/thefuck/rules/git_branch_flag_0_to_flag_dash_v.py new file mode 100644 index 000000000..205f9db17 --- /dev/null +++ b/thefuck/rules/git_branch_flag_0_to_flag_dash_v.py @@ -0,0 +1,36 @@ +from thefuck.shells import shell +from thefuck.specific.git import git_support +from thefuck.utils import memoize + +''' +keys are fatfingered entry, values are two-element tuples +where the first element is "the fix" and the second element +is "what you meant to do + ''' +# clunky when there's only one key, but as others get added, I _think_ +# this will be cleaner +flags_and_their_fixes = dict() +flags_and_their_fixes["v"] = ('git branch -D 0v', 'git branch -v') + + +@memoize +def _supported_flag_fix(command): + flag = command.script_parts[2:][0] + + if len(flag) == 2 and flag.startswith("0"): + return flags_and_their_fixes[flag[1]] + else: + return None + + +@git_support +def match(command): + return (command.script_parts + and command.script_parts[1] == 'branch' + and _supported_flag_fix(command) is not None) + + +@git_support +def get_new_command(command): + fix_parts = _supported_flag_fix(command) + return shell.and_(fix_parts[0], fix_parts[1])